/Users/huttone/Devel/sedflux-new/sedflux/trunk/ew/sed/sed_river_unit_test.c

Go to the documentation of this file.
00001 #include "utils/utils.h"
00002 #include <check.h>
00003 
00004 #include "sed_river.h"
00005 #include "sed_hydro.h"
00006 
00007 START_TEST ( test_sed_river_new )
00008 {
00009    {
00010       Sed_riv r = sed_river_new( NULL );
00011 
00012       fail_if    ( r==NULL                            , "NULL returned instead of a new river"  );
00013       fail_unless( eh_compare_dbl(sed_river_width   (r),0,1e-12) , "Non-zero width" );
00014       fail_unless( eh_compare_dbl(sed_river_depth   (r),0,1e-12) , "Non-zero depth" );
00015       fail_unless( eh_compare_dbl(sed_river_velocity(r),0,1e-12) , "Non-zero velocity" );
00016 
00017       sed_river_destroy( r );
00018    }
00019 
00020    {
00021       Sed_riv r = sed_river_new( "Ebro" );
00022 
00023       fail_if    ( r==NULL                            , "NULL returned instead of a new river"  );
00024       fail_unless( eh_compare_dbl(sed_river_width   (r),0,1e-12) , "Non-zero width" );
00025       fail_unless( eh_compare_dbl(sed_river_depth   (r),0,1e-12) , "Non-zero depth" );
00026       fail_unless( eh_compare_dbl(sed_river_velocity(r),0,1e-12) , "Non-zero velocity" );
00027       fail_unless( sed_river_name_is(r,"Ebro")                   , "Incorrect name" );
00028 
00029       sed_river_destroy( r );
00030    }
00031 }
00032 END_TEST
00033 
00034 START_TEST ( test_sed_river_copy )
00035 {
00036    {
00037       Sed_riv dest = sed_river_new( "South Platte" );
00038       Sed_riv src  = sed_river_new( "Mississippi" );
00039       Sed_riv temp = dest;
00040 
00041       dest = sed_river_copy( dest , src );
00042 
00043       fail_unless( sed_river_name_is( dest , "Mississippi" ) , "River not copied correctly" );
00044       fail_if    ( dest == src                               , "River not copied" );
00045       fail_unless( dest == temp                              , "River not copied to correct location" );
00046 
00047       sed_river_destroy( src  );
00048       sed_river_destroy( dest );
00049    }
00050 }
00051 END_TEST
00052 
00053 START_TEST ( test_sed_river_dup )
00054 {
00055    {
00056       Sed_riv dest;
00057       Sed_riv src  = sed_river_new( "Mississippi" );
00058 
00059       dest = sed_river_copy( NULL , src );
00060 
00061       fail_unless( sed_river_name_is( dest , "Mississippi" ) , "River not duplicated correctly" );
00062       fail_if    ( dest == src                               , "River not duplicated"           );
00063 
00064       sed_river_destroy( src  );
00065       sed_river_destroy( dest );
00066    }
00067 }
00068 END_TEST
00069 
00070 START_TEST ( test_sed_river_leaves )
00071 {
00072    {
00073       Sed_riv r = sed_river_new( NULL );
00074       Sed_riv* river_mouth;
00075 
00076       sed_river_split( r );
00077       sed_river_split( sed_river_left(r) );
00078       sed_river_split( sed_river_right(sed_river_left(r)) );
00079 
00080       river_mouth = sed_river_leaves( r );
00081 
00082       fail_unless( g_strv_length( river_mouth )==4 , "Incorrect number of river mouths" );
00083    }
00084 }
00085 END_TEST
00086 
00087 START_TEST ( test_sed_river_branches )
00088 {
00089    {
00090       Sed_riv r = sed_river_new( NULL );
00091       Sed_riv* river_branch;
00092 
00093       sed_river_split( r );
00094       sed_river_split( sed_river_left(r) );
00095       sed_river_split( sed_river_right(sed_river_left(r)) );
00096 
00097       river_branch = sed_river_branches( r );
00098 
00099       fail_unless( g_strv_length( river_branch )==7 , "Incorrect number of river branches" );
00100    }
00101 }
00102 END_TEST
00103 
00104 START_TEST ( test_sed_river_n_branches )
00105 {
00106    {
00107       Sed_riv r = sed_river_new( NULL );
00108       Sed_riv* river_branch;
00109 
00110       fail_unless( sed_river_n_branches(NULL)==0 , "Size of NULL river is 0" );
00111 
00112       fail_unless( sed_river_n_branches(r)==1 , "River size is incorrect" );
00113 
00114       sed_river_split( r );
00115       fail_unless( sed_river_n_branches(r)==3 , "River size is incorrect" );
00116 
00117       sed_river_split( sed_river_left(r) );
00118       sed_river_split( sed_river_right(sed_river_left(r)) );
00119       fail_unless( sed_river_n_branches(r)==7 , "River size is incorrect" );
00120    }
00121 }
00122 END_TEST
00123 
00124 START_TEST ( test_sed_river_longest )
00125 {
00126    {
00127       Sed_riv r = sed_river_new( NULL );
00128       Sed_riv* river_branch;
00129 
00130       fail_unless( sed_river_longest_branch(NULL)==NULL , "Longest branch of NULL is NULL" );
00131 
00132       fail_unless( sed_river_longest_branch(r)==r , "Return the trunk if it doesn't branch" );
00133 
00134       sed_river_split( r );
00135       fail_unless( sed_river_longest_branch(r)==sed_river_left(r) , "Left branch in the case of a tie" );
00136 
00137       sed_river_split( sed_river_left(r) );
00138       sed_river_split( sed_river_right(sed_river_left(r)) );
00139       fail_unless( sed_river_longest_branch(r)==sed_river_right(r) , "Error finding longest branch" );
00140    }
00141 }
00142 END_TEST
00143 
00144 START_TEST ( test_sed_river_split )
00145 {
00146    {
00147       Sed_riv r    = sed_river_new( NULL );
00148       Sed_hydro* h = sed_hydro_scan( NULL , NULL );
00149 
00150       sed_river_set_hydro(r,h[0]);
00151       sed_river_split( r );
00152 
00153       fail_unless( sed_river_has_children( r ) , "Children not created in split" );
00154 
00155       {
00156          double q   = sed_river_water_flux( r );
00157          double q_l = sed_river_water_flux( sed_river_left ( r ) );
00158          double q_r = sed_river_water_flux( sed_river_right( r ) );
00159 
00160          fail_unless( eh_compare_dbl(q,q_l+q_r,1e-12) , "Water balance error" );
00161       }
00162 
00163       {
00164          double qs   = sed_river_sediment_load( r );
00165          double qs_l = sed_river_sediment_load( sed_river_left ( r ) );
00166          double qs_r = sed_river_sediment_load( sed_river_right( r ) );
00167 
00168          fail_unless( eh_compare_dbl(qs,qs_l+qs_r,1e-12) , "Sediment balance error" );
00169       }
00170    }
00171 }
00172 END_TEST
00173 
00174 START_TEST ( test_sed_river_set_angle )
00175 {
00176    Sed_riv r = sed_river_new( NULL );
00177 
00178    sed_river_set_angle_limit( r , 0. , .5*G_PI );
00179    sed_river_set_angle      ( r , .25*G_PI );
00180 
00181    fail_unless( eh_compare_dbl( sed_river_angle(r) , .25*G_PI , 1e-12 ) , "Angle incorrectly set"         );
00182 
00183    sed_river_set_angle( r , .95*G_PI );
00184 
00185    fail_unless( eh_compare_dbl( sed_river_angle(r) , .5*G_PI , 1e-12 ) , "Angle out of range" );
00186 
00187    sed_river_set_angle( r , -.75*G_PI );
00188    fail_unless( eh_compare_dbl( sed_river_angle(r) , 0.      , 1e-12 ) , "Angle out of range" );
00189 }
00190 END_TEST
00191 
00192 Suite *sed_river_suite( void )
00193 {
00194    Suite *s = suite_create( "Sed_riv" );
00195    TCase *test_case_core = tcase_create( "Core" );
00196 
00197    suite_add_tcase( s , test_case_core );
00198 
00199    tcase_add_test( test_case_core , test_sed_river_new   );
00200    tcase_add_test( test_case_core , test_sed_river_copy  );
00201    tcase_add_test( test_case_core , test_sed_river_dup   );
00202    tcase_add_test( test_case_core , test_sed_river_split );
00203    tcase_add_test( test_case_core , test_sed_river_set_angle );
00204    tcase_add_test( test_case_core , test_sed_river_leaves );
00205    tcase_add_test( test_case_core , test_sed_river_branches );
00206    tcase_add_test( test_case_core , test_sed_river_n_branches );
00207    tcase_add_test( test_case_core , test_sed_river_longest );
00208 
00209    return s;
00210 }
00211 
00212 int test_sed_river( void )
00213 {
00214    int n;
00215 
00216    {
00217       Suite *s = sed_river_suite();
00218       SRunner *sr = srunner_create( s );
00219 
00220       srunner_run_all( sr , CK_NORMAL );
00221       n = srunner_ntests_failed( sr );
00222       srunner_free( sr );
00223    }
00224 
00225    return n;
00226 }
00227 
00228 

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