[cig-commits] r8305 - cs/spatialdata-0.1/trunk/tests/libtests/spatialdb

brad at geodynamics.org brad at geodynamics.org
Mon Nov 19 17:26:37 PST 2007


Author: brad
Date: 2007-11-19 17:26:37 -0800 (Mon, 19 Nov 2007)
New Revision: 8305

Added:
   cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSCECCVMH.cc
   cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSCECCVMH.hh
Log:
Fixed bugs in querying SCEC CVM-H. Implemented C++ unit tests. Setup configure to only run query test if data dir for SCEC CVM-H is provided.

Added: cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSCECCVMH.cc
===================================================================
--- cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSCECCVMH.cc	2007-11-20 01:26:22 UTC (rev 8304)
+++ cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSCECCVMH.cc	2007-11-20 01:26:37 UTC (rev 8305)
@@ -0,0 +1,336 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestSCECCVMH.hh" // Implementation of class methods
+
+#include "spatialdata/spatialdb/SCECCVMH.hh" // USES SCECCVMH
+
+#include "spatialdata/geocoords/CSGeo.hh" // USES CSGeo
+
+#include <math.h> // USES fabs()
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( spatialdata::spatialdb::TestSCECCVMH );
+
+// ----------------------------------------------------------------------
+// Test constructor.
+void
+spatialdata::spatialdb::TestSCECCVMH::testConstructor(void)
+{ // testConstructor
+  SCECCVMH db;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test Label().
+void
+spatialdata::spatialdb::TestSCECCVMH::testLabel(void)
+{ // testLabel
+  SCECCVMH db;
+  const char* label = "database 2";
+  db.label(label);
+  CPPUNIT_ASSERT(0 == strcmp(label, db.label()));
+} // testLabel
+
+// ----------------------------------------------------------------------
+// Test dataDir().
+void
+spatialdata::spatialdb::TestSCECCVMH::testDataDir(void)
+{ // testDataDir
+  SCECCVMH db;
+
+  const char* dir = "/path/to/data/dir";
+
+  db.dataDir(dir);
+
+  CPPUNIT_ASSERT_EQUAL(std::string(dir), std::string(db._dataDir));
+} // testDataDir
+
+// ----------------------------------------------------------------------
+// Test queryVals().
+void
+spatialdata::spatialdb::TestSCECCVMH::testQueryVals(void)
+{ // testQueryVals
+  SCECCVMH db;
+
+  { // all values
+    const int querySize = 7;
+    const char* queryNames[] = { 
+      "moho-depth",
+      "topo-elev",
+      "vp-tag",
+      "Basement-Depth",
+      "vP",
+      "DenSity",
+      "VS"
+    };
+    const int queryVals[] = { 
+      SCECCVMH::QUERY_MOHODEPTH,
+      SCECCVMH::QUERY_TOPOELEV,
+      SCECCVMH::QUERY_VPTAG,
+      SCECCVMH::QUERY_BASEDEPTH,
+      SCECCVMH::QUERY_VP,
+      SCECCVMH::QUERY_DENSITY,
+      SCECCVMH::QUERY_VS
+    };
+
+    db.queryVals(queryNames, querySize);
+    CPPUNIT_ASSERT_EQUAL(querySize, db._querySize);
+    for (int i=0; i < querySize; ++i)
+      CPPUNIT_ASSERT_EQUAL(queryVals[i], db._queryVals[i]);
+  } // all values
+
+  { // subset of values
+    const int querySize = 3;
+    const char* queryNames[] = { 
+      "Basement-Depth",
+      "vp-tag",
+      "VS"
+    };
+    const int queryVals[] = { 
+      SCECCVMH::QUERY_BASEDEPTH,
+      SCECCVMH::QUERY_VPTAG,
+      SCECCVMH::QUERY_VS
+    };
+
+    db.queryVals(queryNames, querySize);
+    CPPUNIT_ASSERT_EQUAL(querySize, db._querySize);
+    for (int i=0; i < querySize; ++i)
+      CPPUNIT_ASSERT_EQUAL(queryVals[i], db._queryVals[i]);
+  } // subset of values
+} // testQueryVals
+
+#if defined(SCECCVMH_DATADIR)
+// ----------------------------------------------------------------------
+// Test query().
+void
+spatialdata::spatialdb::TestSCECCVMH::testQuery(void)
+{ // testQuery
+  SCECCVMH db;
+  db.dataDir(SCECCVMH_DATADIR);
+
+  spatialdata::geocoords::CSGeo cs;
+  cs.ellipsoid("clrk66");
+  cs.datumHoriz("NAD27");
+  cs.datumVert("mean sea level");
+  cs.initialize();
+
+  const int numLocs = 8;
+  const int spaceDim = 3;
+  const double lonlatelev[] = {
+    -125.000000,  35.000000,  -7777.00,
+    -118.560000,  32.550000,  -2450.00,
+    -118.513208,  33.884888,  -1400.00,
+    -118.520000,  34.120000,  -1400.00,
+    -116.400000,  32.340000,  -1000.00,
+    -118.337765,  34.095691,  -1770.00,
+    -118.337765,  34.095691, -17700.00,
+    -117.989344,  34.034148,  -3000.00,
+  };
+  const double tolerance = 1.0e-06;
+
+  db.open();
+  { // all values
+    const int querySize = 7;
+    const char* queryNames[] = { 
+      "moho-depth",
+      "topo-elev",
+      "vp-tag",
+      "Basement-Depth",
+      "vP",
+      "DenSity",
+      "VS"
+    };
+    const double values[] = {
+      -99999.00,  -99999.00,  -99999.00,  -99999.00,   -99999.00,   -99999.00,       -99999.00,  
+      -27991.001953, -1115.499268,  2.0, -1326.415405,  5560.209473,  3133.403158,  3333.334131,
+      //-27991.00,   -1115.50,      2.00,   -1326.42, 5540.545410,   3126.848633,   3323.004705,
+      -27165.316406,   -56.893856,  2.0, -1431.710449,  4384.126953,  2741.375651,  2584.759474,
+      -31178.105469,   489.975189,  2.0,    26.471289,  4142.553223,  2660.851074,  2398.752778,
+      -34526.414062,   801.209961,  2.0,   631.073059,  5226.578125,  3022.192708,  3148.777736,
+      -27857.322266,   106.671280,  3.0, -2361.386963,  4181.372070,  2673.790690,  2432.217302,
+      -27857.322266,   106.671280,  0.0, -2361.386963,  6351.574219,  3397.191406,  3707.466394,
+      -28512.111328,    93.515053,  2.0, -2860.919189,  4932.721191,  2924.240397,  2968.477965,
+    };
+
+    db.queryVals(queryNames, querySize);
+
+    double data[querySize];
+
+    for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+      db.query(data, querySize, &lonlatelev[iLoc*spaceDim], spaceDim, &cs);
+      
+      for (int iVal=0; iVal < querySize; ++iVal) {
+	const double dataE = values[iLoc*querySize+iVal];
+	if (fabs(dataE) > tolerance)
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, data[iVal]/dataE, tolerance);
+	else
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(dataE, data[iVal], tolerance);
+      } // for
+    } // for
+  } // all values
+
+  { // subset values
+    const int querySize = 2;
+    const char* queryNames[] = { 
+      "DenSity",
+      "vp-tag",
+    };
+    const double values[] = {
+      -99999.00, -99999.00,    
+      3133.403158,   2.0,
+      2741.375651,   2.0,
+      2660.851074,   2.0,
+      3022.192708,   2.0,
+      2673.790690,   3.0,
+      3397.191406,   0.0,
+      2924.240397,   2.0,
+    };
+
+    db.queryVals(queryNames, querySize);
+
+    double data[querySize];
+
+    for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+      db.query(data, querySize, &lonlatelev[iLoc*spaceDim], spaceDim, &cs);
+      
+      for (int iVal=0; iVal < querySize; ++iVal) {
+	const double dataE = values[iLoc*querySize+iVal];
+	if (fabs(dataE) > tolerance)
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, data[iVal]/dataE, tolerance);
+	else
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(dataE, data[iVal], tolerance);
+      } // for
+    } // for
+  } // all values
+
+  { // subset values
+    const int querySize = 1;
+    const char* queryNames[] = { 
+      "vs",
+    };
+    const double values[] = {
+      -99999.00, 
+      3333.334131,
+      2584.759474,
+      2398.752778,
+      3148.777736,
+      2432.217302,
+      3707.466394,
+      2968.477965,
+    };
+
+    db.queryVals(queryNames, querySize);
+
+    double data[querySize];
+
+    for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+      db.query(data, querySize, &lonlatelev[iLoc*spaceDim], spaceDim, &cs);
+      
+      for (int iVal=0; iVal < querySize; ++iVal) {
+	const double dataE = values[iLoc*querySize+iVal];
+	if (fabs(dataE) > tolerance)
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, data[iVal]/dataE, tolerance);
+	else
+	  CPPUNIT_ASSERT_DOUBLES_EQUAL(dataE, data[iVal], tolerance);
+      } // for
+    } // for
+  } // all values
+
+  db.close();
+} // testQuery
+#endif
+
+// ----------------------------------------------------------------------
+// Test calcDensity()
+void
+spatialdata::spatialdb::TestSCECCVMH::testCalcDensity(void)
+{ // testCalcDensity
+  const int size = 10;
+  const double vp[] = {
+    -99999.00,
+    5540.545410,
+    4384.126953,
+    4142.553223,
+    5226.578125,
+    4181.372070,
+    6351.574219,
+    4932.721191,
+    1480.0,
+    1860.0,
+  };
+  const double densityE[] = {
+    -99999.00,
+    3126.848633,
+    2741.375488,
+    2660.851074,
+    3022.192871,
+    2673.790527,
+    3397.191406,
+    2924.240234,
+    1000.0,
+    2000.0,
+  };
+
+  const double tolerance = 1.0e-06;
+  for (int i=0; i < size; ++i) {
+    const double density = SCECCVMH::_calcDensity(vp[i]);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0,
+				 density/densityE[i], tolerance);
+  } // for
+} // testCalcDensity
+
+// ----------------------------------------------------------------------
+// Test calcVs()
+void
+spatialdata::spatialdb::TestSCECCVMH::testCalcVs(void)
+{ // testCalcVs
+  const int size = 10;
+  const double vp[] = {
+    -99999.00,
+    5540.545410,
+    4384.126953,
+    4142.553223,
+    5226.578125,
+    4181.372070,
+    6351.574219,
+    4932.721191,
+    1480.0,
+    1860.0,
+  };
+  const double vsE[] = {
+    -99999.00,
+    3323.004705,
+    2584.759846,
+    2398.752778,
+    3148.777937,
+    2432.217302,
+    3707.466393753004,
+    2968.477865,
+    0.0,
+    431.0344827586207,
+  };
+
+  const double tolerance = 1.0e-06;
+  for (int i=0; i < size; ++i) {
+    const double vs = SCECCVMH::_calcVs(vp[i]);
+    if (fabs(vsE[i]) > tolerance)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0,
+				   vs/vsE[i], tolerance);
+    else
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(vsE[i], vs, tolerance);
+  } // for
+} // testCalcVs
+
+
+// End of file 

