[cig-commits] r20435 - in cs/spatialdata/trunk: libsrc/spatialdb tests/libtests/spatialdb tests/libtests/spatialdb/data

brad at geodynamics.org brad at geodynamics.org
Thu Jun 28 20:04:12 PDT 2012


Author: brad
Date: 2012-06-28 20:04:11 -0700 (Thu, 28 Jun 2012)
New Revision: 20435

Modified:
   cs/spatialdata/trunk/libsrc/spatialdb/GeoProjGridDB.cc
   cs/spatialdata/trunk/tests/libtests/spatialdb/TestGeoProjGridDB.cc
   cs/spatialdata/trunk/tests/libtests/spatialdb/data/GeoProjGridDBTestDataVolume3D.cc
Log:
More work on C++ unit tests for GeoProjGridDB. Fixed some small bugs exposed by test.

Modified: cs/spatialdata/trunk/libsrc/spatialdb/GeoProjGridDB.cc
===================================================================
--- cs/spatialdata/trunk/libsrc/spatialdb/GeoProjGridDB.cc	2012-06-29 00:56:40 UTC (rev 20434)
+++ cs/spatialdata/trunk/libsrc/spatialdb/GeoProjGridDB.cc	2012-06-29 03:04:11 UTC (rev 20435)
@@ -265,6 +265,7 @@
       assert(false);
       throw std::logic_error("Unsupported data dimension in GeoProjGridDB::query().");
     } // switch
+    break;
   case NEAREST : {
     const int indexNearestX = int(floor(indexX+0.5));
     const int indexNearestY = int(floor(indexY+0.5));
@@ -642,6 +643,7 @@
   return index;
 } // _search
 
+#include <iostream>
 // ----------------------------------------------------------------------
 // Interpolate to get values at target location defined by indices in 3-D.
 void
@@ -655,26 +657,29 @@
   const int numY = _numY;
   const int numZ = _numZ;
 
-  const int indexX0 = int(floor(indexX));
+  assert(numX >= 2);
+  const int indexX0 = std::min(numX-2, int(floor(indexX)));
   const double wtX0 = 1.0 - (indexX - indexX0);
   const int indexX1 = indexX0 + 1;
   const double wtX1 = 1.0 - wtX0;
-  assert(0 >= indexX0 && indexX0 < numX);
-  assert(0 >= indexX1 && indexX1 < numX);
+  assert(0 <= indexX0 && indexX0 < numX);
+  assert(0 <= indexX1 && indexX1 < numX);
 
-  const int indexY0 = int(floor(indexY));
+  assert(numY >= 2);
+  const int indexY0 = std::min(numY-2, int(floor(indexY)));
   const double wtY0 = 1.0 - (indexY - indexY0);
   const int indexY1 = indexY0 + 1;
   const double wtY1 = 1.0 - wtY0;
-  assert(0 >= indexY0 && indexY0 < numY);
-  assert(0 >= indexY1 && indexY1 < numY);
+  assert(0 <= indexY0 && indexY0 < numY);
+  assert(0 <= indexY1 && indexY1 < numY);
   
-  const int indexZ0 = int(floor(indexZ));
+  assert(numZ >= 2);
+  const int indexZ0 = std::min(numZ-2, int(floor(indexZ)));
   const double wtZ0 = 1.0 - (indexZ - indexZ0);
   const int indexZ1 = indexZ0 + 1;
   const double wtZ1 = 1.0 - wtZ0;
-  assert(0 >= indexZ0 && indexZ0 < numZ);
-  assert(0 >= indexZ1 && indexZ1 < numZ);
+  assert(0 <= indexZ0 && indexZ0 < numZ);
+  assert(0 <= indexZ1 && indexZ1 < numZ);
 
   const int index000 = _dataIndex(indexX0, indexY0, indexZ0);
   const int index001 = _dataIndex(indexX0, indexY0, indexZ1);
@@ -706,7 +711,20 @@
       wt101 * _data[index101+qVal] +
       wt110 * _data[index110+qVal] +
       wt111 * _data[index111+qVal];
+#if 0 // DEBUGGING
+    std::cout << "val["<<iVal<<"]: " << vals[iVal]
+	      << ", wt000: " << wt000 << ", data: " << _data[index000+qVal]
+	      << ", wt001: " << wt001 << ", data: " << _data[index001+qVal]
+	      << ", wt010: " << wt010 << ", data: " << _data[index010+qVal]
+	      << ", wt011: " << wt011 << ", data: " << _data[index011+qVal]
+	      << ", wt100: " << wt100 << ", data: " << _data[index100+qVal]
+	      << ", wt101: " << wt101 << ", data: " << _data[index101+qVal]
+	      << ", wt110: " << wt110 << ", data: " << _data[index110+qVal]
+	      << ", wt111: " << wt111 << ", data: " << _data[index111+qVal]
+	      << std::endl;
+#endif
   } // for
