def testXorInt(self): bi = BigInt(rbigint.fromint(0xcccc)) result = bi.call(u"xor", [IntObject(0xaaaa)]) self.assertTrue(result.bi.int_eq(0x6666))
def testAndInt(self): bi = BigInt(rbigint.fromint(0x3fffffffffffffff).int_mul(3)) result = bi.call(u"and", [IntObject(0xffff)]) self.assertTrue(result.bi.int_eq(0xfffd))
def testApproxDivide(self): bi = BigInt(rbigint.fromint(7937000378463977)) # Hack. bj = BigInt(rbigint.fromint(1000000000000000000).int_mul(10)) result = bi.call(u"approxDivide", [bj]) self.assertAlmostEqual(result._d, 0.0007937000378463977)
def testOpCmpBigInt(self): i = IntObject(2) bi = BigInt(rbigint.fromint(6)) result = i.call(u"op__cmp", [bi]) self.assertEqual(result.getInt(), -1)
def testBitLength(self): bi = BigInt(rbigint.fromint(42)) result = bi.call(u"bitLength", []) self.assertEqual(result.getInt(), 6)
def testComplement(self): bi = BigInt(rbigint.fromint(6)) result = bi.call(u"complement", []) self.assertTrue(result.bi.int_eq(-7))
def getValue(self): try: return IntObject(self.bi.toint()) except OverflowError: return BigInt(self.bi)
def testXorInt(self): bi = BigInt(rbigint.fromint(0xcccc)) result = bi.call(u"xor", [IntObject(0xaaaa)]) self.assertEqual(result.getInt(), 0x6666)
def testFloorDivideDouble(self): bi = BigInt(rbigint.fromint(2).pow(rbigint.fromint(65))) result = bi.call(u"floorDivide", [DoubleObject(2.0)]) self.assertTrue(result.bi.eq(rbigint.fromint(2).pow(rbigint.fromint(64))))
def uncall(self): try: return wrapList([IntObject(self.bi.toint())]) except OverflowError: return wrapList([BigInt(self.bi)])
def testApproxDivideDouble(self): bi = BigInt(rbigint.fromint(1)) result = bi.call(u"approxDivide", [DoubleObject(32.0)]) self.assertAlmostEqual(result._d, 1.0 / 32.0)
def testComplement(self): bi = BigInt(rbigint.fromint(6)) result = bi.call(u"complement", []) self.assertEqual(result.getInt(), -7)
def testAndInt(self): bi = BigInt(rbigint.fromint(0x3fffffffffffffff).int_mul(3)) result = bi.call(u"and", [IntObject(0xffff)]) self.assertEqual(result.getInt(), 0xfffd)
def testOpCmpInt(self): bi = BigInt(rbigint.fromint(6)) i = IntObject(2) result = bi.call(u"op__cmp", [i]) self.assertEqual(result.getInt(), 1)
def visitIntExpr(self, bi, span): try: return self.dest.LiveExpr(IntObject(bi.toint()), span) except OverflowError: return self.dest.LiveExpr(BigInt(bi), span)
def testApproxDivideNaN(self): i = BigInt(rbigint.fromint(0)) result = i.call(u"approxDivide", [i]) self.assertTrue(math.isnan(result.getDouble()))
def testBigIntAndIntEquality(self): first = BigInt(rbigint.fromint(42)) second = IntObject(42) self.assertEqual(optSame(first, second), EQUAL)
def testShiftRight(self): bi = BigInt(rbigint.fromint(42)) result = bi.call(u"shiftRight", [IntObject(2)]) self.assertEqual(result.getInt(), 10)
def testApproxDivideBigInt(self): i = IntObject(7937000378463977) # Hack. bi = BigInt(rbigint.fromint(1000000000000000000).int_mul(10)) result = i.call(u"approxDivide", [bi]) self.assertAlmostEqual(result._d, 0.0007937000378463977)
def testShiftRight(self): bi = BigInt(rbigint.fromint(42)) result = bi.call(u"shiftRight", [IntObject(2)]) self.assertTrue(result.bi.int_eq(10))
def testFloorDivideDouble(self): bi = BigInt(rbigint.fromint(2).pow(rbigint.fromint(65))) result = bi.call(u"floorDivide", [DoubleObject(2.0)]) self.assertTrue( result.bi.eq(rbigint.fromint(2).pow(rbigint.fromint(64))))
def testFloorDivideNaN(self): i = BigInt(rbigint.fromint(0)) self.assertRaises(UserException, i.call, u"floorDivide", [i])