extended unittest to double-version of nice_unit_format
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Wed, 1 Jun 2016 08:00:42 +0000 (10:00 +0200)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Wed, 1 Jun 2016 08:00:42 +0000 (10:00 +0200)
test/stringfunc.cpp

index 62c9eb3..8ced76b 100644 (file)
@@ -24,11 +24,13 @@ on this file might be covered by the GNU General Public License.
 
 // #include <iostream>
 #include <string>
+#include <cmath>
 // #include <sstream>
 // #include <stdexcept>
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
+#include <boost/numeric/conversion/cast.hpp>
 
 #include <stringfunc.hxx>
 #include <containerfunc.hpp>
@@ -146,6 +148,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format2)
     output = nice_unit_format(two_kilobytes);
     BOOST_CHECK_EQUAL(string("2.0 KB"), output);
 
+    output = nice_unit_format(boost::numeric_cast<double>(two_kilobytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.00 KBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_kilobytes));
+    BOOST_CHECK_EQUAL(string("2.0 KB"), output);
+
     const int64_t two_and_half_kilobytes = 2500;
 
     output = nice_unit_format(two_and_half_kilobytes, LongUnitFormat, UnitBase1000);
@@ -153,6 +161,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format2)
 
     output = nice_unit_format(two_and_half_kilobytes);
     BOOST_CHECK_EQUAL(string("2.4 KB"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_kilobytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.50 KBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_kilobytes));
+    BOOST_CHECK_EQUAL(string("2.4 KB"), output);
 }
 
 BOOST_AUTO_TEST_CASE(nice_unit_format3)
@@ -165,6 +179,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format3)
     output = nice_unit_format(two_megabytes);
     BOOST_CHECK_EQUAL(string("1.9 MB"), output);
 
+    output = nice_unit_format(boost::numeric_cast<double>(two_megabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.00 MBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_megabytes));
+    BOOST_CHECK_EQUAL(string("1.9 MB"), output);
+
     const int64_t two_and_half_megabytes = 2500000;
 
     output = nice_unit_format(two_and_half_megabytes, LongUnitFormat, UnitBase1000);
@@ -173,6 +193,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format3)
     output = nice_unit_format(two_and_half_megabytes);
     BOOST_CHECK_EQUAL(string("2.4 MB"), output);
 
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_megabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.50 MBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_megabytes));
+    BOOST_CHECK_EQUAL(string("2.4 MB"), output);
+
 }
 
 BOOST_AUTO_TEST_CASE(nice_unit_format4)
@@ -185,6 +211,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format4)
     output = nice_unit_format(two_gigabytes);
     BOOST_CHECK_EQUAL(string("1.9 GB"), output);
 
+    output = nice_unit_format(boost::numeric_cast<double>(two_gigabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.00 GBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_gigabytes));
+    BOOST_CHECK_EQUAL(string("1.9 GB"), output);
+
     const int64_t two_and_half_gigabytes = 2500000000LL;
 
     output = nice_unit_format(two_and_half_gigabytes, LongUnitFormat, UnitBase1000);
@@ -192,6 +224,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format4)
 
     output = nice_unit_format(two_and_half_gigabytes);
     BOOST_CHECK_EQUAL(string("2.3 GB"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_gigabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.50 GBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_gigabytes));
+    BOOST_CHECK_EQUAL(string("2.3 GB"), output);
 }
 
 BOOST_AUTO_TEST_CASE(nice_unit_format5)
@@ -204,6 +242,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format5)
     output = nice_unit_format(two_terabytes);
     BOOST_CHECK_EQUAL(string("1.8 TB"), output);
 
+    output = nice_unit_format(boost::numeric_cast<double>(two_terabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.00 TBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_terabytes));
+    BOOST_CHECK_EQUAL(string("1.8 TB"), output);
+
     const int64_t two_and_half_terabytes = 2500000000000LL;
 
     output = nice_unit_format(two_and_half_terabytes, LongUnitFormat, UnitBase1000);
@@ -211,6 +255,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format5)
 
     output = nice_unit_format(two_and_half_terabytes);
     BOOST_CHECK_EQUAL(string("2.3 TB"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_terabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.50 TBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_terabytes));
+    BOOST_CHECK_EQUAL(string("2.3 TB"), output);
 }
 
 BOOST_AUTO_TEST_CASE(nice_unit_format6)
@@ -223,6 +273,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format6)
     output = nice_unit_format(two_petabytes);
     BOOST_CHECK_EQUAL(string("1.8 PB"), output);
 
+    output = nice_unit_format(boost::numeric_cast<double>(two_petabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.00 PBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_petabytes));
+    BOOST_CHECK_EQUAL(string("1.8 PB"), output);
+
     const int64_t two_and_half_petabytes = 2500000000000000LL;
 
     output = nice_unit_format(two_and_half_petabytes, LongUnitFormat, UnitBase1000);
@@ -230,6 +286,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format6)
 
     output = nice_unit_format(two_and_half_petabytes);
     BOOST_CHECK_EQUAL(string("2.2 PB"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_petabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2.50 PBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_petabytes));
+    BOOST_CHECK_EQUAL(string("2.2 PB"), output);
 }
 
 BOOST_AUTO_TEST_CASE(nice_unit_format7)
@@ -242,6 +304,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format7)
     output = nice_unit_format(two_exabytes);
     BOOST_CHECK_EQUAL(string("1776.4 PB"), output);
 
+    output = nice_unit_format(boost::numeric_cast<double>(two_exabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2000.00 PBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_exabytes));
+    BOOST_CHECK_EQUAL(string("1776.4 PB"), output);
+
     const int64_t two_and_half_exabytes = 2500000000000000000LL;
 
     output = nice_unit_format(two_and_half_exabytes, LongUnitFormat, UnitBase1000);
@@ -249,6 +317,12 @@ BOOST_AUTO_TEST_CASE(nice_unit_format7)
 
     output = nice_unit_format(two_and_half_exabytes);
     BOOST_CHECK_EQUAL(string("2220.4 PB"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_exabytes), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("2500.00 PBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(two_and_half_exabytes));
+    BOOST_CHECK_EQUAL(string("2220.4 PB"), output);
 }
 
 BOOST_AUTO_TEST_CASE(nice_unit_format8)
@@ -260,6 +334,20 @@ BOOST_AUTO_TEST_CASE(nice_unit_format8)
 
     output = nice_unit_format(max_representable_64bits_number);
     BOOST_CHECK_EQUAL(string("8192.0 PB"), output);
+
+    /*
+    double val = boost::numeric_cast<double>(max_representable_64bits_number);
+    BOOST_MESSAGE("val as int64 is " << max_representable_64bits_number << " and as double is " << val);
+    BOOST_MESSAGE("val rounded is " << round(val));
+    BOOST_CHECK_EQUAL(val, round(val));
+    BOOST_MESSAGE("half as int64 is " << boost::numeric_cast<int64_t>(round(val/2)));   // ok
+    BOOST_MESSAGE("cast back is " << boost::numeric_cast<int64_t>(round(val)));  // throws a positive overflow
+    output = nice_unit_format(boost::numeric_cast<double>(max_representable_64bits_number), LongUnitFormat, UnitBase1000);
+    BOOST_CHECK_EQUAL(string("9223.40 PBytes"), output);
+
+    output = nice_unit_format(boost::numeric_cast<double>(max_representable_64bits_number));
+    BOOST_CHECK_EQUAL(string("8192.0 PB"), output);
+    */
 }
 
 BOOST_AUTO_TEST_CASE(TestTrim)