+
 } // _interpolate3D
 
 

Modified: cs/spatialdata/trunk/tests/libtests/spatialdb/TestGeoProjGridDB.cc
===================================================================
--- cs/spatialdata/trunk/tests/libtests/spatialdb/TestGeoProjGridDB.cc	2012-06-29 00:56:40 UTC (rev 20434)
+++ cs/spatialdata/trunk/tests/libtests/spatialdb/TestGeoProjGridDB.cc	2012-06-29 03:04:11 UTC (rev 20435)
@@ -290,15 +290,18 @@
     const int err = db.query(vals, numVals, coords, spaceDim, &csCart);
     if (0 != flagsE)
       CPPUNIT_ASSERT(err == flagsE[iQuery]);
-    else
+    else {
       CPPUNIT_ASSERT(0 == err);
-    for (int iVal=0; iVal < numVals; ++iVal)
-      if (valsE[numVals-iVal-1] > tolerance)
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[iVal]/valsE[numVals-iVal-1],
-				     tolerance);
-      else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[numVals-iVal-1], vals[iVal],
-				     tolerance);
+      for (int iVal=0; iVal < numVals; ++iVal) {
+	if (valsE[numVals-iVal-1] > tolerance) {
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[iVal]/valsE[numVals-iVal-1],
+				       tolerance);
+	} else {
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[numVals-iVal-1], vals[iVal],
+				       tolerance);
+	} // if/else
+      } // for
+    } // if/else
   } // for
   delete[] vals; vals = 0;
 } // _checkQuery

Modified: cs/spatialdata/trunk/tests/libtests/spatialdb/data/GeoProjGridDBTestDataVolume3D.cc
===================================================================
--- cs/spatialdata/trunk/tests/libtests/spatialdb/data/GeoProjGridDBTestDataVolume3D.cc	2012-06-29 00:56:40 UTC (rev 20434)
+++ cs/spatialdata/trunk/tests/libtests/spatialdb/data/GeoProjGridDBTestDataVolume3D.cc	2012-06-29 03:04:11 UTC (rev 20435)
@@ -39,60 +39,60 @@
 };
 
 const double spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_dbData[_numX*_numY*_numZ*_numVals] = {
-  1.00000000e-01,  1.10000000e+00,
-  3.00000000e-01,  3.30000000e+00,
-  2.00000000e-01,  2.20000000e+00,
-  1.00000000e-01,  1.10000000e+00,
-  4.00000000e-01,  4.60000000e+00,
-  3.00000000e-01,  3.20000000e+00,
-  7.00000000e-01,  5.20000000e+00,
-  5.00000000e-01,  4.60000000e+00,
-  0.00000000e-01,  1.20000000e+00,
-  1.00000000e-01,  3.40000000e+00,
-  2.00000000e-01,  2.10000000e+00,
-  6.00000000e-01,  1.40000000e+00,
-  9.00000000e-01,  4.70000000e+00,
-  4.00000000e-01,  3.30000000e+00,
-  7.00000000e-01,  5.50000000e+00,
-  6.00000000e-01,  4.70000000e+00,
-  5.00000000e-01,  1.60000000e+00,
-  3.00000000e-01,  3.30000000e+00,
-  8.00000000e-01,  2.80000000e+00,
-  3.00000000e-01,  1.50000000e+00,
-  7.00000000e-01,  4.80000000e+00,
-  4.00000000e-01,  3.40000000e+00,
-  3.00000000e-01,  5.70000000e+00,
-  4.00000000e-01,  4.50000000e+00,
+  1.00000000e-01,  1.10000000e+00, // 0,0,0
+  3.00000000e-01,  3.30000000e+00, // 0,0,1
+  2.00000000e-01,  2.20000000e+00, // 0,0,2
+  1.00000000e-01,  1.10000000e+00, // 0,0,3
+  4.00000000e-01,  4.60000000e+00, // 0,1,0
+  3.00000000e-01,  3.20000000e+00, // 0,1,1
+  7.00000000e-01,  5.20000000e+00, // 0,1,2
+  5.00000000e-01,  4.60000000e+00, // 0,1,3
+  0.00000000e-01,  1.20000000e+00, // 1,0,0
+  1.00000000e-01,  3.40000000e+00, // 1,0,1
+  2.00000000e-01,  2.10000000e+00, // 1,0,2
+  6.00000000e-01,  1.40000000e+00, // 1,0,3
+  9.00000000e-01,  4.70000000e+00, // 1,1,0
+  4.00000000e-01,  3.30000000e+00, // 1,1,1
+  7.00000000e-01,  5.50000000e+00, // 1,1,2
+  6.00000000e-01,  4.70000000e+00, // 1,1,3
+  5.00000000e-01,  1.60000000e+00, // 2,0,0
+  3.00000000e-01,  3.30000000e+00, // 2,0,1
+  8.00000000e-01,  2.80000000e+00, // 2,0,2
+  3.00000000e-01,  1.50000000e+00, // 2,0,3
+  7.00000000e-01,  4.80000000e+00, // 2,1,0
+  4.00000000e-01,  3.40000000e+00, // 2,1,1
+  3.00000000e-01,  5.70000000e+00, // 2,1,2
+  4.00000000e-01,  4.50000000e+00, // 2,1,3
 };
 
