[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