28 #include <cppunit/TextTestRunner.h>
29 #include <cppunit/extensions/TestFactoryRegistry.h>
30 #include <cppunit/extensions/HelperMacros.h>
41 #include "test/TestTypeFactory.h"
46 #define THREE_ARRAY_1_DDS "three_array_1.dds"
47 #define THREE_ARRAY_1_DAS "three_array_1.das"
59 static vector<string> &split(
const string &s,
char delim, vector<string> &elems) {
62 while (getline(ss, item, delim)) {
63 elems.push_back(item);
71 static vector<string> split(
const string &s,
char delim =
' ') {
73 return split(s, delim, elems);
76 class s2gTest:
public TestFixture
81 ConstraintEvaluator ce;
97 dds->transfer_attributes(&das);
99 DBG(dds->print_xml(stderr,
false,
"noBlob"));
102 Array & t = dynamic_cast < Array & >(*dds->var(
"t"));
103 Array & lon = dynamic_cast < Array & >(*dds->var(
"lon"));
104 Array & lat = dynamic_cast < Array & >(*dds->var(
"lat"));
106 dods_float64 t_vals[10][10];
107 for (
int i = 0; i < 10; ++i)
108 for (
int j = 0; j < 10; ++j)
109 t_vals[i][j] = j + (i * 10);
110 t.set_value(&t_vals[0][0], 100);
114 fstream input(
"AIRS_AQUA_L1B_BRIGHTNESS_20101026_1617.nc.gz.ascii.txt", fstream::in);
115 if (input.eof() || input.fail())
116 throw Error(
"Could not open lat/lon data in SetUp.");
119 getline(input, line);
120 if (input.eof() || input.fail())
121 throw Error(
"Could not read lat/lon data in SetUp.");
123 dods_float64 lon_vals[10][10];
124 for (
int i = 0; i < 10; ++i) {
125 getline(input, line);
126 if (input.eof() || input.fail())
127 throw Error(
"Could not read lon data from row " + long_to_string(i) +
" in SetUp.");
128 vector<string> vals = split(line,
',');
129 for (
unsigned int j = 1; j < vals.size(); ++j) {
130 DBG2(cerr <<
"loading in lon value: " << vals[j] <<
"' " << atof(vals[j].c_str()) << endl;)
131 lon_vals[i][j-1] = atof(vals[j].c_str());
134 lon.set_value(&lon_vals[0][0], 100);
135 lon.set_read_p(
true);
137 dods_float64 lat_vals[10][10];
138 for (
int i = 0; i < 10; ++i) {
139 getline(input, line);
140 if (input.eof() || input.fail())
141 throw Error(
"Could not read lat data from row " + long_to_string(i) +
" in SetUp.");
142 vector<string> vals = split(line,
',');
143 for (
unsigned int j = 1; j < vals.size(); ++j) {
144 DBG2(cerr <<
"loading in lat value: " << vals[j] <<
"' " << atof(vals[j].c_str()) << endl;)
145 lat_vals[i][j-1] = atof(vals[j].c_str());
148 lat.set_value(&lat_vals[0][0], 100);
149 lat.set_read_p(
true);
153 cerr <<
"SetUp (Error): " << e.get_error_message() << endl;
156 catch(std::exception &e) {
157 cerr <<
"SetUp (std::exception): " << e.what() << endl;
167 CPPUNIT_TEST_SUITE( s2gTest );
169 CPPUNIT_TEST(no_arguments_test);
170 CPPUNIT_TEST(array_return_test);
171 CPPUNIT_TEST(grid_return_test);
173 CPPUNIT_TEST_SUITE_END();
175 void no_arguments_test()
180 CPPUNIT_ASSERT(
true);
183 DBG(cerr << e.get_error_message() << endl);
184 CPPUNIT_ASSERT(!
"no_arguments_test() should not have failed");
188 void array_return_test()
192 argv[0] = dds->var(
"t");
193 argv[1] = dds->var(
"lon");
194 argv[2] = dds->var(
"lat");
199 DBG(cerr <<
"btp->name(): " << btp->name() << endl);
200 CPPUNIT_ASSERT(btp->name() ==
"t");
201 CPPUNIT_ASSERT(btp->type() == dods_array_c);
204 dods_float64 values[10][16];
205 Array *a =
static_cast<Array*
>(btp);
206 a->value(&values[0][0]);
209 DBG(cerr << e.get_error_message() << endl);
210 CPPUNIT_FAIL(
"array_return_test");
215 void one_argument_not_a_grid_test()
219 argv[0] = dds->var(
"lat");
220 CPPUNIT_ASSERT(argv[0] &&
"dds->var should find this, although it is not a grid");
223 CPPUNIT_ASSERT(!
"one_argument_not_a_grid_test() should have failed");
226 DBG(cerr << e.get_error_message() << endl);
227 CPPUNIT_ASSERT(
true);
231 void map_not_in_grid_test()
235 argv[0] = dds->var(
"a");
236 CPPUNIT_ASSERT(argv[0] &&
"dds->var should find this");
237 argv[1] =
new Str(
"");
238 string expression =
"3<second<=7";
239 dynamic_cast<Str*
>(argv[1])->val2buf(&expression);
240 dynamic_cast<Str*
>(argv[1])->set_read_p(
true);
243 CPPUNIT_ASSERT(!
"map_not_in_grid_test() should have failed");
246 DBG(cerr << e.get_error_message() << endl);
247 CPPUNIT_ASSERT(
true);
251 void one_dim_grid_test()
255 argv[0] = dds->var(
"a");
256 CPPUNIT_ASSERT(argv[0] &&
"dds->var should find this");
257 argv[1] =
new Str(
"");
258 string expression =
"3<first<=7";
259 dynamic_cast<Str*
>(argv[1])->val2buf(&expression);
260 dynamic_cast<Str*
>(argv[1])->set_read_p(
true);
264 Grid &g =
dynamic_cast<Grid&
>(*btp);
267 Array &m =
dynamic_cast<Array&
>(**g.map_begin());
268 CPPUNIT_ASSERT(m.dimension_start(m.dim_begin(),
true) == 4);
269 CPPUNIT_ASSERT(m.dimension_stop(m.dim_begin(),
true) == 7);
272 DBG(cerr << e.get_error_message() << endl);
273 CPPUNIT_ASSERT(!
"one_dim_grid_test() should have worked");
277 void one_dim_grid_two_expressions_test()
281 argv[0] = dds->var(
"a");
282 CPPUNIT_ASSERT(argv[0] &&
"dds->var should find this");
284 argv[1] =
new Str(
"");
285 string expression =
"first>3";
286 dynamic_cast<Str*
>(argv[1])->val2buf(&expression);
287 dynamic_cast<Str*
>(argv[1])->set_read_p(
true);
289 argv[2] =
new Str(
"");
290 expression =
"first<=7";
291 dynamic_cast<Str*
>(argv[2])->val2buf(&expression);
292 dynamic_cast<Str*
>(argv[2])->set_read_p(
true);
297 Grid &g =
dynamic_cast<Grid&
>(*btp);
301 Array &m =
dynamic_cast<Array&
>(**g.map_begin());
302 CPPUNIT_ASSERT(m.dimension_start(m.dim_begin(),
true) == 4);
303 CPPUNIT_ASSERT(m.dimension_stop(m.dim_begin(),
true) == 7);
306 DBG(cerr << e.get_error_message() << endl);
307 CPPUNIT_ASSERT(!
"one_dim_grid_two_expressions_test() should have worked");
311 void one_dim_grid_descending_test()
315 argv[0] = dds->var(
"b");
316 CPPUNIT_ASSERT(argv[0] &&
"dds->var should find this");
317 argv[1] =
new Str(
"");
318 string expression =
"3<first<=7";
319 dynamic_cast<Str*
>(argv[1])->val2buf(&expression);
320 dynamic_cast<Str*
>(argv[1])->set_read_p(
true);
324 Grid &g =
dynamic_cast<Grid&
>(*btp);
329 Array &m =
dynamic_cast<Array&
>(**g.map_begin());
330 CPPUNIT_ASSERT(m.dimension_start(m.dim_begin(),
true) == 2);
331 CPPUNIT_ASSERT(m.dimension_stop(m.dim_begin(),
true) == 5);
334 DBG(cerr << e.get_error_message() << endl);
335 CPPUNIT_ASSERT(!
"one_dim_grid_test() should have worked");
339 void one_dim_grid_two_expressions_descending_test()
343 argv[0] = dds->var(
"b");
344 CPPUNIT_ASSERT(argv[0] &&
"dds->var should find this");
346 argv[1] =
new Str(
"");
347 string expression =
"first>3";
348 dynamic_cast<Str*
>(argv[1])->val2buf(&expression);
349 dynamic_cast<Str*
>(argv[1])->set_read_p(
true);
351 argv[2] =
new Str(
"");
352 expression =
"first<=7";
353 dynamic_cast<Str*
>(argv[2])->val2buf(&expression);
354 dynamic_cast<Str*
>(argv[2])->set_read_p(
true);
358 Grid &g =
dynamic_cast<Grid&
>(*btp);
363 Array &m =
dynamic_cast<Array&
>(**g.map_begin());
364 CPPUNIT_ASSERT(m.dimension_start(m.dim_begin(),
true) == 2);
365 CPPUNIT_ASSERT(m.dimension_stop(m.dim_begin(),
true) == 5);
368 DBG(cerr << e.get_error_message() << endl);
369 CPPUNIT_ASSERT(!
"one_dim_grid_two_expressions_test() should have worked");
373 void one_dim_grid_noninclusive_values_test()
377 argv[0] = dds->var(
"a");
378 CPPUNIT_ASSERT(argv[0] &&
"dds->var should find this");
379 argv[1] =
new Str(
"");
380 string expression =
"7<first<=3";
381 dynamic_cast<Str*
>(argv[1])->val2buf(&expression);
382 dynamic_cast<Str*
>(argv[1])->set_read_p(
true);
390 CPPUNIT_ASSERT(!
"one_dim_grid_noninclusive_values_test() should not have worked");
393 DBG(cerr << e.get_error_message() << endl);
394 CPPUNIT_ASSERT(
true);
399 void values_outside_map_range_test()
403 argv[0] = dds->var(
"a");
404 CPPUNIT_ASSERT(argv[0] &&
"dds->var should find this");
405 argv[1] =
new Str(
"");
406 string expression =
"3<=first<20";
407 dynamic_cast<Str*
>(argv[1])->val2buf(&expression);
408 dynamic_cast<Str*
>(argv[1])->set_read_p(
true);
416 CPPUNIT_ASSERT(!
"values_outside_map_range_test() should not have worked");
419 DBG(cerr << e.get_error_message() << endl);
420 CPPUNIT_ASSERT(
true);
425 void linear_scale_args_test() {
428 function_linear_scale(0, 0, *dds, &btp);
429 CPPUNIT_ASSERT(
true);
432 DBG(cerr << e.get_error_message() << endl);
433 CPPUNIT_ASSERT(!
"linear_scale_args_test: should not throw Error");
437 void linear_scale_array_test() {
439 Array *a =
dynamic_cast<Grid&
>(*dds->var(
"a")).get_array();
443 argv[1] =
new Float64(
"");
444 dynamic_cast<Float64*
>(argv[1])->set_value(0.1);
445 argv[2] =
new Float64(
"");
446 dynamic_cast<Float64*
>(argv[2])->set_value(10);
447 BaseType *scaled = 0;
448 function_linear_scale(3, argv, *dds, &scaled);
449 CPPUNIT_ASSERT(scaled->type() == dods_array_c
450 && scaled->var()->type() == dods_float64_c);
451 double *values = extract_double_array(dynamic_cast<Array*>(scaled));
452 CPPUNIT_ASSERT(values[0] == 10);
453 CPPUNIT_ASSERT(values[1] == 10.1);
454 CPPUNIT_ASSERT(values[9] == 10.9);
457 DBG(cerr << e.get_error_message() << endl);
458 CPPUNIT_ASSERT(!
"Error in linear_scale_grid_test()");
462 void linear_scale_grid_test() {
464 Grid *g =
dynamic_cast<Grid*
>(dds->var(
"a"));
468 argv[1] =
new Float64(
"");
469 dynamic_cast<Float64*
>(argv[1])->set_value(0.1);
470 argv[2] =
new Float64(
"");
471 dynamic_cast<Float64*
>(argv[2])->set_value(10);
472 BaseType *scaled = 0;
473 function_linear_scale(3, argv, *dds, &scaled);
474 CPPUNIT_ASSERT(scaled->type() == dods_grid_c);
475 Grid *g_s =
dynamic_cast<Grid*
>(scaled);
476 CPPUNIT_ASSERT(g_s->get_array()->var()->type() == dods_float64_c);
477 double *values = extract_double_array(g_s->get_array());
478 CPPUNIT_ASSERT(values[0] == 10);
479 CPPUNIT_ASSERT(values[1] == 10.1);
480 CPPUNIT_ASSERT(values[9] == 10.9);
483 DBG(cerr << e.get_error_message() << endl);
484 CPPUNIT_ASSERT(!
"Error in linear_scale_grid_test()");
488 void linear_scale_grid_attributes_test() {
490 Grid *g =
dynamic_cast<Grid*
>(dds->var(
"a"));
494 BaseType *scaled = 0;
495 function_linear_scale(1, argv, *dds, &scaled);
496 CPPUNIT_ASSERT(scaled->type() == dods_grid_c);
497 Grid *g_s =
dynamic_cast<Grid*
>(scaled);
498 CPPUNIT_ASSERT(g_s->get_array()->var()->type() == dods_float64_c);
499 double *values = extract_double_array(g_s->get_array());
500 CPPUNIT_ASSERT(values[0] == 10);
501 CPPUNIT_ASSERT(values[1] == 10.1);
502 CPPUNIT_ASSERT(values[9] == 10.9);
505 DBG(cerr << e.get_error_message() << endl);
506 CPPUNIT_ASSERT(!
"Error in linear_scale_grid_test()");
511 void linear_scale_grid_attributes_test2() {
513 Grid *g =
dynamic_cast<Grid*
>(dds->var(
"b"));
518 function_linear_scale(1, argv, *dds, &btp);
519 CPPUNIT_FAIL(
"Should not get here; no params passed and no attributes set for grid 'b'");
522 DBG(cerr << e.get_error_message() << endl);
523 CPPUNIT_ASSERT(
"Caught exception");
527 void linear_scale_scalar_test() {
529 Int32 *i =
new Int32(
"linear_scale_test_int32");
534 argv[1] =
new Float64(
"");
535 dynamic_cast<Float64*
>(argv[1])->set_value(0.1);
536 argv[2] =
new Float64(
"");
537 dynamic_cast<Float64*
>(argv[2])->set_value(10);
538 BaseType *scaled = 0;
539 function_linear_scale(3, argv, *dds, &scaled);
540 CPPUNIT_ASSERT(scaled->type() == dods_float64_c);
542 CPPUNIT_ASSERT(dynamic_cast<Float64*>(scaled)->value() == 10.1);
545 DBG(cerr << e.get_error_message() << endl);
546 CPPUNIT_ASSERT(!
"Error in linear_scale_scalar_test()");
551 void function_dap_1_test() {
553 Int32 *i =
new Int32(
"function_dap_1_test_int32");
559 ConstraintEvaluator unused;
560 function_dap(1, argv, *dds, unused);
562 CPPUNIT_ASSERT(dds->get_dap_major() == 2);
563 CPPUNIT_ASSERT(dds->get_dap_minor() == 0);
566 DBG(cerr << e.get_error_message() << endl);
567 CPPUNIT_FAIL(
"Error in function_dap_1_test(): " + e.get_error_message());
571 void function_dap_2_test() {
573 Float64 *d =
new Float64(
"function_dap_1_test_float64");
579 ConstraintEvaluator unused;
580 function_dap(1, argv, *dds, unused);
582 CPPUNIT_ASSERT(dds->get_dap_major() == 3);
583 CPPUNIT_ASSERT(dds->get_dap_minor() == 2);
586 DBG(cerr << e.get_error_message() << endl);
587 CPPUNIT_FAIL(
"Error in function_dap_2_test(): " + e.get_error_message());
591 void function_dap_3_test() {
593 cerr <<
"In function_dap_3_test" << endl;
594 ConstraintEvaluator unused;
595 function_dap(0, 0, *dds, unused);
597 CPPUNIT_FAIL(
"Should have thrown an exception on no args");
600 DBG(cerr << e.get_error_message() << endl);
601 CPPUNIT_ASSERT(
"Pass: Caught exception");
605 void grid_return_test()
609 argv[0] = dds->var(
"t");
610 argv[1] = dds->var(
"lon");
611 argv[2] = dds->var(
"lat");
613 cerr <<
"Input values:" << endl;
614 dods_float64 t_vals[10][10];
615 Array *a =
static_cast<Array*
>(argv[0]);
616 a->value(&t_vals[0][0]);
617 for (
int i = 0; i < 10; ++i) {
618 for (
int j = 0; j < 10; ++j) {
619 cerr <<
"t[" << i <<
"][" << j <<
"]: " << t_vals[i][j] << endl;
626 DBG(cerr <<
"btp->name(): " << btp->name() << endl);
627 CPPUNIT_ASSERT(btp->name() ==
"t");
628 CPPUNIT_ASSERT(btp->type() == dods_grid_c);
631 dods_float64 values[10][16];
632 Grid *g =
static_cast<Grid*
>(btp);
633 g->get_array()->value(&values[0][0]);
635 Grid::Map_iter m = g->map_begin();
636 dods_float64 lat[10];
637 static_cast<Array*
>(*m)->value(&lat[0]);
640 dods_float64 lon[16];
641 static_cast<Array*
>(*m)->value(&lon[0]);
643 cerr <<
"Output values:" << endl;
644 for (
int i = 0; i < 10; ++i) {
645 for (
int j = 0; j < 16; ++j) {
646 cerr <<
"t[" << i <<
"][" << j <<
"] == lon: " << lon[j] <<
", lat: " << lat[i] <<
" val: " << values[i][j] << endl;
651 DBG(cerr << e.get_error_message() << endl);
652 CPPUNIT_FAIL(
"array_return_test");
662 CppUnit::TextTestRunner runner;
663 runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
665 bool wasSuccessful = runner.run(
"",
false ) ;
667 return wasSuccessful ? 0 : 1;
#define THREE_ARRAY_1_DDS
CPPUNIT_TEST_SUITE_REGISTRATION(s2gTest)
static class NCMLUtil overview
void function_swath2array(int argc, BaseType *argv[], DDS &, BaseType **btpp)
void function_grid(int argc, BaseType *argv[], DDS &, BaseType **btpp)
The grid function uses a set of relational expressions to form a selection within a Grid variable bas...
void function_swath2grid(int argc, BaseType *argv[], DDS &, BaseType **btpp)
int test_variable_sleep_interval
#define THREE_ARRAY_1_DAS