-const char* spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_names[] = {
+const char* spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_names[_numVals] = {
   "One",
   "Two",
 };
 
-const char* spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_units[] = {
+const char* spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_units[_numVals] = {
   "m",
   "m",
 };
 
-const double spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_queryNearest[] = {
-  4.38173419e+00,  8.36254772e+00,  8.74899281e+00,  1.00000000e-01,  1.10000000e+00,
-  2.35495601e+00,  1.00264422e+01,  9.00123360e+00,  5.00000000e-01,  4.60000000e+00,
-  3.91112675e+00,  1.07838373e+01,  9.69020768e+00,  7.00000000e-01,  5.20000000e+00,
-  3.87701461e+00,  1.04910673e+01,  9.08761157e+00,  7.00000000e-01,  5.20000000e+00,
-  3.01795532e+00,  8.84019490e+00,  8.79326896e+00,  3.00000000e-01,  3.30000000e+00,
+const double spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_queryNearest[_numQueries*(_spaceDim+_numVals)] = {
+  -3.2,  3.8,  2.0,  7.00000000e-01,  5.20000000e+00, // (0,1,2)
+   1.1,  1.3, -0.1,  1.00000000e-01,  3.40000000e+00, // (1,0,1)
+   0.0, -6.0,  5.0,  6.00000000e-01,  1.40000000e+00, // (1,0,3)
+   1.6,  3.4, -0.6,  7.00000000e-01,  4.80000000e+00, // (2,1,0)
+  -2.0,  3.5,  0.9,  7.00000000e-01,  5.20000000e+00, // (0,1,2)
 };
 
-const double spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_queryLinear[] = {
-  4.38173419e+00,  8.36254772e+00,  8.74899281e+00,  1.35000000e-01,  1.49500000e+00,
-  2.35495601e+00,  1.00264422e+01,  9.00123360e+00,  4.10000000e-01,  3.85500000e+00,
-  3.91112675e+00,  1.07838373e+01,  9.69020768e+00,  0.00000000e+00,  0.00000000e+00,
-  3.87701461e+00,  1.04910673e+01,  9.08761157e+00,  5.30000000e-01,  4.42000000e+00,
-  3.01795532e+00,  8.84019490e+00,  8.79326896e+00,  2.00000000e-01,  2.15500000e+00,
+const double spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_queryLinear[_numQueries*(_spaceDim+_numVals)] = {
+  -3.0,  4.0,  1.0,   7.00000000e-01,  5.20000000e+00, // (0,1,2)
+  -1.0,  2.5,  2.5,   3.62500000e-01,  2.52500000e+00, // (0,5, 0.25, 2.5)
+   1.25, 3.0,  0.25,  3.25000000e-01,  3.49062500e+00, // (1.25, 0.5, 1.25)
+   0.0,  4.1,  0.0,   0.0, 0.0, // not found
+   1.0,  2.0, -0.6,   0.0, 0.0, // not fount
 };
 
-const int spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_errFlags[] = {
- 0, 0, 1, 0, 0,};
+const int spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::_errFlags[_numQueries] = {
+ 0, 0, 0, 1, 1,};
 
 spatialdata::spatialdb::GeoProjGridDBTestDataVolume3D::GeoProjGridDBTestDataVolume3D(void)
 { // constructor



More information about the CIG-COMMITS mailing list