[cig-commits] r14691 - in cs/spatialdata-0.1/trunk: libsrc/units tests/libtests/units

knepley at geodynamics.org knepley at geodynamics.org
Tue Apr 14 10:13:51 PDT 2009


Author: knepley
Date: 2009-04-14 10:13:50 -0700 (Tue, 14 Apr 2009)
New Revision: 14691

Modified:
   cs/spatialdata-0.1/trunk/libsrc/units/Parser.cc
   cs/spatialdata-0.1/trunk/tests/libtests/units/TestParser.cc
   cs/spatialdata-0.1/trunk/tests/libtests/units/testunits.cc
Log:
Fixed unit parser


Modified: cs/spatialdata-0.1/trunk/libsrc/units/Parser.cc
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/units/Parser.cc	2009-04-14 04:49:25 UTC (rev 14690)
+++ cs/spatialdata-0.1/trunk/libsrc/units/Parser.cc	2009-04-14 17:13:50 UTC (rev 14691)
@@ -58,9 +58,24 @@
    * Any nontrivial setup/teardown should be moved to
    * constructor/destructor.
    */
-  PyObject *pyUnit  = PyObject_CallFunction(_parser, "s", units);
+  PyObject *pyUnit  = PyObject_CallMethod(_parser, "parse", "s", units);
+  if (pyUnit == NULL) {
+    if (PyErr_Occurred()) {PyErr_Print();}
+    return 0.0;
+  }
   PyObject *pyScale = PyObject_GetAttrString(pyUnit, "value");
-  scale             = PyFloat_AsDouble(pyScale);
+  if (pyScale == NULL) {
+    Py_DECREF(pyUnit);
+    if (PyErr_Occurred()) {PyErr_Print();}
+    return 0.0;
+  }
+  if (!PyFloat_Check(pyScale)) {
+    Py_DECREF(pyScale);
+    Py_DECREF(pyUnit);
+    // Should throw a C++ exception. Which one?
+    return 0.0;
+  }
+  scale = PyFloat_AsDouble(pyScale);
   Py_DECREF(pyScale);
   Py_DECREF(pyUnit);
   return scale;

Modified: cs/spatialdata-0.1/trunk/tests/libtests/units/TestParser.cc
===================================================================
--- cs/spatialdata-0.1/trunk/tests/libtests/units/TestParser.cc	2009-04-14 04:49:25 UTC (rev 14690)
+++ cs/spatialdata-0.1/trunk/tests/libtests/units/TestParser.cc	2009-04-14 17:13:50 UTC (rev 14691)
@@ -73,9 +73,10 @@
 { // testDensity
   Parser parser;
 
-  CPPUNIT_ASSERT_EQUAL(1.0, parser.parse("kg/m**3"));
+  const double tolerance = 1.0e-06;
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, parser.parse("kg/m**3"), tolerance);
 
-  CPPUNIT_ASSERT_EQUAL(1000.0, parser.parse("g/cm**3"));
+  CPPUNIT_ASSERT_DOUBLES_EQUAL(1000.0, parser.parse("g/cm**3"), tolerance);
 } // testDensity
 
 // ----------------------------------------------------------------------

Modified: cs/spatialdata-0.1/trunk/tests/libtests/units/testunits.cc
===================================================================
--- cs/spatialdata-0.1/trunk/tests/libtests/units/testunits.cc	2009-04-14 04:49:25 UTC (rev 14690)
+++ cs/spatialdata-0.1/trunk/tests/libtests/units/testunits.cc	2009-04-14 17:13:50 UTC (rev 14691)
@@ -19,10 +19,15 @@
 #include <cppunit/TestRunner.h>
 #include <cppunit/TextOutputter.h>
 
+#include <Python.h>
+
 int
 main(int argc,
      char* argv[])
 { // main
+  // Initialize Python interpreter
+  Py_Initialize();
+
   // Create event manager and test controller
   CppUnit::TestResult controller;
 
@@ -43,6 +48,8 @@
   CppUnit::TextOutputter outputter(&result, std::cerr);
   outputter.write();
 
+  Py_Finalize();
+
   return (result.wasSuccessful() ? 0 : 1);
 } // main
 



More information about the CIG-COMMITS mailing list