|
|
@@ -5,9 +5,6 @@
|
|
|
// Created by Sam Jaffe on 5/18/18.
|
|
|
//
|
|
|
|
|
|
-#include <gmock/gmock.h>
|
|
|
-
|
|
|
-#include "bigdecimal.h"
|
|
|
#include "bignumber_test_printers.h"
|
|
|
|
|
|
TEST(BigDecimalTest, ConstructIntegerAsDecimal) {
|
|
|
@@ -16,7 +13,8 @@ TEST(BigDecimalTest, ConstructIntegerAsDecimal) {
|
|
|
|
|
|
TEST(BigDecimalTest, ConstructDecimal) {
|
|
|
EXPECT_THAT(math::bigdecimal("1000.10").to_string(), "1000.10");
|
|
|
- EXPECT_THAT(math::bigdecimal("1000.0000000001").to_string(), "1000.0000000001");
|
|
|
+ EXPECT_THAT(math::bigdecimal("1000.0000000001").to_string(),
|
|
|
+ "1000.0000000001");
|
|
|
}
|
|
|
|
|
|
TEST(BigDecimalTest, ConstructIntWithScaleAndStep) {
|
|
|
@@ -65,14 +63,14 @@ TEST(BigDecimalTest, AddingEqualScalesDoesNotAddTrailingDigitsOrLoseData) {
|
|
|
math::bigdecimal a("1000.10");
|
|
|
math::bigdecimal b("1000.01");
|
|
|
EXPECT_THAT(a.scale(), b.scale());
|
|
|
- EXPECT_THAT((a+b).to_string(), "2000.11");
|
|
|
+ EXPECT_THAT((a + b).to_string(), "2000.11");
|
|
|
}
|
|
|
|
|
|
TEST(BigDecimalTest, AdditionNormalizeScaleToHighest) {
|
|
|
math::bigdecimal a("1000.10");
|
|
|
math::bigdecimal b("1000");
|
|
|
EXPECT_THAT(a.scale(), testing::Gt(b.scale()));
|
|
|
- EXPECT_THAT((a+b).scale(), a.scale());
|
|
|
+ EXPECT_THAT((a + b).scale(), a.scale());
|
|
|
}
|
|
|
|
|
|
TEST(BigDecimalTest, InverseOfNumberCarriesSameScale) {
|
|
|
@@ -84,8 +82,8 @@ TEST(BigDecimalTest, SubtractionNormalizeScaleToHighest) {
|
|
|
math::bigdecimal a("900.10");
|
|
|
math::bigdecimal b("1000");
|
|
|
EXPECT_THAT(a.scale(), testing::Gt(b.scale()));
|
|
|
- EXPECT_THAT((a-b).scale(), a.scale());
|
|
|
- EXPECT_THAT((b-a).scale(), a.scale());
|
|
|
+ EXPECT_THAT((a - b).scale(), a.scale());
|
|
|
+ EXPECT_THAT((b - a).scale(), a.scale());
|
|
|
}
|
|
|
|
|
|
class MultiplicationScaleTest : public testing::TestWithParam<ArithTuple> {};
|
|
|
@@ -122,46 +120,48 @@ TEST_P(DecimalLtTest, IsLessThanEvenWithDifferentScales) {
|
|
|
|
|
|
#pragma clang diagnostic push
|
|
|
#pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
|
|
|
-INSTANTIATE_TEST_CASE_P(BigDecimal, MultiplicationScaleTest,
|
|
|
- testing::Values(ArithTuple{{1, 1}, { 1, 0}, "1.0"},
|
|
|
- ArithTuple{{1, 0}, { 1, 1}, "1.0"},
|
|
|
- ArithTuple{{1, 0}, {10, 0}, "10" },
|
|
|
- ArithTuple{{1, 1}, {10, 0}, "10.0"},
|
|
|
- ArithTuple{{1, 1}, {10, -1}, "10", },
|
|
|
- ArithTuple{{"1.1"}, {"1.1"}, "1.21"},
|
|
|
- ArithTuple{{"0.01"}, {100, -2}, "1"},
|
|
|
- ArithTuple{{1, 5}, {1, 5}, "1.0000000000"},
|
|
|
- ArithTuple{{1, 5}, {1000000000, -9}, "1000000000"},
|
|
|
- ArithTuple{{100, -2}, {1000000000, -9}, "100000000000"},
|
|
|
- ArithTuple{{10000, -4}, {100000, -5}, "1000000000"}));
|
|
|
-
|
|
|
-INSTANTIATE_TEST_CASE_P(BigDecimal, DivisionScaleTest,
|
|
|
- testing::Values(ArithTuple{{1, 1}, { 1, 0}, "1.0" },
|
|
|
- ArithTuple{{1, 0}, { 1, 1}, "0" },
|
|
|
- ArithTuple{{1, 0}, {10, 0}, "0" },
|
|
|
- ArithTuple{{1, 1}, {10, 0}, "0.1" },
|
|
|
- ArithTuple{{1, 1}, {10, -1}, "0.10"},
|
|
|
- ArithTuple{{"1.1"}, {"1.1"}, "1"},
|
|
|
- ArithTuple{{"0.01"}, {100, -2}, "0.0001"},
|
|
|
- ArithTuple{{1, 5}, {1, 5}, "1"},
|
|
|
- ArithTuple{{1, 5}, {1000000000, -9}, "0.00000000100000"},
|
|
|
- ArithTuple{{100, -2}, {1000000000, -9}, "0.0000001"},
|
|
|
- ArithTuple{{10000, -4}, {100000, -5}, "0.1"},
|
|
|
- ArithTuple{{"11.0"}, {"1.10"}, "10"}));
|
|
|
-
|
|
|
-INSTANTIATE_TEST_CASE_P(BigDecimal, EqTest,
|
|
|
- testing::Values(BigDecPair{{ 0}, { 0, 4}},
|
|
|
- BigDecPair{{100}, {100, -2}},
|
|
|
- BigDecPair{{1000000000, -4}, {1000000000, -9}},
|
|
|
- BigDecPair{{"0.1", 1}, {"0.10", 2}}));
|
|
|
-
|
|
|
-INSTANTIATE_TEST_CASE_P(BigDecimal, DecimalLtTest,
|
|
|
- testing::Values(BigDecPair{{ 0, 0}, { 1, 4}},
|
|
|
- BigDecPair{{ 0, 4}, { 1, 0}},
|
|
|
- BigDecPair{{ 0, 4}, { 1, 4}},
|
|
|
- BigDecPair{{-1, 4}, { 1, 4}},
|
|
|
- BigDecPair{{-2, 0}, {-1, 4}},
|
|
|
- BigDecPair{{-2, 4}, {-1, 0}},
|
|
|
- BigDecPair{{-2, 4}, {-1, 4}}));
|
|
|
+INSTANTIATE_TEST_CASE_P(
|
|
|
+ BigDecimal, MultiplicationScaleTest,
|
|
|
+ testing::Values(ArithTuple{{1, 1}, {1, 0}, "1.0"},
|
|
|
+ ArithTuple{{1, 0}, {1, 1}, "1.0"},
|
|
|
+ ArithTuple{{1, 0}, {10, 0}, "10"},
|
|
|
+ ArithTuple{{1, 1}, {10, 0}, "10.0"},
|
|
|
+ ArithTuple{
|
|
|
+ {1, 1},
|
|
|
+ {10, -1},
|
|
|
+ "10",
|
|
|
+ },
|
|
|
+ ArithTuple{{"1.1"}, {"1.1"}, "1.21"},
|
|
|
+ ArithTuple{{"0.01"}, {100, -2}, "1"},
|
|
|
+ ArithTuple{{1, 5}, {1, 5}, "1.0000000000"},
|
|
|
+ ArithTuple{{1, 5}, {1000000000, -9}, "1000000000"},
|
|
|
+ ArithTuple{{100, -2}, {1000000000, -9}, "100000000000"},
|
|
|
+ ArithTuple{{10000, -4}, {100000, -5}, "1000000000"}));
|
|
|
+
|
|
|
+INSTANTIATE_TEST_CASE_P(
|
|
|
+ BigDecimal, DivisionScaleTest,
|
|
|
+ testing::Values(
|
|
|
+ ArithTuple{{1, 1}, {1, 0}, "1.0"}, ArithTuple{{1, 0}, {1, 1}, "0"},
|
|
|
+ ArithTuple{{1, 0}, {10, 0}, "0"}, ArithTuple{{1, 1}, {10, 0}, "0.1"},
|
|
|
+ ArithTuple{{1, 1}, {10, -1}, "0.10"}, ArithTuple{{"1.1"}, {"1.1"}, "1"},
|
|
|
+ ArithTuple{{"0.01"}, {100, -2}, "0.0001"},
|
|
|
+ ArithTuple{{1, 5}, {1, 5}, "1"},
|
|
|
+ ArithTuple{{1, 5}, {1000000000, -9}, "0.00000000100000"},
|
|
|
+ ArithTuple{{100, -2}, {1000000000, -9}, "0.0000001"},
|
|
|
+ ArithTuple{{10000, -4}, {100000, -5}, "0.1"},
|
|
|
+ ArithTuple{{"11.0"}, {"1.10"}, "10"}));
|
|
|
+
|
|
|
+INSTANTIATE_TEST_CASE_P(
|
|
|
+ BigDecimal, EqTest,
|
|
|
+ testing::Values(BigDecPair{{0}, {0, 4}}, BigDecPair{{100}, {100, -2}},
|
|
|
+ BigDecPair{{1000000000, -4}, {1000000000, -9}},
|
|
|
+ BigDecPair{{"0.1", 1}, {"0.10", 2}}));
|
|
|
+
|
|
|
+INSTANTIATE_TEST_CASE_P(
|
|
|
+ BigDecimal, DecimalLtTest,
|
|
|
+ testing::Values(BigDecPair{{0, 0}, {1, 4}}, BigDecPair{{0, 4}, {1, 0}},
|
|
|
+ BigDecPair{{0, 4}, {1, 4}}, BigDecPair{{-1, 4}, {1, 4}},
|
|
|
+ BigDecPair{{-2, 0}, {-1, 4}}, BigDecPair{{-2, 4}, {-1, 0}},
|
|
|
+ BigDecPair{{-2, 4}, {-1, 4}}));
|
|
|
|
|
|
#pragma clang diagnostic pop
|