From 2c572253700a4353efbe33b9982cb12affd888c7 Mon Sep 17 00:00:00 2001 From: Brice Rebsamen Date: Wed, 11 Feb 2015 11:29:33 -0800 Subject: [PATCH 1/2] Added a test for rounding errors in stamp conversion for some values the test fails. This is because of rounding errors. See #14. --- test/test_pcl_conversions.cpp | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/test/test_pcl_conversions.cpp b/test/test_pcl_conversions.cpp index ba048763..c07720a7 100644 --- a/test/test_pcl_conversions.cpp +++ b/test/test_pcl_conversions.cpp @@ -100,6 +100,49 @@ TEST_F(PCLConversionTests, pointcloud2Conversion) { } // namespace + +struct StampTestData +{ + const ros::Time stamp_; + ros::Time stamp2_; + + explicit StampTestData(const ros::Time &stamp) + : stamp_(stamp) + { + pcl::uint64_t pcl_stamp; + pcl_conversions::toPCL(stamp_, pcl_stamp); + pcl_conversions::fromPCL(pcl_stamp, stamp2_); + } +}; + +TEST(PCLConversionStamp, Stamps) +{ + { + const StampTestData d(ros::Time(1.000001)); + EXPECT_TRUE(d.stamp_==d.stamp2_); + } + + { + const StampTestData d(ros::Time(1.999999)); + EXPECT_TRUE(d.stamp_==d.stamp2_); + } + + { + const StampTestData d(ros::Time(1.999)); + EXPECT_TRUE(d.stamp_==d.stamp2_); + } + + { + const StampTestData d(ros::Time(1423680574, 746000000)); + EXPECT_TRUE(d.stamp_==d.stamp2_); + } + + { + const StampTestData d(ros::Time(1423680629, 901000000)); + EXPECT_TRUE(d.stamp_==d.stamp2_); + } +} + int main(int argc, char **argv) { try { ::testing::InitGoogleTest(&argc, argv); From d1b27af512256176d1a50564dfe41976f9eefb4e Mon Sep 17 00:00:00 2001 From: Brice Rebsamen Date: Wed, 11 Feb 2015 11:36:56 -0800 Subject: [PATCH 2/2] Conversion in integral precision fixes #14 --- include/pcl_conversions/pcl_conversions.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/pcl_conversions/pcl_conversions.h b/include/pcl_conversions/pcl_conversions.h index 3da01eaf..44c4381b 100644 --- a/include/pcl_conversions/pcl_conversions.h +++ b/include/pcl_conversions/pcl_conversions.h @@ -79,13 +79,13 @@ namespace pcl_conversions { inline void fromPCL(const pcl::uint64_t &pcl_stamp, ros::Time &stamp) { - stamp.fromNSec(pcl_stamp * 1e3); // Convert from us to ns + stamp.fromNSec(pcl_stamp * 1000ull); // Convert from us to ns } inline void toPCL(const ros::Time &stamp, pcl::uint64_t &pcl_stamp) { - pcl_stamp = stamp.toNSec() / 1e3; // Convert from ns to us + pcl_stamp = stamp.toNSec() / 1000ull; // Convert from ns to us } inline