X-Git-Url: https://mattmccutchen.net/bigint/bigint.git/blobdiff_plain/8cad5ca94a8df88e0f48a5f8d4b9a7d056a59ef6..cb2f0c288d4b7acfa37d7a9c8bc1024c3f332b5f:/testsuite.cc diff --git a/testsuite.cc b/testsuite.cc index 8d31eda..7817e9a 100644 --- a/testsuite.cc +++ b/testsuite.cc @@ -60,6 +60,32 @@ TEST(10); //10 TEST(check(BigUnsigned())); //0 TEST(check(BigInteger())); //0 +// === Block-array constructors === + +BigUnsigned::Blk myBlocks[3]; +myBlocks[0] = 3; +myBlocks[1] = 4; +myBlocks[2] = 0; +BigUnsigned bu(myBlocks, 3); +TEST(check(bu)); //17179869187 +TEST(check(BigInteger(myBlocks, 3))); //17179869187 +TEST(check(BigInteger(bu ))); //17179869187 + +// For nonzero magnitude, reject zero and invalid signs. +TEST(check(BigInteger(myBlocks, 3, BigInteger::positive))); //17179869187 +TEST(check(BigInteger(myBlocks, 3, BigInteger::negative))); //-17179869187 +TEST(check(BigInteger(myBlocks, 3, BigInteger::zero ))); //error +TEST(check(BigInteger(bu, BigInteger::positive))); //17179869187 +TEST(check(BigInteger(bu, BigInteger::negative))); //-17179869187 +TEST(check(BigInteger(bu, BigInteger::zero ))); //error + +// For zero magnitude, force the sign to zero without error. +BigUnsigned::Blk myZeroBlocks[1]; +myZeroBlocks[0] = 0; +TEST(check(BigInteger(myZeroBlocks, 1, BigInteger::positive))); //0 +TEST(check(BigInteger(myZeroBlocks, 1, BigInteger::negative))); //0 +TEST(check(BigInteger(myZeroBlocks, 1, BigInteger::zero ))); //0 + // === BigUnsigned conversion limits === TEST(BigUnsigned(0).toUnsignedLong()); //0