2323#include < bit>
2424#include < cmath>
2525#include < cstdint>
26- #include < vector>
2726
2827#include < gmock/gmock.h>
2928#include < gtest/gtest.h>
30- #include < sys/types.h>
3129
3230#include " iceberg/util/int128.h"
3331#include " matchers.h"
@@ -48,11 +46,6 @@ void AssertDecimalFromString(const std::string& s, const Decimal& expected,
4846 EXPECT_EQ (expected_scale, scale);
4947}
5048
51- Decimal DecimalFromInt128 (int128_t value) {
52- return {static_cast <int64_t >(value >> 64 ),
53- static_cast <uint64_t >(value & 0xFFFFFFFFFFFFFFFFULL )};
54- }
55-
5649} // namespace
5750
5851TEST (DecimalTest, Basics) {
@@ -279,23 +272,21 @@ TEST(DecimalTest, FromStringInvalid) {
279272 // Empty string
280273 auto result = Decimal::FromString (" " );
281274 ASSERT_THAT (result, IsError (ErrorKind::kInvalidArgument ));
282- ASSERT_THAT (result, HasErrorMessage (
283- " Decimal::FromString: empty string is not a valid Decimal" ));
275+ ASSERT_THAT (result, HasErrorMessage (" Empty string is not a valid Decimal" ));
284276 for (const auto & invalid_string :
285277 std::vector<std::string>{" -" , " 0.0.0" , " 0-13-32" , " a" , " -23092.235-" ,
286278 " -+23092.235" , " +-23092.235" , " 00a" , " 1e1a" , " 0.00123D/3" ,
287279 " 1.23eA8" , " 1.23E+3A" , " -1.23E--5" , " 1.2345E+++07" }) {
288280 auto result = Decimal::FromString (invalid_string);
289281 ASSERT_THAT (result, IsError (ErrorKind::kInvalidArgument ));
290- ASSERT_THAT (result, HasErrorMessage (" Decimal::FromString: invalid decimal string" ));
282+ ASSERT_THAT (result, HasErrorMessage (" Invalid decimal string" ));
291283 }
292284
293285 for (const auto & invalid_string :
294286 std::vector<std::string>{" 1e39" , " -1e39" , " 9e39" , " -9e39" , " 9.9e40" , " -9.9e40" }) {
295287 auto result = Decimal::FromString (invalid_string);
296288 ASSERT_THAT (result, IsError (ErrorKind::kInvalidArgument ));
297- ASSERT_THAT (result,
298- HasErrorMessage (" Decimal::FromString: scale must be in the range" ));
289+ ASSERT_THAT (result, HasErrorMessage (" scale must be in the range" ));
299290 }
300291}
301292
@@ -1094,11 +1085,10 @@ TEST(DecimalTestFunctionality, Multiply) {
10941085 for (auto x : std::vector<int128_t >{-INT64_MAX, -INT32_MAX, 0 , INT32_MAX, INT64_MAX}) {
10951086 for (auto y :
10961087 std::vector<int128_t >{-INT32_MAX, -32 , -2 , -1 , 0 , 1 , 2 , 32 , INT32_MAX}) {
1097- Decimal decimal_x = DecimalFromInt128 (x);
1098- Decimal decimal_y = DecimalFromInt128 (y);
1088+ Decimal decimal_x (x);
1089+ Decimal decimal_y (y);
10991090 Decimal result = decimal_x * decimal_y;
1100- EXPECT_EQ (DecimalFromInt128 (x * y), result)
1101- << " x: " << decimal_x << " y: " << decimal_y;
1091+ EXPECT_EQ (Decimal (x * y), result) << " x: " << decimal_x << " y: " << decimal_y;
11021092 }
11031093 }
11041094}
@@ -1111,11 +1101,10 @@ TEST(DecimalTestFunctionality, Divide) {
11111101
11121102 for (auto x : std::vector<int128_t >{-INT64_MAX, -INT32_MAX, 0 , INT32_MAX, INT64_MAX}) {
11131103 for (auto y : std::vector<int128_t >{-INT32_MAX, -32 , -2 , -1 , 1 , 2 , 32 , INT32_MAX}) {
1114- Decimal decimal_x = DecimalFromInt128 (x);
1115- Decimal decimal_y = DecimalFromInt128 (y);
1104+ Decimal decimal_x (x);
1105+ Decimal decimal_y (y);
11161106 Decimal result = decimal_x / decimal_y;
1117- EXPECT_EQ (DecimalFromInt128 (x / y), result)
1118- << " x: " << decimal_x << " y: " << decimal_y;
1107+ EXPECT_EQ (Decimal (x / y), result) << " x: " << decimal_x << " y: " << decimal_y;
11191108 }
11201109 }
11211110}
@@ -1129,11 +1118,10 @@ TEST(DecimalTestFunctionality, Modulo) {
11291118 // Test some edge cases
11301119 for (auto x : std::vector<int128_t >{-INT64_MAX, -INT32_MAX, 0 , INT32_MAX, INT64_MAX}) {
11311120 for (auto y : std::vector<int128_t >{-INT32_MAX, -32 , -2 , -1 , 1 , 2 , 32 , INT32_MAX}) {
1132- Decimal decimal_x = DecimalFromInt128 (x);
1133- Decimal decimal_y = DecimalFromInt128 (y);
1121+ Decimal decimal_x (x);
1122+ Decimal decimal_y (y);
11341123 Decimal result = decimal_x % decimal_y;
1135- EXPECT_EQ (DecimalFromInt128 (x % y), result)
1136- << " x: " << decimal_x << " y: " << decimal_y;
1124+ EXPECT_EQ (Decimal (x % y), result) << " x: " << decimal_x << " y: " << decimal_y;
11371125 }
11381126 }
11391127}
@@ -1206,8 +1194,8 @@ TEST(DecimalTestFunctionality, FitsInPrecision) {
12061194
12071195TEST (DecimalTest, LeftShift) {
12081196 auto check = [](int128_t x, uint32_t bits) {
1209- auto expected = DecimalFromInt128 (x << bits);
1210- auto actual = DecimalFromInt128 (x) << bits;
1197+ auto expected = Decimal (x << bits);
1198+ auto actual = Decimal (x) << bits;
12111199 ASSERT_EQ (actual.low (), expected.low ());
12121200 ASSERT_EQ (actual.high (), expected.high ());
12131201 };
0 commit comments