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