1 /*
2 MDAL - Mesh Data Abstraction Library (MIT License)
3 Copyright (C) 2018 Peter Petrik (zilolv at gmail dot com)
4 */
5 #include "gtest/gtest.h"
6 #include <string>
7 #include <vector>
8
9 //mdal
10 #include "mdal.h"
11 #include "mdal_testutils.hpp"
12
TEST(MeshSWWTest,Cairns)13 TEST( MeshSWWTest, Cairns )
14 {
15 std::string path = test_file( "/sww/anuga-viewer/cairns.sww" );
16 EXPECT_EQ( MDAL_MeshNames( path.c_str() ), "SWW:\"" + path + "\"" );
17 MDAL_MeshH m = MDAL_LoadMesh( path.c_str() );
18 ASSERT_NE( m, nullptr );
19 MDAL_Status s = MDAL_LastStatus();
20 EXPECT_EQ( MDAL_Status::None, s );
21
22 const char *projection = MDAL_M_projection( m );
23 EXPECT_EQ( std::string( "" ), std::string( projection ) );
24
25 std::string driverName = MDAL_M_driverName( m );
26 EXPECT_EQ( driverName, "SWW" );
27
28 // ///////////
29 // Vertices
30 // ///////////
31 int v_count = MDAL_M_vertexCount( m );
32 EXPECT_EQ( v_count, 2579 );
33 double z = getVertexZCoordinatesAt( m, 0 );
34 EXPECT_DOUBLE_EQ( 3.1099998950958252, z );
35
36 std::vector<double> expectedCoords =
37 {
38 368725.71875, 8129547, 3.109999895095825,
39 368745.71875, 8129547, 3.010999917984009,
40 368765.71875, 8129547, 2.920000076293945
41 };
42 EXPECT_EQ( expectedCoords.size(), 3 * 3 );
43
44 std::vector<double> coordinates = getCoordinates( m, 3 );
45
46 EXPECT_TRUE( compareVectors( expectedCoords, coordinates ) );
47
48 // ///////////
49 // Faces
50 // ///////////
51 int f_count = MDAL_M_faceCount( m );
52 EXPECT_EQ( 4962, f_count );
53
54 // test face 1
55 int f_v_count = getFaceVerticesCountAt( m, 1 );
56 EXPECT_EQ( 3, f_v_count ); //only triangles!
57 int f_v = getFaceVerticesIndexAt( m, 10, 0 );
58 EXPECT_EQ( 2531, f_v );
59 f_v = getFaceVerticesIndexAt( m, 10, 1 );
60 EXPECT_EQ( 2532, f_v );
61 f_v = getFaceVerticesIndexAt( m, 10, 2 );
62 EXPECT_EQ( 2481, f_v );
63
64 // ///////////
65 // Bed elevation dataset
66 // ///////////
67 ASSERT_EQ( 2, MDAL_M_datasetGroupCount( m ) );
68
69 MDAL_DatasetGroupH g = MDAL_M_datasetGroup( m, 0 );
70 ASSERT_NE( g, nullptr );
71
72 int meta_count = MDAL_G_metadataCount( g );
73 ASSERT_EQ( 1, meta_count );
74
75 const char *name = MDAL_G_name( g );
76 EXPECT_EQ( std::string( "Bed Elevation" ), std::string( name ) );
77
78 bool scalar = MDAL_G_hasScalarData( g );
79 EXPECT_EQ( true, scalar );
80
81 MDAL_DataLocation dataLocation = MDAL_G_dataLocation( g );
82 EXPECT_EQ( dataLocation, MDAL_DataLocation::DataOnVertices );
83
84 ASSERT_EQ( 1, MDAL_G_datasetCount( g ) );
85 MDAL_DatasetH ds = MDAL_G_dataset( g, 0 );
86 ASSERT_NE( ds, nullptr );
87
88 bool valid = MDAL_D_isValid( ds );
89 EXPECT_EQ( true, valid );
90
91 EXPECT_FALSE( MDAL_D_hasActiveFlagCapability( ds ) );
92
93 int count = MDAL_D_valueCount( ds );
94 ASSERT_EQ( 2579, count );
95
96 double value = getValue( ds, 0 );
97 EXPECT_DOUBLE_EQ( 3.1099998950958252, value );
98 value = getValue( ds, 1 );
99 EXPECT_DOUBLE_EQ( 3.0109999179840088, value );
100 value = getValue( ds, 2 );
101 EXPECT_DOUBLE_EQ( 2.9200000762939453, value );
102 value = getValue( ds, 3 );
103 EXPECT_DOUBLE_EQ( 2.7599999904632568, value );
104
105 // ///////////
106 // "Stage"
107 // ///////////
108 g = MDAL_M_datasetGroup( m, 1 );
109 ASSERT_NE( g, nullptr );
110
111 meta_count = MDAL_G_metadataCount( g );
112 ASSERT_EQ( 1, meta_count );
113
114 name = MDAL_G_name( g );
115 EXPECT_EQ( std::string( "stage" ), std::string( name ) );
116
117 scalar = MDAL_G_hasScalarData( g );
118 EXPECT_EQ( true, scalar );
119
120 dataLocation = MDAL_G_dataLocation( g );
121 EXPECT_EQ( dataLocation, MDAL_DataLocation::DataOnVertices );
122
123 ASSERT_EQ( 51, MDAL_G_datasetCount( g ) );
124 ds = MDAL_G_dataset( g, 30 );
125 ASSERT_NE( ds, nullptr );
126
127 valid = MDAL_D_isValid( ds );
128 EXPECT_EQ( true, valid );
129
130 EXPECT_FALSE( MDAL_D_hasActiveFlagCapability( ds ) );
131
132 count = MDAL_D_valueCount( ds );
133 ASSERT_EQ( 2579, count );
134
135 value = getValue( ds, 0 );
136 EXPECT_DOUBLE_EQ( 3.9895098209381104, value );
137
138 double min, max;
139 MDAL_D_minimumMaximum( ds, &min, &max );
140 EXPECT_DOUBLE_EQ( 0.57015693187713623, min );
141 EXPECT_DOUBLE_EQ( 6.7160892486572266, max );
142
143 MDAL_G_minimumMaximum( g, &min, &max );
144 EXPECT_DOUBLE_EQ( 0, min );
145 EXPECT_DOUBLE_EQ( 6.7305092811584473, max );
146
147 EXPECT_FALSE( hasReferenceTime( g ) );
148
149 double time = MDAL_D_time( ds );
150 EXPECT_TRUE( compareDurationInHours( time, 0.083333333333 ) );
151
152 MDAL_CloseMesh( m );
153 }
154
TEST(MeshSWWTest,Flat)155 TEST( MeshSWWTest, Flat )
156 {
157 std::string path = test_file( "/sww/anuga-viewer/flat.sww" );
158 EXPECT_EQ( MDAL_MeshNames( path.c_str() ), "SWW:\"" + path + "\"" );
159 MDAL_MeshH m = MDAL_LoadMesh( path.c_str() );
160 ASSERT_NE( m, nullptr );
161 MDAL_Status s = MDAL_LastStatus();
162 EXPECT_EQ( MDAL_Status::None, s );
163
164 const char *projection = MDAL_M_projection( m );
165 EXPECT_EQ( std::string( "" ), std::string( projection ) );
166
167 std::string driverName = MDAL_M_driverName( m );
168 EXPECT_EQ( driverName, "SWW" );
169
170 int v_count = MDAL_M_vertexCount( m );
171 EXPECT_EQ( 2579, v_count );
172 int f_count = MDAL_M_faceCount( m );
173 EXPECT_EQ( 4962, f_count );
174
175 ASSERT_EQ( 2, MDAL_M_datasetGroupCount( m ) );
176
177 MDAL_CloseMesh( m );
178 }
179
180
TEST(MeshSWWTest,Catchment)181 TEST( MeshSWWTest, Catchment )
182 {
183 std::string path = test_file( "/sww/anuga-viewer/Small_catchment_testcase.sww" );
184 EXPECT_EQ( MDAL_MeshNames( path.c_str() ), "SWW:\"" + path + "\"" );
185 MDAL_MeshH m = MDAL_LoadMesh( path.c_str() );
186 ASSERT_NE( m, nullptr );
187 MDAL_Status s = MDAL_LastStatus();
188 EXPECT_EQ( MDAL_Status::None, s );
189
190 const char *projection = MDAL_M_projection( m );
191 EXPECT_EQ( std::string( "" ), std::string( projection ) );
192
193 std::string driverName = MDAL_M_driverName( m );
194 EXPECT_EQ( driverName, "SWW" );
195
196 int v_count = MDAL_M_vertexCount( m );
197 EXPECT_EQ( 19164, v_count );
198 int f_count = MDAL_M_faceCount( m );
199 EXPECT_EQ( 6388, f_count );
200
201 ASSERT_EQ( 9, MDAL_M_datasetGroupCount( m ) );
202
203 {
204 MDAL_DatasetGroupH g = MDAL_M_datasetGroup( m, 3 );
205 ASSERT_NE( g, nullptr );
206 EXPECT_EQ( std::string( "momentum" ), std::string( MDAL_G_name( g ) ) );
207 EXPECT_EQ( false, MDAL_G_hasScalarData( g ) );
208 }
209 {
210 MDAL_DatasetGroupH g = MDAL_M_datasetGroup( m, 4 );
211 ASSERT_NE( g, nullptr );
212 EXPECT_EQ( std::string( "momentum/Maximums" ), std::string( MDAL_G_name( g ) ) );
213 EXPECT_EQ( false, MDAL_G_hasScalarData( g ) );
214 }
215 {
216 MDAL_DatasetGroupH g = MDAL_M_datasetGroup( m, 5 );
217 ASSERT_NE( g, nullptr );
218 EXPECT_EQ( std::string( "elevation" ), std::string( MDAL_G_name( g ) ) );
219 EXPECT_EQ( true, MDAL_G_hasScalarData( g ) );
220 }
221 MDAL_CloseMesh( m );
222 }
223
TEST(MeshSWWTest,Laminar)224 TEST( MeshSWWTest, Laminar )
225 {
226 std::string path = test_file( "/sww/anuga-viewer/laminar.sww" );
227 EXPECT_EQ( MDAL_MeshNames( path.c_str() ), "SWW:\"" + path + "\"" );
228 MDAL_MeshH m = MDAL_LoadMesh( path.c_str() );
229 ASSERT_NE( m, nullptr );
230 MDAL_Status s = MDAL_LastStatus();
231 EXPECT_EQ( MDAL_Status::None, s );
232
233 const char *projection = MDAL_M_projection( m );
234 EXPECT_EQ( std::string( "" ), std::string( projection ) );
235
236 std::string driverName = MDAL_M_driverName( m );
237 EXPECT_EQ( driverName, "SWW" );
238
239 int v_count = MDAL_M_vertexCount( m );
240 EXPECT_EQ( 3721, v_count );
241 int f_count = MDAL_M_faceCount( m );
242 EXPECT_EQ( 7200, f_count );
243
244 ASSERT_EQ( 2, MDAL_M_datasetGroupCount( m ) );
245
246 MDAL_CloseMesh( m );
247 }
248
TEST(MeshSWWTest,Wave)249 TEST( MeshSWWTest, Wave )
250 {
251 std::string path = test_file( "/sww/anuga-viewer/holl_bch_wave_mesh_elevation_smooth_ys10.0_ft500.0_size4802.sww" );
252 EXPECT_EQ( MDAL_MeshNames( path.c_str() ), "SWW:\"" + path + "\"" );
253 MDAL_MeshH m = MDAL_LoadMesh( path.c_str() );
254 ASSERT_NE( m, nullptr );
255 MDAL_Status s = MDAL_LastStatus();
256 EXPECT_EQ( MDAL_Status::None, s );
257
258 const char *projection = MDAL_M_projection( m );
259 EXPECT_EQ( std::string( "" ), std::string( projection ) );
260
261 std::string driverName = MDAL_M_driverName( m );
262 EXPECT_EQ( driverName, "SWW" );
263
264 int v_count = MDAL_M_vertexCount( m );
265 EXPECT_EQ( 2500, v_count );
266 int f_count = MDAL_M_faceCount( m );
267 EXPECT_EQ( 4802, f_count );
268
269 ASSERT_EQ( 2, MDAL_M_datasetGroupCount( m ) );
270
271 MDAL_CloseMesh( m );
272 }
273
main(int argc,char ** argv)274 int main( int argc, char **argv )
275 {
276 testing::InitGoogleTest( &argc, argv );
277 init_test();
278 int ret = RUN_ALL_TESTS();
279 finalize_test();
280 return ret;
281 }
282
283