@@ -130,7 +130,12 @@ TEST(DecimalTest, TestCompatibleWithJava) {
130130}
131131
132132TEST (DecimalTest, TestCompareTo) {
133- auto CheckResult = [](const Decimal& decimal1, const Decimal& decimal2) {
133+ auto min_int128 = DecimalUtils::StrToInt128 (" -170141183460469231731687303715884105728" ).value ();
134+ auto can_negate = [min_int128](const Decimal& decimal) {
135+ return decimal.Value () != min_int128;
136+ };
137+
138+ auto CheckResult = [can_negate](const Decimal& decimal1, const Decimal& decimal2) {
134139 ASSERT_FALSE (decimal1 < decimal1);
135140 ASSERT_FALSE (decimal1 > decimal1);
136141 ASSERT_EQ (decimal1, decimal1);
@@ -143,6 +148,9 @@ TEST(DecimalTest, TestCompareTo) {
143148 ASSERT_EQ (decimal3.CompareTo (decimal1), 0 );
144149 ASSERT_EQ (decimal3, decimal1);
145150
151+ if (!can_negate (decimal1) || !can_negate (decimal2)) {
152+ return ;
153+ }
146154 Decimal negative_decimal1 (decimal1.Precision (), decimal1.Scale (), -decimal1.Value ());
147155 Decimal negative_decimal2 (decimal2.Precision (), decimal2.Scale (), -decimal2.Value ());
148156 ASSERT_EQ (negative_decimal1.CompareTo (negative_decimal2), 1 );
@@ -154,10 +162,13 @@ TEST(DecimalTest, TestCompareTo) {
154162 ASSERT_EQ (negative_decimal3, negative_decimal1);
155163 };
156164
157- auto CheckEqual = [](const Decimal& decimal1, const Decimal& decimal2) {
165+ auto CheckEqual = [can_negate ](const Decimal& decimal1, const Decimal& decimal2) {
158166 ASSERT_EQ (decimal1.CompareTo (decimal2), 0 );
159167 ASSERT_EQ (decimal2.CompareTo (decimal1), 0 );
160168
169+ if (!can_negate (decimal1) || !can_negate (decimal2)) {
170+ return ;
171+ }
161172 Decimal negative_decimal1 (decimal1.Precision (), decimal1.Scale (), -decimal1.Value ());
162173 Decimal negative_decimal2 (decimal2.Precision (), decimal2.Scale (), -decimal2.Value ());
163174 ASSERT_EQ (negative_decimal1.CompareTo (negative_decimal2), 0 );
0 commit comments