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