gnucash master: Add some tests looking for a GncInt128 divide overflow problem.

John Ralls jralls at code.gnucash.org
Sun Apr 2 19:33:05 EDT 2017


Updated	 via  https://github.com/Gnucash/gnucash/commit/6e7334fe (commit)
	from  https://github.com/Gnucash/gnucash/commit/5a58b93a (commit)



commit 6e7334fe88d6bfec12f1b8ce098da9f0849d0fae
Author: John Ralls <jralls at ceridwen.us>
Date:   Sun Apr 2 16:33:01 2017 -0700

    Add some tests looking for a GncInt128 divide overflow problem.
    
    Problem mentioned in mail from Mike Alexander; this test doesn't find it.

diff --git a/src/libqof/qof/test/gtest-gnc-int128.cpp b/src/libqof/qof/test/gtest-gnc-int128.cpp
index c6402da..946063f 100644
--- a/src/libqof/qof/test/gtest-gnc-int128.cpp
+++ b/src/libqof/qof/test/gtest-gnc-int128.cpp
@@ -495,6 +495,53 @@ TEST(qofint128_functions, divide)
 
     EXPECT_EQ (big, big %= bigger);
     EXPECT_EQ (two, bigger /= big);
+    EXPECT_NO_THROW({
+            GncInt128 a(2, INT64_C(5501995774277214867));
+            GncInt128 b(0, INT64_C(2086443244332180413));
+            GncInt128 c = a / b;
+            EXPECT_EQ(11, c);
+            EXPECT_FALSE(c.isBig());
+            GncInt128 d(-2, INT64_C(5501995774277214867));
+            GncInt128 e(0, INT64_C(1995728320665563874));
+            c = d / e;
+            EXPECT_EQ(-15, c);
+            EXPECT_FALSE(c.isBig());
+            GncInt128 f(2, INT64_C(-5501995774277214867));
+            GncInt128 g(0, INT64_C(2086443244332180413));
+            c = f / g;
+            EXPECT_EQ(15, c);
+            EXPECT_FALSE(c.isBig());
+            GncInt128 h(2, INT64_C(5501995774277214867));
+            GncInt128 i(0, INT64_C(-2086443244332180413));
+            c = h / i;
+            EXPECT_EQ(-11, c);
+            EXPECT_FALSE(c.isBig());
+            GncInt128 j(-2, INT64_C(-5501995774277214867));
+            GncInt128 k(0, INT64_C(2086443244332180413));
+            c = j / k;
+            EXPECT_EQ(-11, c);
+            EXPECT_FALSE(c.isBig());
+            GncInt128 l(-2, INT64_C(-5501995774277214867));
+            GncInt128 m(0, INT64_C(-2086443244332180413));
+            c = l / m;
+            EXPECT_EQ(11, c);
+            EXPECT_FALSE(c.isBig());
+            GncInt128 n(2, INT64_C(5501995774277214867), GncInt128::neg);
+            GncInt128 o(0, INT64_C(2086443244332180413));
+            c = n / o;
+            EXPECT_EQ(-11, c);
+            EXPECT_FALSE(c.isBig());
+            GncInt128 p(2, INT64_C(5501995774277214867));
+            GncInt128 q(0, INT64_C(2086443244332180413), GncInt128::neg);
+            c = p / q;
+            EXPECT_EQ(-11, c);
+            EXPECT_FALSE(c.isBig());
+            GncInt128 r(2, INT64_C(5501995774277214867), GncInt128::neg);
+            GncInt128 s(0, INT64_C(2086443244332180413), GncInt128::neg);
+            c = r / s;
+            EXPECT_EQ(11, c);
+            EXPECT_FALSE(c.isBig());
+      });
 }
 
 TEST(qofint128_functions, GCD)



Summary of changes:
 src/libqof/qof/test/gtest-gnc-int128.cpp | 47 ++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)



More information about the gnucash-changes mailing list