00001 #include "utils/utils.h" 00002 #include <check.h> 00003 00004 #include "sed_cube.h" 00005 00006 START_TEST ( test_sed_cube_new ) 00007 { 00008 { 00009 Sed_cube c = sed_cube_new( 2 , 5 ); 00010 00011 fail_if ( c==NULL , "NULL is not a valid cube" ); 00012 fail_unless( sed_cube_n_x(c)==2 , "New is of incorrect dimension" ); 00013 fail_unless( sed_cube_n_y(c)==5 , "New is of incorrect dimension" ); 00014 fail_unless( eh_compare_dbl(sed_cube_mass(c),0,1e-12) , "New cube should be empty" ); 00015 00016 sed_cube_destroy( c ); 00017 } 00018 } 00019 END_TEST 00020 00021 START_TEST ( test_sed_cube_destroy ) 00022 { 00023 Sed_cube c = sed_cube_new( 5 , 2 ); 00024 00025 c = sed_cube_destroy(c); 00026 00027 fail_unless( c==NULL , "Destroyed cube should be NULL" ); 00028 } 00029 END_TEST 00030 00031 gchar* test_seqfile[] = 00032 { 00033 " # Begin the first record\n" , 00034 "[ TiMe: 1 ] /* Label is case insensitive*/\n" , 00035 "0, -1\n" , 00036 "10, 1\n" , 00037 "/* The second record.\n" , 00038 "*/\n" , 00039 "[ time : 3 ]\n" , 00040 "0, -1\n" , 00041 "5, -2\n" , 00042 "9, 1// file ending without an empty line" , 00043 NULL 00044 }; 00045 00046 START_TEST ( test_sequence_2 ) 00047 { 00048 char* file = tempnam( "/tmp" , "SED_CUBE_TEST_" ); 00049 Eh_sequence* s; 00050 gint n_y = 10; 00051 double* y = eh_linspace( 0 , 9 , n_y ); 00052 00053 { 00054 FILE* fp = eh_fopen( file , "w" ); 00055 gchar** line; 00056 00057 for ( line=test_seqfile ; *line ; line++ ) 00058 fprintf( fp , "%s" , *line ); 00059 00060 fclose( fp ); 00061 } 00062 00063 { 00064 GError* err = NULL; 00065 00066 s = sed_get_floor_sequence_2( file , y , n_y , &err ); 00067 00068 if ( err ) 00069 fprintf( stderr , "%s" , err->message ); 00070 00071 } 00072 00073 fail_unless( s!=NULL , "NULL is not a valid sequence" ); 00074 fail_unless( s->len==2 , "Incorrect number of records read" ); 00075 00076 00077 } 00078 END_TEST 00079 00080 START_TEST ( test_cube_to_cell ) 00081 { 00082 Sed_cube p = sed_cube_new( 25 , 50 ); 00083 Sed_cell dest; 00084 double cube_mass, cell_mass; 00085 00086 sed_cube_set_x_res( p , 1. ); 00087 sed_cube_set_y_res( p , 1. ); 00088 sed_cube_set_z_res( p , 1. ); 00089 00090 { 00091 Sed_cell c = sed_cell_new_env( ); 00092 gint i; 00093 00094 sed_cell_set_equal_fraction( c ); 00095 sed_cell_resize( c , 1. ); 00096 00097 for ( i=0 ; i<sed_cube_size(p) ; i++ ) 00098 sed_column_add_cell( sed_cube_col(p,i) , c ); 00099 00100 sed_cell_destroy( c ); 00101 } 00102 00103 dest = sed_cube_to_cell( p , NULL ); 00104 00105 cell_mass = sed_cell_mass( dest ); 00106 cube_mass = sed_cube_mass( p ); 00107 00108 fail_unless( eh_compare_dbl(cube_mass,cell_mass,1e-12) , "Mass balance error" ); 00109 00110 sed_cube_destroy( p ); 00111 } 00112 END_TEST 00113 00114 Suite *sed_cube_suite( void ) 00115 { 00116 Suite *s = suite_create( "Sed_cube" ); 00117 TCase *test_case_core = tcase_create( "Core" ); 00118 00119 suite_add_tcase( s , test_case_core ); 00120 00121 tcase_add_test( test_case_core , test_sed_cube_new ); 00122 tcase_add_test( test_case_core , test_sed_cube_destroy ); 00123 tcase_add_test( test_case_core , test_sequence_2 ); 00124 tcase_add_test( test_case_core , test_cube_to_cell ); 00125 00126 return s; 00127 } 00128 00129 int test_sed_cube( void ) 00130 { 00131 int n; 00132 00133 { 00134 Suite *s = sed_cube_suite(); 00135 SRunner *sr = srunner_create( s ); 00136 00137 srunner_run_all( sr , CK_NORMAL ); 00138 n = srunner_ntests_failed( sr ); 00139 srunner_free( sr ); 00140 } 00141 00142 return n; 00143 } 00144 00145