Another test to exercise APInt divide step D6.
authorYaron Keren <yaron.keren@gmail.com>
Wed, 22 Apr 2015 18:49:59 +0000 (18:49 +0000)
committerYaron Keren <yaron.keren@gmail.com>
Wed, 22 Apr 2015 18:49:59 +0000 (18:49 +0000)
This is divrem_big7 since divrem_big6 is used in Pawel upcoming patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235536 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/ADT/APIntTest.cpp

index acdc1ecbbdee03e029c1329afe605e06d6ab7373..a8fc3629cdb8fab44935c5d30e5504c0127f7d8f 100644 (file)
@@ -409,6 +409,19 @@ TEST(APIntTest, divrem_big5) {
   EXPECT_EQ(r, c);
 }
 
+TEST(APIntTest, divrem_big7) {
+  // Yet another test for KnuthDiv rare step D6.
+  APInt a{224, "800000008000000200000005", 16};
+  APInt b{224, "fffffffd", 16};
+  APInt c{224, "80000000800000010000000f", 16};
+
+  auto p = a * b + c;
+  auto q = p.udiv(a);
+  auto r = p.urem(a);
+  EXPECT_EQ(q, b);
+  EXPECT_EQ(r, c);
+}
+
 TEST(APIntTest, fromString) {
   EXPECT_EQ(APInt(32, 0), APInt(32,   "0", 2));
   EXPECT_EQ(APInt(32, 1), APInt(32,   "1", 2));