/Users/huttone/Devel/sedflux-new/sedflux/trunk/ew/compact/compact_unit_test.c

Go to the documentation of this file.
00001 #include <utils/utils.h>
00002 #include <sed/sed_sedflux.h>
00003 #include <check.h>
00004 
00005 int compact( Sed_column );
00006 
00007 START_TEST ( test_compact_0 )
00008 {
00009    Sed_column c = sed_column_new( 5 );
00010    Sed_cell cell;
00011 
00012    {
00013       double* f = eh_new0( double , sed_sediment_env_n_types() );
00014 
00015       f[0] = 1.;
00016       cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00017 
00018       eh_free( f );
00019    }
00020 
00021    sed_column_set_sea_level  ( c , 10   );
00022    sed_column_set_base_height( c , -40000 );
00023 
00024    sed_column_add_cell( c , cell );
00025 
00026    {
00027       double mass_out;
00028       double mass_in = sed_column_sediment_mass(c);
00029 
00030       compact( c );
00031 
00032       mass_out = sed_column_sediment_mass(c);
00033 
00034       fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00035    }
00036 
00037    {
00038       Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00039       double e_min  = sed_cell_void_ratio_min( cell_0 );
00040       double e      = sed_cell_void_ratio    ( cell_0 );
00041 
00042       fail_unless( eh_compare_dbl( e_min , e , 1e-6 )           , "Cell did not reach maximum compaction" );
00043    }
00044 
00045    sed_cell_destroy  ( cell );
00046    sed_column_destroy( c    );
00047 }
00048 END_TEST
00049 
00050 START_TEST ( test_compact_1 )
00051 {
00052    Sed_column c = sed_column_new( 5 );
00053    Sed_cell cell;
00054 
00055    {
00056       double* f = eh_new0( double , sed_sediment_env_n_types() );
00057 
00058       f[1] = 1.;
00059       cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00060 
00061       eh_free( f );
00062    }
00063 
00064    sed_column_set_sea_level  ( c , 10   );
00065    sed_column_set_base_height( c , -40000 );
00066 
00067    sed_column_add_cell( c , cell );
00068 
00069    {
00070       double mass_out;
00071       double mass_in = sed_column_sediment_mass(c);
00072 
00073       compact( c );
00074 
00075       mass_out = sed_column_sediment_mass(c);
00076 
00077       fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00078    }
00079 
00080    {
00081       Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00082       double e_min  = sed_cell_void_ratio_min( cell_0 );
00083       double e      = sed_cell_void_ratio    ( cell_0 );
00084 
00085       fail_unless( eh_compare_dbl( e_min , e , 1e-6 )           , "Cell did not reach maximum compaction" );
00086    }
00087 
00088    sed_cell_destroy  ( cell );
00089    sed_column_destroy( c    );
00090 }
00091 END_TEST
00092 
00093 START_TEST ( test_compact_2 )
00094 {
00095    Sed_column c = sed_column_new( 5 );
00096    Sed_cell cell;
00097 
00098    {
00099       double* f = eh_new0( double , sed_sediment_env_n_types() );
00100 
00101       f[2] = 1.;
00102       cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00103 
00104       eh_free( f );
00105    }
00106 
00107    sed_column_set_sea_level  ( c , 10   );
00108    sed_column_set_base_height( c , -40000 );
00109 
00110    sed_column_add_cell( c , cell );
00111 
00112    {
00113       double mass_out;
00114       double mass_in = sed_column_sediment_mass(c);
00115 
00116       compact( c );
00117 
00118       mass_out = sed_column_sediment_mass(c);
00119 
00120       fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00121    }
00122 
00123    {
00124       Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00125       double e_min  = sed_cell_void_ratio_min( cell_0 );
00126       double e      = sed_cell_void_ratio    ( cell_0 );
00127 
00128       fail_unless( eh_compare_dbl( e_min , e , 1e-6 )           , "Cell did not reach maximum compaction" );
00129    }
00130 
00131    sed_cell_destroy  ( cell );
00132    sed_column_destroy( c    );
00133 }
00134 END_TEST
00135 
00136 START_TEST ( test_compact_3 )
00137 {
00138    Sed_column c = sed_column_new( 5 );
00139    Sed_cell cell;
00140 
00141    {
00142       double* f = eh_new0( double , sed_sediment_env_n_types() );
00143 
00144       f[3] = 1.;
00145       cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00146 
00147       eh_free( f );
00148    }
00149 
00150    sed_column_set_sea_level  ( c , 10   );
00151    sed_column_set_base_height( c , -40000 );
00152 
00153    sed_column_add_cell( c , cell );
00154 
00155    {
00156       double mass_out;
00157       double mass_in = sed_column_sediment_mass(c);
00158 
00159       compact( c );
00160 
00161       mass_out = sed_column_sediment_mass(c);
00162 
00163       fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00164    }
00165 
00166    {
00167       Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00168       double e_min  = sed_cell_void_ratio_min( cell_0 );
00169       double e      = sed_cell_void_ratio    ( cell_0 );
00170 
00171       fail_unless( eh_compare_dbl( e_min , e , 1e-6 )           , "Cell did not reach maximum compaction" );
00172    }
00173 
00174    sed_cell_destroy  ( cell );
00175    sed_column_destroy( c    );
00176 }
00177 END_TEST
00178 
00179 START_TEST ( test_compact_4 )
00180 {
00181    Sed_column c = sed_column_new( 5 );
00182    Sed_cell cell;
00183 
00184    {
00185       double* f = eh_new0( double , sed_sediment_env_n_types() );
00186 
00187       f[4] = 1.;
00188       cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00189 
00190       eh_free( f );
00191    }
00192 
00193    sed_column_set_sea_level  ( c , 10   );
00194    sed_column_set_base_height( c , -40000 );
00195 
00196    sed_column_add_cell( c , cell );
00197 
00198    {
00199       double mass_out;
00200       double mass_in = sed_column_sediment_mass(c);
00201 
00202       compact( c );
00203 
00204       mass_out = sed_column_sediment_mass(c);
00205 
00206       fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00207    }
00208 
00209    {
00210       Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00211       double e_min  = sed_cell_void_ratio_min( cell_0 );
00212       double e      = sed_cell_void_ratio    ( cell_0 );
00213 
00214       fail_unless( eh_compare_dbl( e_min , e , 1e-6 )           , "Cell did not reach maximum compaction" );
00215    }
00216 
00217    sed_cell_destroy  ( cell );
00218    sed_column_destroy( c    );
00219 }
00220 END_TEST
00221 
00222 START_TEST ( test_compact_mixed )
00223 {
00224    Sed_column c = sed_column_new( 5 );
00225    Sed_cell cell;
00226 
00227    {
00228       double* f = eh_new0( double , sed_sediment_env_n_types() );
00229       gssize n;
00230 
00231       for ( n=0 ; n<sed_sediment_env_n_types() ; n++ )
00232          f[n] = 1./(double)sed_sediment_env_n_types();
00233       cell = sed_cell_new_sized( sed_sediment_env_n_types() , 30000 , f );
00234 
00235       eh_free( f );
00236    }
00237 
00238    sed_column_set_sea_level  ( c , 10   );
00239    sed_column_set_base_height( c , -40000 );
00240 
00241    sed_column_add_cell( c , cell );
00242 
00243    {
00244       double mass_out;
00245       double mass_in = sed_column_sediment_mass(c);
00246 
00247       compact( c );
00248 
00249       mass_out = sed_column_sediment_mass(c);
00250 
00251       fail_unless( eh_compare_dbl( mass_in , mass_out , 1e-12 ) , "Mass balance error in compaction" );
00252    }
00253 
00254    {
00255       Sed_cell cell_0 = sed_column_nth_cell( c , 0 );
00256       double e_min  = sed_cell_void_ratio_min( cell_0 );
00257       double e      = sed_cell_void_ratio    ( cell_0 );
00258 
00259       fail_unless( eh_compare_dbl( e_min , e , 1e-5 )           , "Cell did not reach maximum compaction" );
00260    }
00261 
00262    sed_cell_destroy  ( cell );
00263    sed_column_destroy( c    );
00264 }
00265 END_TEST
00266 
00267 Suite *sed_compact_suite( void )
00268 {
00269    Suite *s = suite_create( "Compact" );
00270    TCase *test_case_core = tcase_create( "Core" );
00271 
00272    suite_add_tcase( s , test_case_core );
00273 
00274    tcase_add_test( test_case_core , test_compact_0  );
00275    tcase_add_test( test_case_core , test_compact_1  );
00276    tcase_add_test( test_case_core , test_compact_2  );
00277    tcase_add_test( test_case_core , test_compact_3  );
00278    tcase_add_test( test_case_core , test_compact_4  );
00279    tcase_add_test( test_case_core , test_compact_mixed  );
00280 
00281    return s;
00282 }
00283 
00284 int main( void )
00285 {
00286    int n;
00287    Sed_sediment sed   = NULL;
00288    GError*      error = NULL;
00289 
00290    eh_init_glib();
00291 
00292    sed = sed_sediment_scan( SED_SEDIMENT_TEST_FILE , &error );
00293    if ( !sed )
00294       eh_error( "%s: Unable to read sediment file: %s" , SED_SEDIMENT_TEST_FILE , error->message);
00295    else
00296       sed_sediment_set_env( sed );
00297 
00298 
00299    {
00300       Suite *s = sed_compact_suite();
00301       SRunner *sr = srunner_create( s );
00302 
00303       srunner_run_all( sr , CK_NORMAL );
00304       n = srunner_ntests_failed( sr );
00305       srunner_free( sr );
00306    }
00307 
00308    sed_sediment_unset_env();
00309 
00310    return n;
00311 }
00312 
00313 

Generated on Fri Jan 4 18:04:13 2008 for sedflux by  doxygen 1.5.2