Added: cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSCECCVMH.hh
===================================================================
--- cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSCECCVMH.hh	2007-11-20 01:26:22 UTC (rev 8304)
+++ cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSCECCVMH.hh	2007-11-20 01:26:37 UTC (rev 8305)
@@ -0,0 +1,81 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file tests/libtests/spatialdb/TestSCECCVMH.hh
+ *
+ * @brief C++ TestSCECCVMH object
+ *
+ * C++ unit testing for SCECCVMH.
+ */
+
+#if !defined(spatialdata_spatialdb_testsceccvmh_hh)
+#define spatialdata_spatialdb_testsceccvmh_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/// Namespace for spatial package
+namespace spatialdata {
+  namespace spatialdb {
+    class TestSCECCVMH;
+    class SCECCVMH; // USES SCECCVMH
+  } // spatialdb
+} // spatialdata
+
+/// C++ unit testing for SCECCVMH
+class spatialdata::spatialdb::TestSCECCVMH : public CppUnit::TestFixture
+{ // class TestSCECCVMH
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestSCECCVMH );
+
+  CPPUNIT_TEST( testConstructor );
+  CPPUNIT_TEST( testLabel );
+  CPPUNIT_TEST( testDataDir );
+  CPPUNIT_TEST( testQueryVals );
+  CPPUNIT_TEST( testCalcDensity );
+  CPPUNIT_TEST( testCalcVs );
+#if defined(SCECCVMH_DATADIR)
+  CPPUNIT_TEST( testQuery );
+#endif
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Test constructor
+  void testConstructor(void);
+
+  /// Test label()
+  void testLabel(void);
+
+  /// Test dataDir()
+  void testDataDir(void);
+
+  /// Test queryVals()
+  void testQueryVals(void);
+
+  /// Test query()
+  void testQuery(void);
+
+  /// Test calcDensity()
+  void testCalcDensity(void);
+
+  /// Test calcVs()
+  void testCalcVs(void);
+
+}; // class TestSCECCVMH
+
+#endif // spatialdata_spatialdb_testsceccvmh_hh
+
+
+// End of file 



More information about the cig-commits mailing list