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