OPeNDAP Hyrax Back End Server (BES)  Updated for version 3.8.3
s2gTest.cc
Go to the documentation of this file.
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2012 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // Tests for the AISResources class.
27 
28 #include <cppunit/TextTestRunner.h>
29 #include <cppunit/extensions/TestFactoryRegistry.h>
30 #include <cppunit/extensions/HelperMacros.h>
31 
32 #define DODS_DEBUG
33 //#define DODS_DEBUG2
34 
35 #include "BaseType.h"
36 #include "Array.h"
37 #include "Grid.h"
38 
39 #include "reproj_functions.h"
40 
41 #include "test/TestTypeFactory.h"
42 
43 #include "util.h"
44 #include "debug.h"
45 
46 #define THREE_ARRAY_1_DDS "three_array_1.dds"
47 #define THREE_ARRAY_1_DAS "three_array_1.das"
48 
49 using namespace CppUnit;
50 using namespace libdap;
51 using namespace std;
52 
54 
59 static vector<string> &split(const string &s, char delim, vector<string> &elems) {
60  stringstream ss(s);
61  string item;
62  while (getline(ss, item, delim)) {
63  elems.push_back(item);
64  }
65  return elems;
66 }
67 
71 static vector<string> split(const string &s, char delim = ' ') {
72  vector<string> elems;
73  return split(s, delim, elems);
74 }
75 
76 class s2gTest:public TestFixture
77 {
78 private:
79  DDS * dds;
80  TestTypeFactory btf;
81  ConstraintEvaluator ce;
82 public:
83  s2gTest():dds(0)
84  {}
85  ~s2gTest()
86  {}
87 
88  void setUp()
89  {
90  try {
91  dds = new DDS(&btf);
92  string dds_file = /*(string)TEST_SRC_DIR + "/" +*/ THREE_ARRAY_1_DDS ;
93  dds->parse(dds_file);
94  DAS das;
95  string das_file = /*(string)TEST_SRC_DIR + "/" +*/ THREE_ARRAY_1_DAS ;
96  das.parse(das_file);
97  dds->transfer_attributes(&das);
98 
99  DBG(dds->print_xml(stderr, false, "noBlob"));
100 
101  // Load values into the array variables
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"));
105 
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);
111  t.set_read_p(true);
112 
113  // Read real lat/lon values from a Level 1B file ascii dump
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.");
117  // Read a line of text to get to the start of the data.
118  string line;
119  getline(input, line);
120  if (input.eof() || input.fail())
121  throw Error("Could not read lat/lon data in SetUp.");
122 
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());
132  }
133  }
134  lon.set_value(&lon_vals[0][0], 100);
135  lon.set_read_p(true);
136 
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());
146  }
147  }
148  lat.set_value(&lat_vals[0][0], 100);
149  lat.set_read_p(true);
150  }
151 
152  catch (Error & e) {
153  cerr << "SetUp (Error): " << e.get_error_message() << endl;
154  throw;
155  }
156  catch(std::exception &e) {
157  cerr << "SetUp (std::exception): " << e.what() << endl;
158  throw;
159  }
160  }
161 
162  void tearDown()
163  {
164  delete dds; dds = 0;
165  }
166 
167  CPPUNIT_TEST_SUITE( s2gTest );
168 
169  CPPUNIT_TEST(no_arguments_test);
170  CPPUNIT_TEST(array_return_test);
171  CPPUNIT_TEST(grid_return_test);
172 
173  CPPUNIT_TEST_SUITE_END();
174 
175  void no_arguments_test()
176  {
177  try {
178  BaseType *btp = 0;
179  function_swath2array(0, 0, *dds, &btp);
180  CPPUNIT_ASSERT(true);
181  }
182  catch (Error &e) {
183  DBG(cerr << e.get_error_message() << endl);
184  CPPUNIT_ASSERT(!"no_arguments_test() should not have failed");
185  }
186  }
187 
188  void array_return_test()
189  {
190  try {
191  BaseType *argv[3];
192  argv[0] = dds->var("t");
193  argv[1] = dds->var("lon");
194  argv[2] = dds->var("lat");
195 
196  BaseType *btp = 0;
197  function_swath2array(3, argv, *dds, &btp);
198 
199  DBG(cerr << "btp->name(): " << btp->name() << endl);
200  CPPUNIT_ASSERT(btp->name() == "t");
201  CPPUNIT_ASSERT(btp->type() == dods_array_c);
202 
203  // Extract data; I know it's 10x16 from debugging output
204  dods_float64 values[10][16];
205  Array *a = static_cast<Array*>(btp);
206  a->value(&values[0][0]);
207  }
208  catch (Error &e) {
209  DBG(cerr << e.get_error_message() << endl);
210  CPPUNIT_FAIL("array_return_test");
211  }
212  }
213 
214 #if 0
215  void one_argument_not_a_grid_test()
216  {
217  try {
218  BaseType *argv[1];
219  argv[0] = dds->var("lat");
220  CPPUNIT_ASSERT(argv[0] && "dds->var should find this, although it is not a grid");
221  BaseType *btp = 0;
222  function_grid(1, argv, *dds, &btp);
223  CPPUNIT_ASSERT(!"one_argument_not_a_grid_test() should have failed");
224  }
225  catch (Error &e) {
226  DBG(cerr << e.get_error_message() << endl);
227  CPPUNIT_ASSERT(true);
228  }
229  }
230 
231  void map_not_in_grid_test()
232  {
233  try {
234  BaseType *argv[2];
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);
241  BaseType *btp = 0;
242  function_grid(2, argv, *dds, &btp);
243  CPPUNIT_ASSERT(!"map_not_in_grid_test() should have failed");
244  }
245  catch (Error &e) {
246  DBG(cerr << e.get_error_message() << endl);
247  CPPUNIT_ASSERT(true);
248  }
249  }
250 
251  void one_dim_grid_test()
252  {
253  try {
254  BaseType *argv[2];
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);
261 
262  BaseType *btp = 0;
263  function_grid(2, argv, *dds, &btp);
264  Grid &g = dynamic_cast<Grid&>(*btp);
265 
266  //Grid &g = dynamic_cast<Grid&>(*argv[0]);
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);
270  }
271  catch (Error &e) {
272  DBG(cerr << e.get_error_message() << endl);
273  CPPUNIT_ASSERT(!"one_dim_grid_test() should have worked");
274  }
275  }
276 
277  void one_dim_grid_two_expressions_test()
278  {
279  try {
280  BaseType *argv[3];
281  argv[0] = dds->var("a");
282  CPPUNIT_ASSERT(argv[0] && "dds->var should find this");
283 
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);
288 
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);
293 
294  //function_grid(3, argv, *dds);
295  BaseType *btp = 0;
296  function_grid(3, argv, *dds, &btp);
297  Grid &g = dynamic_cast<Grid&>(*btp);
298 
299  //Grid &g = dynamic_cast<Grid&>(*function_grid(3, argv, *dds));
300  //Grid &g = dynamic_cast<Grid&>(*argv[0]);
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);
304  }
305  catch (Error &e) {
306  DBG(cerr << e.get_error_message() << endl);
307  CPPUNIT_ASSERT(!"one_dim_grid_two_expressions_test() should have worked");
308  }
309  }
310 
311  void one_dim_grid_descending_test()
312  {
313  try {
314  BaseType *argv[2];
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);
321 
322  BaseType *btp = 0;
323  function_grid(2, argv, *dds, &btp);
324  Grid &g = dynamic_cast<Grid&>(*btp);
325 
326  //function_grid(2, argv, *dds);
327  //Grid &g = dynamic_cast<Grid&>(*function_grid(2, argv, *dds));
328  //Grid &g = dynamic_cast<Grid&>(*argv[0]);
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);
332  }
333  catch (Error &e) {
334  DBG(cerr << e.get_error_message() << endl);
335  CPPUNIT_ASSERT(!"one_dim_grid_test() should have worked");
336  }
337  }
338 
339  void one_dim_grid_two_expressions_descending_test()
340  {
341  try {
342  BaseType *argv[3];
343  argv[0] = dds->var("b");
344  CPPUNIT_ASSERT(argv[0] && "dds->var should find this");
345 
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);
350 
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);
355 
356  BaseType *btp = 0;
357  function_grid(3, argv, *dds, &btp);
358  Grid &g = dynamic_cast<Grid&>(*btp);
359 
360  //function_grid(3, argv, *dds);
361  //Grid &g = dynamic_cast<Grid&>(*function_grid(3, argv, *dds));
362  //Grid &g = dynamic_cast<Grid&>(*argv[0]);
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);
366  }
367  catch (Error &e) {
368  DBG(cerr << e.get_error_message() << endl);
369  CPPUNIT_ASSERT(!"one_dim_grid_two_expressions_test() should have worked");
370  }
371  }
372 
373  void one_dim_grid_noninclusive_values_test()
374  {
375  try {
376  BaseType *argv[2];
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);
383 
384  BaseType *btp = 0;
385  function_grid(2, argv, *dds, &btp);
386  //Grid &g = dynamic_cast<Grid&>(*btp);
387 
388  // function_grid(2, argv, *dds);
389 
390  CPPUNIT_ASSERT(!"one_dim_grid_noninclusive_values_test() should not have worked");
391  }
392  catch (Error &e) {
393  DBG(cerr << e.get_error_message() << endl);
394  CPPUNIT_ASSERT(true);
395  }
396  }
397 
398  // grid() is not required to handle this case. This test is not used.
399  void values_outside_map_range_test()
400  {
401  try {
402  BaseType *argv[2];
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);
409 
410  BaseType *btp = 0;
411  function_grid(2, argv, *dds, &btp);
412  //Grid &g = dynamic_cast<Grid&>(*btp);
413 
414  // function_grid(2, argv, *dds);
415 
416  CPPUNIT_ASSERT(!"values_outside_map_range_test() should not have worked");
417  }
418  catch (Error &e) {
419  DBG(cerr << e.get_error_message() << endl);
420  CPPUNIT_ASSERT(true);
421  }
422  }
423 
424  // linear_scale tests
425  void linear_scale_args_test() {
426  try {
427  BaseType *btp = 0;
428  function_linear_scale(0, 0, *dds, &btp);
429  CPPUNIT_ASSERT(true);
430  }
431  catch (Error &e) {
432  DBG(cerr << e.get_error_message() << endl);
433  CPPUNIT_ASSERT(!"linear_scale_args_test: should not throw Error");
434  }
435  }
436 
437  void linear_scale_array_test() {
438  try {
439  Array *a = dynamic_cast<Grid&>(*dds->var("a")).get_array();
440  CPPUNIT_ASSERT(a);
441  BaseType *argv[3];
442  argv[0] = a;
443  argv[1] = new Float64("");
444  dynamic_cast<Float64*>(argv[1])->set_value(0.1);//m
445  argv[2] = new Float64("");
446  dynamic_cast<Float64*>(argv[2])->set_value(10);//b
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);
455  }
456  catch (Error &e) {
457  DBG(cerr << e.get_error_message() << endl);
458  CPPUNIT_ASSERT(!"Error in linear_scale_grid_test()");
459  }
460  }
461 
462  void linear_scale_grid_test() {
463  try {
464  Grid *g = dynamic_cast<Grid*>(dds->var("a"));
465  CPPUNIT_ASSERT(g);
466  BaseType *argv[3];
467  argv[0] = g;
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);
481  }
482  catch (Error &e) {
483  DBG(cerr << e.get_error_message() << endl);
484  CPPUNIT_ASSERT(!"Error in linear_scale_grid_test()");
485  }
486  }
487 
488  void linear_scale_grid_attributes_test() {
489  try {
490  Grid *g = dynamic_cast<Grid*>(dds->var("a"));
491  CPPUNIT_ASSERT(g);
492  BaseType *argv[1];
493  argv[0] = g;
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);
503  }
504  catch (Error &e) {
505  DBG(cerr << e.get_error_message() << endl);
506  CPPUNIT_ASSERT(!"Error in linear_scale_grid_test()");
507  }
508  }
509 
510  // This tests the case where attributes are not found
511  void linear_scale_grid_attributes_test2() {
512  try {
513  Grid *g = dynamic_cast<Grid*>(dds->var("b"));
514  CPPUNIT_ASSERT(g);
515  BaseType *argv[1];
516  argv[0] = g;
517  BaseType *btp = 0;
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'");
520  }
521  catch (Error &e) {
522  DBG(cerr << e.get_error_message() << endl);
523  CPPUNIT_ASSERT("Caught exception");
524  }
525  }
526 
527  void linear_scale_scalar_test() {
528  try {
529  Int32 *i = new Int32("linear_scale_test_int32");
530  CPPUNIT_ASSERT(i);
531  i->set_value(1);
532  BaseType *argv[3];
533  argv[0] = i;
534  argv[1] = new Float64("");
535  dynamic_cast<Float64*>(argv[1])->set_value(0.1);//m
536  argv[2] = new Float64("");
537  dynamic_cast<Float64*>(argv[2])->set_value(10);//b
538  BaseType *scaled = 0;
539  function_linear_scale(3, argv, *dds, &scaled);
540  CPPUNIT_ASSERT(scaled->type() == dods_float64_c);
541 
542  CPPUNIT_ASSERT(dynamic_cast<Float64*>(scaled)->value() == 10.1);
543  }
544  catch (Error &e) {
545  DBG(cerr << e.get_error_message() << endl);
546  CPPUNIT_ASSERT(!"Error in linear_scale_scalar_test()");
547  }
548  }
549 
550 
551  void function_dap_1_test() {
552  try {
553  Int32 *i = new Int32("function_dap_1_test_int32");
554  CPPUNIT_ASSERT(i);
555  i->set_value(2);
556  BaseType *argv[1];
557  argv[0] = i;
558 
559  ConstraintEvaluator unused;
560  function_dap(1, argv, *dds, unused);
561 
562  CPPUNIT_ASSERT(dds->get_dap_major() == 2);
563  CPPUNIT_ASSERT(dds->get_dap_minor() == 0);
564  }
565  catch (Error &e) {
566  DBG(cerr << e.get_error_message() << endl);
567  CPPUNIT_FAIL("Error in function_dap_1_test(): " + e.get_error_message());
568  }
569  }
570 
571  void function_dap_2_test() {
572  try {
573  Float64 *d = new Float64("function_dap_1_test_float64");
574  CPPUNIT_ASSERT(d);
575  d->set_value(3.2);
576  BaseType *argv[1];
577  argv[0] = d;
578 
579  ConstraintEvaluator unused;
580  function_dap(1, argv, *dds, unused);
581 
582  CPPUNIT_ASSERT(dds->get_dap_major() == 3);
583  CPPUNIT_ASSERT(dds->get_dap_minor() == 2);
584  }
585  catch (Error &e) {
586  DBG(cerr << e.get_error_message() << endl);
587  CPPUNIT_FAIL("Error in function_dap_2_test(): " + e.get_error_message());
588  }
589  }
590 
591  void function_dap_3_test() {
592  try {
593  cerr <<"In function_dap_3_test" << endl;
594  ConstraintEvaluator unused;
595  function_dap(0, 0, *dds, unused);
596 
597  CPPUNIT_FAIL("Should have thrown an exception on no args");
598  }
599  catch (Error &e) {
600  DBG(cerr << e.get_error_message() << endl);
601  CPPUNIT_ASSERT("Pass: Caught exception");
602  }
603  }
604 #endif
605  void grid_return_test()
606  {
607  try {
608  BaseType *argv[3];
609  argv[0] = dds->var("t");
610  argv[1] = dds->var("lon");
611  argv[2] = dds->var("lat");
612 
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;
620  }
621  }
622 
623  BaseType *btp = 0;
624  function_swath2grid(3, argv, *dds, &btp);
625 
626  DBG(cerr << "btp->name(): " << btp->name() << endl);
627  CPPUNIT_ASSERT(btp->name() == "t");
628  CPPUNIT_ASSERT(btp->type() == dods_grid_c);
629 
630  // Extract data; I know it's 10x16 from debugging output
631  dods_float64 values[10][16];
632  Grid *g = static_cast<Grid*>(btp);
633  g->get_array()->value(&values[0][0]);
634 
635  Grid::Map_iter m = g->map_begin();
636  dods_float64 lat[10];
637  static_cast<Array*>(*m)->value(&lat[0]);
638 
639  ++m;
640  dods_float64 lon[16];
641  static_cast<Array*>(*m)->value(&lon[0]);
642 
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;
647  }
648  }
649  }
650  catch (Error &e) {
651  DBG(cerr << e.get_error_message() << endl);
652  CPPUNIT_FAIL("array_return_test");
653  }
654  }
655 };
656 
658 
659 int
660 main( int, char** )
661 {
662  CppUnit::TextTestRunner runner;
663  runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
664 
665  bool wasSuccessful = runner.run( "", false ) ;
666 
667  return wasSuccessful ? 0 : 1;
668 }
#define THREE_ARRAY_1_DDS
Definition: s2gTest.cc:46
STL namespace.
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...
Definition: GridFunction.cc:74
int main(int, char **)
Definition: s2gTest.cc:660
void function_swath2grid(int argc, BaseType *argv[], DDS &, BaseType **btpp)
int test_variable_sleep_interval
Definition: s2gTest.cc:53
#define THREE_ARRAY_1_DAS
Definition: s2gTest.cc:47