[Liblas-commits] hg-main-tree: make Faux Writer deal in doubles, not floats, and ...

liblas-commits at liblas.org liblas-commits at liblas.org
Wed Mar 16 11:58:23 EDT 2011


details:   http://hg.libpc.orghg-main-tree/rev/772b16bad235
changeset: 278:772b16bad235
user:      Howard Butler <hobu.inc at gmail.com>
date:      Wed Mar 16 10:58:15 2011 -0500
description:
make Faux Writer deal in doubles, not floats, and clean up some == comparisons to use epsilon tests

diffstat:

 include/libpc/drivers/faux/Writer.hpp |  38 +++++++++++++++++-----------------
 src/drivers/faux/Writer.cpp           |  16 +++++++-------
 test/unit/FauxWriterTest.cpp          |  21 +++++++++++--------
 3 files changed, 39 insertions(+), 36 deletions(-)

diffs (128 lines):

diff -r f97e99fce906 -r 772b16bad235 include/libpc/drivers/faux/Writer.hpp
--- a/include/libpc/drivers/faux/Writer.hpp	Wed Mar 16 10:47:12 2011 -0500
+++ b/include/libpc/drivers/faux/Writer.hpp	Wed Mar 16 10:58:15 2011 -0500
@@ -45,7 +45,7 @@
 // The FauxWriter doesn't actually write to disk -- instead, it just
 // record some summary stats about the data it is given.
 //
