[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