diff --git a/Lib/test/test_capi/test_long.py b/Lib/test/test_capi/test_long.py index 7e8d571ae234d1f..903f86bdea15765 100644 --- a/Lib/test/test_capi/test_long.py +++ b/Lib/test/test_capi/test_long.py @@ -453,6 +453,18 @@ def test_long_aspid(self): def test_long_aspid_limited(self): self._test_long_aspid(_testlimitedcapi.pylong_aspid) + #@support.bigmemtest(2**29, memuse=2.7, dry_run=False) + def test_long_asnativebytes_large(self, size=2**29): + asnativebytes = _testcapi.pylong_asnativebytes + v = 1 << (size * 8) + buffer = bytearray(size * 16 // 15 + 10) + r = asnativebytes(v, buffer, 0, -1) + self.assertEqual(r, size + 1) + self.assertEqual(buffer.count(0), len(buffer)) + r = asnativebytes(v, buffer, len(buffer), -1) + self.assertEqual(r, size + 1) + self.assertEqual(buffer.count(0), len(buffer) - 1) + def test_long_asnativebytes(self): import math from _testcapi import ( diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index 3b2e7c4e71d10d8..9faac8a8a5b5cbc 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -473,6 +473,13 @@ def test_float_conversion(self): self.check_float_conversion(value) self.check_float_conversion(-value) + @support.requires_IEEE_754 + #@support.bigmemtest(2**29, memuse=1.6, dry_run=False) + def test_float_conversion_large(self, size=2**29): + bits = size * 8 + v = 1 << bits + self.assertRaises(OverflowError, float, v) + def test_float_overflow(self): for x in -2.0, -1.0, 0.0, 1.0, 2.0: self.assertEqual(float(int(x)), x) @@ -614,6 +621,57 @@ def __lt__(self, other): eq(x > y, Rcmp > 0) eq(x >= y, Rcmp >= 0) + @support.requires_IEEE_754 + #@support.bigmemtest(2**29, memuse=3.2, dry_run=False) + def test_mixed_compares_large_integer(self, size=2**29): + bits = size * 8 + v = 1 << bits + f = sys.float_info.max + self.assertIs(f == v, False) + self.assertIs(f != v, True) + self.assertIs(f < v, True) + self.assertIs(f <= v, True) + self.assertIs(f > v, False) + self.assertIs(f >= v, False) + f = float('inf') + self.assertIs(f == v, False) + self.assertIs(f != v, True) + self.assertIs(f < v, False) + self.assertIs(f <= v, False) + self.assertIs(f > v, True) + self.assertIs(f >= v, True) + f = float('nan') + self.assertIs(f == v, False) + self.assertIs(f != v, True) + self.assertIs(f < v, False) + self.assertIs(f <= v, False) + self.assertIs(f > v, False) + self.assertIs(f >= v, False) + + del v + v = (-1) << bits + f = -sys.float_info.max + self.assertIs(f == v, False) + self.assertIs(f != v, True) + self.assertIs(f < v, False) + self.assertIs(f <= v, False) + self.assertIs(f > v, True) + self.assertIs(f >= v, True) + f = float('-inf') + self.assertIs(f == v, False) + self.assertIs(f != v, True) + self.assertIs(f < v, True) + self.assertIs(f <= v, True) + self.assertIs(f > v, False) + self.assertIs(f >= v, False) + f = float('nan') + self.assertIs(f == v, False) + self.assertIs(f != v, True) + self.assertIs(f < v, False) + self.assertIs(f <= v, False) + self.assertIs(f > v, False) + self.assertIs(f >= v, False) + def test__format__(self): self.assertEqual(format(123456789, 'd'), '123456789') self.assertEqual(format(123456789, 'd'), '123456789') diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index b68c442013c09f0..9a36875aa1e9d10 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1120,6 +1120,14 @@ def __index__(self): with self.assertRaises(TypeError): math.isqrt(value) + #@support.bigmemtest(2**29, memuse=7, dry_run=False) + def test_isqrt_large(self, size=2**29): + bits = size * 8 + v = 1 << bits + w = math.isqrt(v) + self.assertEqual(w.bit_length(), bits // 2 + 1) + self.assertEqual(w.bit_count(), 1) + def test_lcm(self): lcm = math.lcm self.assertEqual(lcm(0, 0), 0) @@ -1261,6 +1269,14 @@ def testLog10(self): self.assertEqual(math.log(INF), INF) self.assertTrue(math.isnan(math.log10(NAN))) + #@support.bigmemtest(2**29, memuse=1.6, dry_run=False) + def test_log_large_integer(self, size=2**29): + bits = size * 8 + v = 1 << bits + self.assertAlmostEqual(math.log2(v), bits) + self.assertAlmostEqual(math.log(v), bits * 0.6931471805599453) + self.assertAlmostEqual(math.log10(v), bits * 0.3010299956639812) + def testSumProd(self): sumprod = math.sumprod Decimal = decimal.Decimal