-// This writer knows only about three dimensions: X,Y,Z (as floats).
+// This writer knows only about three dimensions: X,Y,Z (as doubles).
 //
 class LIBPC_DLL Writer : public libpc::Writer
 {
@@ -55,26 +55,26 @@
     const std::string& getName() const;
 
     // retrieve the summary info
-    float getMinX() const { return m_minimumX; }
-    float getMinY() const { return m_minimumY; }
-    float getMinZ() const { return m_minimumZ; }
-    float getMaxX() const { return m_maximumX; }
-    float getMaxY() const { return m_maximumY; }
-    float getMaxZ() const { return m_maximumZ; }
-    float getAvgX() const { return m_averageX; }
-    float getAvgY() const { return m_averageY; }
-    float getAvgZ() const { return m_averageZ; }
+    double getMinX() const { return m_minimumX; }
+    double getMinY() const { return m_minimumY; }
+    double getMinZ() const { return m_minimumZ; }
+    double getMaxX() const { return m_maximumX; }
+    double getMaxY() const { return m_maximumY; }
+    double getMaxZ() const { return m_maximumZ; }
+    double getAvgX() const { return m_averageX; }
+    double getAvgY() const { return m_averageY; }
+    double getAvgZ() const { return m_averageZ; }
 
 private:
-    float m_minimumX;
-    float m_minimumY;
-    float m_minimumZ;
-    float m_maximumX;
-    float m_maximumY;
-    float m_maximumZ;
-    float m_averageX;
-    float m_averageY;
-    float m_averageZ;
+    double m_minimumX;
+    double m_minimumY;
+    double m_minimumZ;
+    double m_maximumX;
+    double m_maximumY;
+    double m_maximumZ;
+    double m_averageX;
+    double m_averageY;
+    double m_averageZ;
 
     void writeBegin();
     boost::uint32_t writeBuffer(const PointData&);
diff -r f97e99fce906 -r 772b16bad235 src/drivers/faux/Writer.cpp
--- a/src/drivers/faux/Writer.cpp	Wed Mar 16 10:47:12 2011 -0500
+++ b/src/drivers/faux/Writer.cpp	Wed Mar 16 10:58:15 2011 -0500
@@ -58,8 +58,8 @@
 
 void Writer::writeBegin()
 {
-    m_minimumX = m_minimumY = m_minimumZ = std::numeric_limits<float>::max();
-    m_maximumX = m_maximumY = m_maximumZ = std::numeric_limits<float>::min();
+    m_minimumX = m_minimumY = m_minimumZ = std::numeric_limits<double>::max();
+    m_maximumX = m_maximumY = m_maximumZ = std::numeric_limits<double>::min();
     m_averageX = m_averageY = m_averageZ = 0;
 
     return;
@@ -68,9 +68,9 @@
 
 void Writer::writeEnd()
 {
-    m_averageX /= (float)m_actualNumPointsWritten;
-    m_averageY /= (float)m_actualNumPointsWritten;
-    m_averageZ /= (float)m_actualNumPointsWritten;
+    m_averageX /= (double)m_actualNumPointsWritten;
+    m_averageY /= (double)m_actualNumPointsWritten;
+    m_averageZ /= (double)m_actualNumPointsWritten;
 
     //cout << "FauxWriter::writeEnd()" << endl;
     //cout << "  wrote " << m_actualNumPointsWritten << " points" << endl;
@@ -104,9 +104,9 @@
         {
             ++numValidPoints;
 
-            float x = pointData.getField<float>(pointIndex, fieldIndexX);
-            float y = pointData.getField<float>(pointIndex, fieldIndexY);
-            float z = pointData.getField<float>(pointIndex, fieldIndexZ);
+            double x = pointData.getField<double>(pointIndex, fieldIndexX);
+            double y = pointData.getField<double>(pointIndex, fieldIndexY);
+            double z = pointData.getField<double>(pointIndex, fieldIndexZ);
 
             m_minimumX = std::min(m_minimumX, x);
             m_minimumY = std::min(m_minimumY, y);
diff -r f97e99fce906 -r 772b16bad235 test/unit/FauxWriterTest.cpp
--- a/test/unit/FauxWriterTest.cpp	Wed Mar 16 10:47:12 2011 -0500
+++ b/test/unit/FauxWriterTest.cpp	Wed Mar 16 10:58:15 2011 -0500
@@ -54,15 +54,18 @@
 
     BOOST_CHECK(numWritten == 750);
 
-    BOOST_CHECK(writer.getMinX() == 1.0);
-    BOOST_CHECK(writer.getMinY() == 2.0);
-    BOOST_CHECK(writer.getMinZ() == 3.0);
-    BOOST_CHECK(writer.getMaxX() == 1.0);
-    BOOST_CHECK(writer.getMaxY() == 2.0);
-    BOOST_CHECK(writer.getMaxZ() == 3.0);
-    BOOST_CHECK(writer.getAvgX() == 1.0);
-    BOOST_CHECK(writer.getAvgY() == 2.0);
-    BOOST_CHECK(writer.getAvgZ() == 3.0);
+    BOOST_CHECK(Utils::compare_approx(writer.getMinX(), 1.0, (std::numeric_limits<double>::min)()) == true);
+    BOOST_CHECK(Utils::compare_approx(writer.getMinY(), 2.0, (std::numeric_limits<double>::min)()) == true);
+    BOOST_CHECK(Utils::compare_approx(writer.getMinZ(), 3.0, (std::numeric_limits<double>::min)()) == true);
+
+    BOOST_CHECK(Utils::compare_approx(writer.getMaxX(), 1.0, (std::numeric_limits<double>::min)()) == true);
+    BOOST_CHECK(Utils::compare_approx(writer.getMaxY(), 2.0, (std::numeric_limits<double>::min)()) == true);
+    BOOST_CHECK(Utils::compare_approx(writer.getMaxZ(), 3.0, (std::numeric_limits<double>::min)()) == true);
+
+    BOOST_CHECK(Utils::compare_approx(writer.getAvgX(), 1.0, (std::numeric_limits<double>::min)()) == true);
+    BOOST_CHECK(Utils::compare_approx(writer.getAvgY(), 2.0, (std::numeric_limits<double>::min)()) == true);
+    BOOST_CHECK(Utils::compare_approx(writer.getAvgZ(), 3.0, (std::numeric_limits<double>::min)()) == true);
+
 
     return;
 }


More information about the Liblas-commits mailing list