[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