summaryrefslogtreecommitdiffstats
path: root/Python/Dependencies/future-0.18.2/tests/test_future/test_int.py
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2023-01-01 21:05:27 -0800
committeryum <yum.food.vr@gmail.com>2023-01-01 21:44:45 -0800
commite25bdba3a3a53b09be5269d8b065c13b73ab55c3 (patch)
tree1d1dc1d94cde92c2f4f8ce86017395054787515d /Python/Dependencies/future-0.18.2/tests/test_future/test_int.py
parent0d408cc812a094a708edbe4baf536e928731cfc3 (diff)
Embed git in package
package.ps1 fetches PortableGit and embeds it in the package. This eliminates all but one runtime dependency (MSVC++ Redistributable). * Move Python into a new FOSS folder.
Diffstat (limited to 'Python/Dependencies/future-0.18.2/tests/test_future/test_int.py')
-rw-r--r--Python/Dependencies/future-0.18.2/tests/test_future/test_int.py1096
1 files changed, 0 insertions, 1096 deletions
diff --git a/Python/Dependencies/future-0.18.2/tests/test_future/test_int.py b/Python/Dependencies/future-0.18.2/tests/test_future/test_int.py
deleted file mode 100644
index 573a0d5..0000000
--- a/Python/Dependencies/future-0.18.2/tests/test_future/test_int.py
+++ /dev/null
@@ -1,1096 +0,0 @@
-"""
-int tests from Py3.3
-"""
-
-from __future__ import (absolute_import, division,
- print_function, unicode_literals)
-from future.builtins import *
-from future.tests.base import unittest, expectedFailurePY2
-from future.utils import PY26, PY2, raise_from
-
-import sys
-import random
-import array
-
-try:
- import numpy as np
-except ImportError:
- np = None
-
-try:
- from future.standard_library.test import support
-except ImportError:
- def cpython_only(f):
- return f
-else:
- cpython_only = support.cpython_only
-
-
-L = [
- ('0', 0),
- ('1', 1),
- ('9', 9),
- ('10', 10),
- ('99', 99),
- ('100', 100),
- ('314', 314),
- (' 314', 314),
- ('314 ', 314),
- (' \t\t 314 \t\t ', 314),
- (repr(sys.maxsize), sys.maxsize),
- (' 1x', ValueError),
- (' 1 ', 1),
- (' 1\02 ', ValueError),
- ('', ValueError),
- (' ', ValueError),
- (' \t\t ', ValueError),
- ("\u0200", ValueError)
-]
-
-class IntTestCases(unittest.TestCase):
-
- def setUp(self):
- self.longMessage = True
-
- def test_isinstance_int_subclass(self):
- """
- Issue #89
- """
- value = int(10)
- class Magic(int):
- pass
- self.assertTrue(isinstance(value, int))
- self.assertFalse(isinstance(value, Magic))
-
- def test_basic(self):
- self.assertEqual(int(314), 314)
- self.assertEqual(int(3.14), 3)
- # Check that conversion from float truncates towards zero
- self.assertEqual(int(-3.14), -3)
- self.assertEqual(int(3.9), 3)
- self.assertEqual(int(-3.9), -3)
- self.assertEqual(int(3.5), 3)
- self.assertEqual(int(-3.5), -3)
- self.assertEqual(int("-3"), -3)
- self.assertEqual(int(" -3 "), -3)
- self.assertEqual(int("\N{EM SPACE}-3\N{EN SPACE}"), -3)
- # Different base:
- self.assertEqual(int("10",16), 16)
- # Test conversion from strings and various anomalies
- for s, v in L:
- for sign in "", "+", "-":
- for prefix in "", " ", "\t", " \t\t ":
- ss = prefix + sign + s
- vv = v
- if sign == "-" and v is not ValueError:
- vv = -v
- try:
- self.assertEqual(int(ss), vv)
- except ValueError:
- pass
-
- s = repr(-1-sys.maxsize)
- x = int(s)
- self.assertEqual(x+1, -sys.maxsize)
- self.assertIsInstance(x, int)
- # should return int
- self.assertEqual(int(s[1:]), sys.maxsize+1)
-
- # should return int
- x = int(1e100)
- self.assertIsInstance(x, int)
- x = int(-1e100)
- self.assertIsInstance(x, int)
-
-
- # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
- # Worked by accident in Windows release build, but failed in debug build.
- # Failed in all Linux builds.
- x = -1-sys.maxsize
- self.assertEqual(x >> 1, x//2)
-
- self.assertRaises(ValueError, int, '123\0')
- self.assertRaises(ValueError, int, '53', 40)
-
- # SF bug 1545497: embedded NULs were not detected with
- # explicit base
- self.assertRaises(ValueError, int, '123\0', 10)
- self.assertRaises(ValueError, int, '123\x00 245', 20)
-
- x = int('1' * 600)
- self.assertIsInstance(x, int)
-
-
- self.assertRaises(TypeError, int, 1, 12)
-
- self.assertEqual(int('0o123', 0), 83)
- self.assertEqual(int('0x123', 16), 291)
-
- # Bug 1679: "0x" is not a valid hex literal
- self.assertRaises(ValueError, int, "0x", 16)
- self.assertRaises(ValueError, int, "0x", 0)
-
- self.assertRaises(ValueError, int, "0o", 8)
- self.assertRaises(ValueError, int, "0o", 0)
-
- self.assertRaises(ValueError, int, "0b", 2)
- self.assertRaises(ValueError, int, "0b", 0)
-
- # SF bug 1334662: int(string, base) wrong answers
- # Various representations of 2**32 evaluated to 0
- # rather than 2**32 in previous versions
-
- self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
- self.assertEqual(int('102002022201221111211', 3), 4294967296)
- self.assertEqual(int('10000000000000000', 4), 4294967296)
- self.assertEqual(int('32244002423141', 5), 4294967296)
- self.assertEqual(int('1550104015504', 6), 4294967296)
- self.assertEqual(int('211301422354', 7), 4294967296)
- self.assertEqual(int('40000000000', 8), 4294967296)
- self.assertEqual(int('12068657454', 9), 4294967296)
- self.assertEqual(int('4294967296', 10), 4294967296)
- self.assertEqual(int('1904440554', 11), 4294967296)
- self.assertEqual(int('9ba461594', 12), 4294967296)
- self.assertEqual(int('535a79889', 13), 4294967296)
- self.assertEqual(int('2ca5b7464', 14), 4294967296)
- self.assertEqual(int('1a20dcd81', 15), 4294967296)
- self.assertEqual(int('100000000', 16), 4294967296)
- self.assertEqual(int('a7ffda91', 17), 4294967296)
- self.assertEqual(int('704he7g4', 18), 4294967296)
- self.assertEqual(int('4f5aff66', 19), 4294967296)
- self.assertEqual(int('3723ai4g', 20), 4294967296)
- self.assertEqual(int('281d55i4', 21), 4294967296)
- self.assertEqual(int('1fj8b184', 22), 4294967296)
- self.assertEqual(int('1606k7ic', 23), 4294967296)
- self.assertEqual(int('mb994ag', 24), 4294967296)
- self.assertEqual(int('hek2mgl', 25), 4294967296)
- self.assertEqual(int('dnchbnm', 26), 4294967296)
- self.assertEqual(int('b28jpdm', 27), 4294967296)
- self.assertEqual(int('8pfgih4', 28), 4294967296)
- self.assertEqual(int('76beigg', 29), 4294967296)
- self.assertEqual(int('5qmcpqg', 30), 4294967296)
- self.assertEqual(int('4q0jto4', 31), 4294967296)
- self.assertEqual(int('4000000', 32), 4294967296)
- self.assertEqual(int('3aokq94', 33), 4294967296)
- self.assertEqual(int('2qhxjli', 34), 4294967296)
- self.assertEqual(int('2br45qb', 35), 4294967296)
- self.assertEqual(int('1z141z4', 36), 4294967296)
-
- # tests with base 0
- # this fails on 3.0, but in 2.x the old octal syntax is allowed
- self.assertEqual(int(' 0o123 ', 0), 83)
- self.assertEqual(int(' 0o123 ', 0), 83)
- self.assertEqual(int('000', 0), 0)
- self.assertEqual(int('0o123', 0), 83)
- self.assertEqual(int('0x123', 0), 291)
- self.assertEqual(int('0b100', 0), 4)
- self.assertEqual(int(' 0O123 ', 0), 83)
- self.assertEqual(int(' 0X123 ', 0), 291)
- self.assertEqual(int(' 0B100 ', 0), 4)
-
- # without base still base 10
- self.assertEqual(int('0123'), 123)
- self.assertEqual(int('0123', 10), 123)
-
- # tests with prefix and base != 0
- self.assertEqual(int('0x123', 16), 291)
- self.assertEqual(int('0o123', 8), 83)
- self.assertEqual(int('0b100', 2), 4)
- self.assertEqual(int('0X123', 16), 291)
- self.assertEqual(int('0O123', 8), 83)
- self.assertEqual(int('0B100', 2), 4)
-
- # the code has special checks for the first character after the
- # type prefix
- self.assertRaises(ValueError, int, '0b2', 2)
- self.assertRaises(ValueError, int, '0b02', 2)
- self.assertRaises(ValueError, int, '0B2', 2)
- self.assertRaises(ValueError, int, '0B02', 2)
- self.assertRaises(ValueError, int, '0o8', 8)
- self.assertRaises(ValueError, int, '0o08', 8)
- self.assertRaises(ValueError, int, '0O8', 8)
- self.assertRaises(ValueError, int, '0O08', 8)
- self.assertRaises(ValueError, int, '0xg', 16)
- self.assertRaises(ValueError, int, '0x0g', 16)
- self.assertRaises(ValueError, int, '0Xg', 16)
- self.assertRaises(ValueError, int, '0X0g', 16)
-
- # SF bug 1334662: int(string, base) wrong answers
- # Checks for proper evaluation of 2**32 + 1
- self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
- self.assertEqual(int('102002022201221111212', 3), 4294967297)
- self.assertEqual(int('10000000000000001', 4), 4294967297)
- self.assertEqual(int('32244002423142', 5), 4294967297)
- self.assertEqual(int('1550104015505', 6), 4294967297)
- self.assertEqual(int('211301422355', 7), 4294967297)
- self.assertEqual(int('40000000001', 8), 4294967297)
- self.assertEqual(int('12068657455', 9), 4294967297)
- self.assertEqual(int('4294967297', 10), 4294967297)
- self.assertEqual(int('1904440555', 11), 4294967297)
- self.assertEqual(int('9ba461595', 12), 4294967297)
- self.assertEqual(int('535a7988a', 13), 4294967297)
- self.assertEqual(int('2ca5b7465', 14), 4294967297)
- self.assertEqual(int('1a20dcd82', 15), 4294967297)
- self.assertEqual(int('100000001', 16), 4294967297)
- self.assertEqual(int('a7ffda92', 17), 4294967297)
- self.assertEqual(int('704he7g5', 18), 4294967297)
- self.assertEqual(int('4f5aff67', 19), 4294967297)
- self.assertEqual(int('3723ai4h', 20), 4294967297)
- self.assertEqual(int('281d55i5', 21), 4294967297)
- self.assertEqual(int('1fj8b185', 22), 4294967297)
- self.assertEqual(int('1606k7id', 23), 4294967297)
- self.assertEqual(int('mb994ah', 24), 4294967297)
- self.assertEqual(int('hek2mgm', 25), 4294967297)
- self.assertEqual(int('dnchbnn', 26), 4294967297)
- self.assertEqual(int('b28jpdn', 27), 4294967297)
- self.assertEqual(int('8pfgih5', 28), 4294967297)
- self.assertEqual(int('76beigh', 29), 4294967297)
- self.assertEqual(int('5qmcpqh', 30), 4294967297)
- self.assertEqual(int('4q0jto5', 31), 4294967297)
- self.assertEqual(int('4000001', 32), 4294967297)
- self.assertEqual(int('3aokq95', 33), 4294967297)
- self.assertEqual(int('2qhxjlj', 34), 4294967297)
- self.assertEqual(int('2br45qc', 35), 4294967297)
- self.assertEqual(int('1z141z5', 36), 4294967297)
-
- @expectedFailurePY2 # fails on Py2
- @cpython_only
- def test_small_ints(self):
- # Bug #3236: Return small longs from PyLong_FromString
- self.assertIs(int('10'), 10)
- self.assertIs(int('-1'), -1)
- self.assertIs(int(b'10'), 10)
- self.assertIs(int(b'-1'), -1)
-
- def test_no_args(self):
- self.assertEqual(int(), 0)
-
- @unittest.skipIf(sys.version_info >= (3, 7),
- "The first parameter must be positional with Python >= 3.7"
- )
- def test_x_keyword_arg(self):
- # Test invoking int() using keyword arguments.
- self.assertEqual(int(x=1.2), 1)
- self.assertEqual(int(x='100', base=2), 4)
-
- def text_base_keyword_arg(self):
- self.assertEqual(int('100', base=2), 4)
-
- def test_newint_plus_float(self):
- minutes = int(100)
- second = 0.0
- seconds = minutes*60 + second
- self.assertEqual(seconds, 6000)
- self.assertTrue(isinstance(seconds, float))
-
- @expectedFailurePY2
- def test_keyword_args_2(self):
- # newint causes these to fail:
- self.assertRaises(TypeError, int, base=10)
- self.assertRaises(TypeError, int, base=0)
-
- def test_non_numeric_input_types(self):
- # Test possible non-numeric types for the argument x, including
- # subclasses of the explicitly documented accepted types.
- class CustomStr(str): pass
- class CustomBytes(bytes): pass
- class CustomByteArray(bytearray): pass
-
- values = [b'100',
- bytearray(b'100'),
- CustomStr('100'),
- CustomBytes(b'100'),
- CustomByteArray(b'100')]
-
- for x in values:
- msg = 'x has type %s' % type(x).__name__
- self.assertEqual(int(x), 100, msg=msg)
- self.assertEqual(int(x, 2), 4, msg=msg)
-
- def test_newint_of_newstr(self):
- a = str(u'123')
- b = int(a)
- self.assertEqual(b, 123)
- self.assertTrue(isinstance(b, int))
-
- def test_string_float(self):
- self.assertRaises(ValueError, int, '1.2')
-
- def test_intconversion(self):
- # Test __int__()
- class ClassicMissingMethods:
- pass
- # The following raises an AttributeError (for '__trunc__') on Py2
- # but a TypeError on Py3 (which uses new-style classes).
- # Perhaps nothing is to be done but avoiding old-style classes!
- # ...
- # self.assertRaises(TypeError, int, ClassicMissingMethods())
-
- class MissingMethods(object):
- pass
- self.assertRaises(TypeError, int, MissingMethods())
-
- class Foo0:
- def __int__(self):
- return 42
-
- class Foo1(object):
- def __int__(self):
- return 42
-
- class Foo2(int):
- def __int__(self):
- return 42
-
- class Foo3(int):
- def __int__(self):
- return self.real
-
- class Foo4(int):
- def __int__(self):
- return 42
-
- class Foo5(int):
- def __int__(self):
- return 42.
-
- self.assertEqual(int(Foo0()), 42)
- self.assertEqual(int(Foo1()), 42)
- self.assertEqual(int(Foo2()), 42)
- self.assertEqual(int(Foo3()), 0)
- self.assertEqual(int(Foo4()), 42)
- self.assertRaises(TypeError, int, Foo5())
-
- class Classic:
- pass
- for base in (object, Classic):
- class IntOverridesTrunc(base):
- def __int__(self):
- return 42
- def __trunc__(self):
- return -12
- self.assertEqual(int(IntOverridesTrunc()), 42)
-
- class JustTrunc(base):
- def __trunc__(self):
- return 42
- # This fails on Python 2.x:
- # if not PY26:
- # self.assertEqual(int(JustTrunc()), 42)
-
- for trunc_result_base in (object, Classic):
- class Integral(trunc_result_base):
- def __int__(self):
- return 42
-
- class TruncReturnsNonInt(base):
- def __trunc__(self):
- return Integral()
- # Fails on Python 2.6:
- # self.assertEqual(int(TruncReturnsNonInt()), 42)
-
- class NonIntegral(trunc_result_base):
- def __trunc__(self):
- # Check that we avoid infinite recursion.
- return NonIntegral()
-
- class TruncReturnsNonIntegral(base):
- def __trunc__(self):
- return NonIntegral()
- try:
- int(TruncReturnsNonIntegral())
- except TypeError as e:
- # self.assertEqual(str(e),
- # "__trunc__ returned non-Integral"
- # " (type NonIntegral)")
- pass
- else:
- self.fail("Failed to raise TypeError with %s" %
- ((base, trunc_result_base),))
-
- # Regression test for bugs.python.org/issue16060.
- class BadInt(trunc_result_base):
- def __int__(self):
- return 42.0
-
- class TruncReturnsBadInt(base):
- def __trunc__(self):
- return BadInt()
-
- with self.assertRaises(TypeError):
- int(TruncReturnsBadInt())
-
- ####################################################################
- # future-specific tests are below:
- ####################################################################
-
- # Exception messages in Py2 are 8-bit strings. The following fails,
- # even if the testlist strings are wrapped in str() calls...
- @expectedFailurePY2
- def test_error_message(self):
- testlist = ('\xbd', '123\xbd', ' 123 456 ')
- for s in testlist:
- try:
- int(s)
- except ValueError as e:
- self.assertIn(s.strip(), e.args[0])
- else:
- self.fail("Expected int(%r) to raise a ValueError", s)
-
- def test_bytes_mul(self):
- self.assertEqual(b'\x00' * int(5), b'\x00' * 5)
- self.assertEqual(bytes(b'\x00') * int(5), bytes(b'\x00') * 5)
-
- def test_str_mul(self):
- self.assertEqual(u'\x00' * int(5), u'\x00' * 5)
- self.assertEqual(str(u'\x00') * int(5), str(u'\x00') * 5)
-
- def test_int_bytes(self):
- self.assertEqual(int(b'a\r\n', 16), 10)
- self.assertEqual(int(bytes(b'a\r\n'), 16), 10)
-
- def test_divmod(self):
- """
- Test int.__divmod__
- """
- vals = [10**i for i in range(0, 20)]
- for i in range(200):
- x = random.choice(vals)
- y = random.choice(vals)
- assert divmod(int(x), int(y)) == divmod(x, y)
- assert divmod(int(-x), int(y)) == divmod(-x, y)
- assert divmod(int(x), int(-y)) == divmod(x, -y)
- assert divmod(int(-x), int(-y)) == divmod(-x, -y)
-
- assert divmod(int(x), float(y)) == divmod(x, float(y))
- assert divmod(int(-x), float(y)) == divmod(-x, float(y))
- assert divmod(int(x), float(-y)) == divmod(x, float(-y))
- assert divmod(int(-x), float(-y)) == divmod(-x, float(-y))
-
- def _frange(x, y, step):
- _x = x ; i = 0
- while _x < y:
- yield _x
- i += 1 ; _x = x + i * step
-
- for i in range(20):
- for d in _frange(0.005, 5.0, 0.005):
- self.assertEqual(divmod(int(i), d), divmod(i, d), msg='i={0}; d={1}'.format(i, d))
- self.assertEqual(divmod(int(-i), d), divmod(-i, d), msg='i={0}; d={1}'.format(i, d))
- self.assertEqual(divmod(int(i), -d), divmod(i, -d), msg='i={0}; d={1}'.format(i, d))
- self.assertEqual(divmod(int(-i), -d), divmod(-i, -d), msg='i={0}; d={1}'.format(i, d))
-
- def test_div(self):
- """
- Issue #38
- """
- a = int(3)
- self.assertEqual(a / 5., 0.6)
- self.assertEqual(a / 5, 0.6) # the __future__.division import is in
- # effect
-
- def test_truediv(self):
- """
- Test int.__truediv__ and friends (rtruediv, itruediv)
- """
- a = int(3)
- self.assertEqual(a / 2, 1.5) # since "from __future__ import division"
- # is in effect
- self.assertEqual(type(a / 2), float)
-
- b = int(2)
- self.assertEqual(a / b, 1.5) # since "from __future__ import division"
- # is in effect
- self.assertEqual(type(a / b), float)
-
- c = int(3) / b
- self.assertEqual(c, 1.5)
- self.assertTrue(isinstance(c, float))
-
- d = int(5)
- d /= 5
- self.assertEqual(d, 1.0)
- self.assertTrue(isinstance(d, float))
-
- e = int(10)
- f = int(20)
- e /= f
- self.assertEqual(e, 0.5)
- self.assertTrue(isinstance(e, float))
-
-
- def test_idiv(self):
- a = int(3)
- a /= 2
- self.assertEqual(a, 1.5)
- self.assertTrue(isinstance(a, float))
- b = int(10)
- b /= 2
- self.assertEqual(b, 5.0)
- self.assertTrue(isinstance(b, float))
- c = int(-3)
- c /= 2.0
- self.assertEqual(c, -1.5)
- self.assertTrue(isinstance(c, float))
-
- def test_floordiv(self):
- a = int(3)
- self.assertEqual(a // 2, 1)
- self.assertEqual(type(a // 2), int) # i.e. another newint
- self.assertTrue(isinstance(a // 2, int))
-
- b = int(2)
- self.assertEqual(a // b, 1)
- self.assertEqual(type(a // b), int) # i.e. another newint
- self.assertTrue(isinstance(a // b, int))
-
- c = 3 // b
- self.assertEqual(c, 1)
- self.assertEqual(type(c), int) # i.e. another newint
- self.assertTrue(isinstance(c, int))
-
- d = int(5)
- d //= 5
- self.assertEqual(d, 1)
- self.assertEqual(type(d), int) # i.e. another newint
- self.assertTrue(isinstance(d, int))
-
- e = int(10)
- f = int(20)
- e //= f
- self.assertEqual(e, 0)
- self.assertEqual(type(e), int) # i.e. another newint
- self.assertTrue(isinstance(e, int))
-
-
- def test_div(self):
- """
- Issue #38
- """
- a = int(3)
- self.assertEqual(a / 5., 0.6)
- self.assertEqual(a / 5, 0.6) # the __future__.division import is in
- # effect
-
- def test_truediv(self):
- """
- Test int.__truediv__ and friends (rtruediv, itruediv)
- """
- a = int(3)
- self.assertEqual(a / 2, 1.5) # since "from __future__ import division"
- # is in effect
- self.assertEqual(type(a / 2), float)
-
- b = int(2)
- self.assertEqual(a / b, 1.5) # since "from __future__ import division"
- # is in effect
- self.assertEqual(type(a / b), float)
-
- c = int(3) / b
- self.assertEqual(c, 1.5)
- self.assertTrue(isinstance(c, float))
-
- d = int(5)
- d /= 5
- self.assertEqual(d, 1.0)
- self.assertTrue(isinstance(d, float))
-
- e = int(10)
- f = int(20)
- e /= f
- self.assertEqual(e, 0.5)
- self.assertTrue(isinstance(e, float))
-
-
- def test_idiv(self):
- a = int(3)
- a /= 2
- self.assertEqual(a, 1.5)
- self.assertTrue(isinstance(a, float))
- b = int(10)
- b /= 2
- self.assertEqual(b, 5.0)
- self.assertTrue(isinstance(b, float))
- c = int(-3)
- c /= 2.0
- self.assertEqual(c, -1.5)
- self.assertTrue(isinstance(c, float))
-
-
- def test_floordiv(self):
- a = int(3)
- self.assertEqual(a // 2, 1)
- self.assertEqual(type(a // 2), int) # i.e. another newint
- self.assertTrue(isinstance(a // 2, int))
-
- b = int(2)
- self.assertEqual(a // b, 1)
- self.assertEqual(type(a // b), int) # i.e. another newint
- self.assertTrue(isinstance(a // b, int))
-
- c = 3 // b
- self.assertEqual(c, 1)
- self.assertEqual(type(c), int) # i.e. another newint
- self.assertTrue(isinstance(c, int))
-
- d = int(5)
- d //= 5
- self.assertEqual(d, 1)
- self.assertEqual(type(d), int) # i.e. another newint
- self.assertTrue(isinstance(d, int))
-
- e = int(10)
- f = int(20)
- e //= f
- self.assertEqual(e, 0)
- self.assertEqual(type(e), int) # i.e. another newint
- self.assertTrue(isinstance(e, int))
-
- @unittest.skipIf(np is None, "test requires NumPy")
- @unittest.expectedFailure
- def test_numpy_cast_as_long_and_newint(self):
- """
- NumPy currently doesn't like subclasses of ``long``. This should be fixed.
- """
- class longsubclass(long):
- pass
-
- a = np.arange(10**3, dtype=np.float64).reshape(10, 100)
- b = a.astype(longsubclass)
- c = a.astype(int)
- print(b.dtype)
- assert b.dtype == np.int64 == c.dtype
-
- def test_upcasting_to_floats(self):
- """
- Integers should automatically be upcasted to floats for arithmetic
- operations.
- """
- a = int(3)
-
- # Addition with floats.
- self.assertEqual(a + 0.5, 3.5)
- self.assertEqual(0.5 + a, 3.5)
- self.assertTrue(isinstance(a + 0.5, float))
- self.assertTrue(isinstance(0.5 + a, float))
-
- # Subtraction with floats.
- self.assertEqual(a - 0.5, 2.5)
- self.assertEqual(0.5 - a, -2.5)
- self.assertTrue(isinstance(a - 0.5, float))
- self.assertTrue(isinstance(0.5 - a, float))
-
- # Multiplication with floats.
- self.assertEqual(a * 0.5, 1.5)
- self.assertEqual(0.5 * a, 1.5)
- self.assertTrue(isinstance(a * 0.5, float))
- self.assertTrue(isinstance(0.5 * a, float))
-
- # Division with floats.
- self.assertEqual(a / 0.5, 6.0)
- self.assertEqual(0.5 / a, 0.5 / 3.0)
- self.assertTrue(isinstance(a / 0.5, float))
- self.assertTrue(isinstance(0.5 / a, float))
-
- # Modulo with floats.
- self.assertEqual(a % 0.5, 0.0)
- self.assertEqual(0.5 % a, 0.5)
- self.assertTrue(isinstance(a % 0.5, float))
- self.assertTrue(isinstance(0.5 % a, float))
-
- # Power with floats.
- self.assertEqual(1.0 ** a, 1.0)
- self.assertTrue(isinstance(1.0 ** a, float))
-
- self.assertEqual(a ** 1.0, a)
- self.assertTrue(isinstance(a ** 1.0, float))
-
- def test_upcasting_to_complex(self):
- """
- Integers should automatically be upcasted to complex numbers for
- arithmetic operations.
-
- Python 3 cannot mod complex numbers so this does not have to be
- supported here.
- """
- a = int(3)
-
- # Addition with complex.
- self.assertEqual(a + 0.5j, 3.0 + 0.5j)
- self.assertEqual(0.5j + a, 3.0 + 0.5j)
- self.assertTrue(isinstance(a + 0.5j, complex))
- self.assertTrue(isinstance(0.5j + a, complex))
-
- # Subtraction with complex.
- self.assertEqual(a - 0.5j, 3.0 - 0.5j)
- self.assertEqual(0.5j - a, -3.0 + 0.5j)
- self.assertTrue(isinstance(a - 0.5j, complex))
- self.assertTrue(isinstance(0.5j - a, complex))
-
- # Multiplication with complex.
- self.assertEqual(a * 0.5j, 1.5j)
- self.assertEqual(0.5j * a, 1.5j)
- self.assertTrue(isinstance(a * 0.5j, complex))
- self.assertTrue(isinstance(0.5j * a, complex))
-
- # Division with complex.
- self.assertEqual(a / 0.5j, -6.0j)
- self.assertEqual(0.5j / a, (0.5 / 3.0) * 1j)
- self.assertTrue(isinstance(a / 0.5j, complex))
- self.assertTrue(isinstance(0.5j / a, complex))
-
- # Power with floats.
- self.assertEqual(5.0j ** int(1), 5.0j)
- self.assertTrue(isinstance(5.0j ** int(1), complex))
-
- self.assertEqual(a ** 1.0j, 3.0 ** 1.0j)
- self.assertTrue(isinstance(a ** 1.0j, complex))
-
- def test_more_arithmetics(self):
- """
- More arithmetic tests to improve test coverage.
- """
- a = int(3)
- b = int(5)
- c = int(-5)
-
- self.assertEqual(b - a, 2)
- self.assertTrue(isinstance(b - a, int))
-
- self.assertEqual(a * b, 15)
- self.assertTrue(isinstance(a * b, int))
-
- self.assertEqual(b % a, 2)
- self.assertTrue(isinstance(b % a, int))
-
- self.assertEqual(a ** b, 243)
- self.assertTrue(isinstance(a ** b, int))
-
- self.assertEqual(abs(c), 5)
- self.assertEqual(abs(c), b)
- self.assertTrue(isinstance(abs(c), int))
-
- def test_bitwise_operations(self):
- """
- Tests bitwise operations.
- """
- a = int(3)
- b = int(1)
-
- self.assertEqual(a >> b, 1)
- self.assertEqual(a >> 1, 1)
- self.assertTrue(isinstance(a >> b, int))
- self.assertTrue(isinstance(a >> 1, int))
-
- self.assertEqual(a << b, 6)
- self.assertEqual(a << 1, 6)
- self.assertTrue(isinstance(a << b, int))
- self.assertTrue(isinstance(a << 1, int))
-
- self.assertEqual(a & b, 1)
- self.assertEqual(a & 1, 1)
- self.assertTrue(isinstance(a & b, int))
- self.assertTrue(isinstance(a & 1, int))
-
- self.assertEqual(a | b, 3)
- self.assertEqual(a | 1, 3)
- self.assertTrue(isinstance(a | b, int))
- self.assertTrue(isinstance(a | 1, int))
-
- self.assertEqual(a ^ b, 2)
- self.assertEqual(a ^ 1, 2)
- self.assertTrue(isinstance(a ^ b, int))
- self.assertTrue(isinstance(a ^ 1, int))
-
- self.assertEqual(~a, -4)
- self.assertTrue(isinstance(~a, int))
-
- def test_unary_operators(self):
- a = int(3)
- b = int(-3)
-
- self.assertEqual(+a, a)
- self.assertEqual(+a, 3)
- self.assertEqual(+b, b)
- self.assertEqual(+b, -3)
- self.assertTrue(isinstance(+a, int))
-
- self.assertEqual(-a, b)
- self.assertEqual(-a, -3)
- self.assertEqual(-b, a)
- self.assertEqual(-b, 3)
- self.assertTrue(isinstance(-a, int))
-
- def test_to_bytes(self):
- def check(tests, byteorder, signed=False):
- for test, expected in tests.items():
- try:
- self.assertEqual(
- int(test).to_bytes(len(expected), byteorder, signed=signed),
- expected)
- except Exception as err:
- raise_from(AssertionError(
- "failed to convert {0} with byteorder={1} and signed={2}"
- .format(test, byteorder, signed)), err)
-
- # Convert integers to signed big-endian byte arrays.
- tests1 = {
- 0: bytes(b'\x00'),
- 1: bytes(b'\x01'),
- -1: bytes(b'\xff'),
- -127: bytes(b'\x81'),
- -128: bytes(b'\x80'),
- -129: bytes(b'\xff\x7f'),
- 127: bytes(b'\x7f'),
- 129: bytes(b'\x00\x81'),
- -255: bytes(b'\xff\x01'),
- -256: bytes(b'\xff\x00'),
- 255: bytes(b'\x00\xff'),
- 256: bytes(b'\x01\x00'),
- 32767: bytes(b'\x7f\xff'),
- -32768: bytes(b'\xff\x80\x00'),
- 65535: bytes(b'\x00\xff\xff'),
- -65536: bytes(b'\xff\x00\x00'),
- -8388608: bytes(b'\x80\x00\x00')
- }
- check(tests1, 'big', signed=True)
-
- # Convert integers to signed little-endian byte arrays.
- tests2 = {
- 0: bytes(b'\x00'),
- 1: bytes(b'\x01'),
- -1: bytes(b'\xff'),
- -127: bytes(b'\x81'),
- -128: bytes(b'\x80'),
- -129: bytes(b'\x7f\xff'),
- 127: bytes(b'\x7f'),
- 129: bytes(b'\x81\x00'),
- -255: bytes(b'\x01\xff'),
- -256: bytes(b'\x00\xff'),
- 255: bytes(b'\xff\x00'),
- 256: bytes(b'\x00\x01'),
- 32767: bytes(b'\xff\x7f'),
- -32768: bytes(b'\x00\x80'),
- 65535: bytes(b'\xff\xff\x00'),
- -65536: bytes(b'\x00\x00\xff'),
- -8388608: bytes(b'\x00\x00\x80')
- }
- check(tests2, 'little', signed=True)
-
- # Convert integers to unsigned big-endian byte arrays.
- tests3 = {
- 0: bytes(b'\x00'),
- 1: bytes(b'\x01'),
- 127: bytes(b'\x7f'),
- 128: bytes(b'\x80'),
- 255: bytes(b'\xff'),
- 256: bytes(b'\x01\x00'),
- 32767: bytes(b'\x7f\xff'),
- 32768: bytes(b'\x80\x00'),
- 65535: bytes(b'\xff\xff'),
- 65536: bytes(b'\x01\x00\x00')
- }
- check(tests3, 'big', signed=False)
-
- # Convert integers to unsigned little-endian byte arrays.
- tests4 = {
- 0: bytes(b'\x00'),
- 1: bytes(b'\x01'),
- 127: bytes(b'\x7f'),
- 128: bytes(b'\x80'),
- 255: bytes(b'\xff'),
- 256: bytes(b'\x00\x01'),
- 32767: bytes(b'\xff\x7f'),
- 32768: bytes(b'\x00\x80'),
- 65535: bytes(b'\xff\xff'),
- 65536: bytes(b'\x00\x00\x01')
- }
- check(tests4, 'little', signed=False)
-
- self.assertRaises(OverflowError, int(256).to_bytes, 1, 'big', signed=False)
- self.assertRaises(OverflowError, int(256).to_bytes, 1, 'big', signed=True)
- self.assertRaises(OverflowError, int(256).to_bytes, 1, 'little', signed=False)
- self.assertRaises(OverflowError, int(256).to_bytes, 1, 'little', signed=True)
- self.assertRaises(OverflowError, int(-1).to_bytes, 2, 'big', signed=False),
- self.assertRaises(OverflowError, int(-1).to_bytes, 2, 'little', signed=False)
- self.assertEqual(int(0).to_bytes(0, 'big'), b'')
- self.assertEqual(int(1).to_bytes(5, 'big'), b'\x00\x00\x00\x00\x01')
- self.assertEqual(int(0).to_bytes(5, 'big'), b'\x00\x00\x00\x00\x00')
- self.assertEqual(int(-1).to_bytes(5, 'big', signed=True),
- bytes(b'\xff\xff\xff\xff\xff'))
- self.assertRaises(OverflowError, int(1).to_bytes, 0, 'big')
-
- def test_from_bytes(self):
- def check(tests, byteorder, signed=False):
- for test, expected in tests.items():
- try:
- self.assertEqual(
- int.from_bytes(test, byteorder, signed=signed),
- int(expected))
- except Exception as err:
- raise_from(AssertionError(
- "failed to convert {0} with byteorder={1!r} and signed={2}"
- .format(test, byteorder, signed)), err)
-
- # Convert signed big-endian byte arrays to integers.
- tests1 = {
- bytes(b''): 0,
- bytes(b'\x00'): 0,
- bytes(b'\x00\x00'): 0,
- bytes(b'\x01'): 1,
- bytes(b'\x00\x01'): 1,
- bytes(b'\xff'): -1,
- bytes(b'\xff\xff'): -1,
- bytes(b'\x81'): -127,
- bytes(b'\x80'): -128,
- bytes(b'\xff\x7f'): -129,
- bytes(b'\x7f'): 127,
- bytes(b'\x00\x81'): 129,
- bytes(b'\xff\x01'): -255,
- bytes(b'\xff\x00'): -256,
- bytes(b'\x00\xff'): 255,
- bytes(b'\x01\x00'): 256,
- bytes(b'\x7f\xff'): 32767,
- bytes(b'\x80\x00'): -32768,
- bytes(b'\x00\xff\xff'): 65535,
- bytes(b'\xff\x00\x00'): -65536,
- bytes(b'\x80\x00\x00'): -8388608
- }
- # check(tests1, 'big', signed=True)
-
- # Convert signed little-endian byte arrays to integers.
- tests2 = {
- bytes(b''): 0,
- bytes(b'\x00'): 0,
- bytes(b'\x00\x00'): 0,
- bytes(b'\x01'): 1,
- bytes(b'\x00\x01'): 256,
- bytes(b'\xff'): -1,
- bytes(b'\xff\xff'): -1,
- bytes(b'\x81'): -127,
- bytes(b'\x80'): -128,
- bytes(b'\x7f\xff'): -129,
- bytes(b'\x7f'): 127,
- bytes(b'\x81\x00'): 129,
- bytes(b'\x01\xff'): -255,
- bytes(b'\x00\xff'): -256,
- bytes(b'\xff\x00'): 255,
- bytes(b'\x00\x01'): 256,
- bytes(b'\xff\x7f'): 32767,
- bytes(b'\x00\x80'): -32768,
- bytes(b'\xff\xff\x00'): 65535,
- bytes(b'\x00\x00\xff'): -65536,
- bytes(b'\x00\x00\x80'): -8388608
- }
- # check(tests2, 'little', signed=True)
-
- # Convert unsigned big-endian byte arrays to integers.
- tests3 = {
- bytes(b''): 0,
- bytes(b'\x00'): 0,
- bytes(b'\x01'): 1,
- bytes(b'\x7f'): 127,
- bytes(b'\x80'): 128,
- bytes(b'\xff'): 255,
- bytes(b'\x01\x00'): 256,
- bytes(b'\x7f\xff'): 32767,
- bytes(b'\x80\x00'): 32768,
- bytes(b'\xff\xff'): 65535,
- bytes(b'\x01\x00\x00'): 65536,
- }
- check(tests3, 'big', signed=False)
-
- # Convert integers to unsigned little-endian byte arrays.
- tests4 = {
- bytes(b''): 0,
- bytes(b'\x00'): 0,
- bytes(b'\x01'): 1,
- bytes(b'\x7f'): 127,
- bytes(b'\x80'): 128,
- bytes(b'\xff'): 255,
- bytes(b'\x00\x01'): 256,
- bytes(b'\xff\x7f'): 32767,
- bytes(b'\x00\x80'): 32768,
- bytes(b'\xff\xff'): 65535,
- bytes(b'\x00\x00\x01'): 65536,
- }
- check(tests4, 'little', signed=False)
-
- class myint(int):
- pass
-
- if PY2:
- import __builtin__
- oldbytes = __builtin__.bytes
- types = (bytes, oldbytes)
- else:
- types = (bytes,)
- for mytype in types:
- self.assertIs(type(myint.from_bytes(mytype(b'\x00'), 'big')), myint)
- self.assertEqual(myint.from_bytes(mytype(b'\x01'), 'big'), 1)
- self.assertIs(
- type(myint.from_bytes(mytype(b'\x00'), 'big', signed=False)), myint)
- self.assertEqual(myint.from_bytes(mytype(b'\x01'), 'big', signed=False), 1)
- self.assertIs(type(myint.from_bytes(mytype(b'\x00'), 'little')), myint)
- self.assertEqual(myint.from_bytes(mytype(b'\x01'), 'little'), 1)
- self.assertIs(type(myint.from_bytes(
- mytype(b'\x00'), 'little', signed=False)), myint)
- self.assertEqual(myint.from_bytes(mytype(b'\x01'), 'little', signed=False), 1)
- # self.assertEqual(
- # int.from_bytes([255, 0, 0], 'big', signed=True), -65536)
- # self.assertEqual(
- # int.from_bytes((255, 0, 0), 'big', signed=True), -65536)
- # self.assertEqual(int.from_bytes(
- # bytearray(mytype(b'\xff\x00\x00')), 'big', signed=True), -65536)
- # self.assertEqual(int.from_bytes(
- # bytearray(mytype(b'\xff\x00\x00')), 'big', signed=True), -65536)
- # self.assertEqual(int.from_bytes(
- # array.array('B', mytype(b'\xff\x00\x00')), 'big', signed=True), -65536)
- # self.assertEqual(int.from_bytes(
- # memoryview(mytype(b'\xff\x00\x00')), 'big', signed=True), -65536)
-
- self.assertRaises(TypeError, int.from_bytes, u"", 'big')
- self.assertRaises(TypeError, int.from_bytes, u"\x00", 'big')
- self.assertRaises(TypeError, myint.from_bytes, u"", 'big')
- self.assertRaises(TypeError, myint.from_bytes, u"\x00", 'big')
-
- types = (int, lambda x: x) if PY2 else (lambda x: x,)
- for mytype in types:
- self.assertRaises(ValueError, int.from_bytes, [mytype(256)], 'big')
- self.assertRaises(ValueError, int.from_bytes, [mytype(0)], 'big\x00')
- self.assertRaises(ValueError, int.from_bytes, [mytype(0)], 'little\x00')
- self.assertRaises(TypeError, int.from_bytes, mytype(0), 'big')
- # self.assertRaises(TypeError, int.from_bytes, mytype(0), 'big', True)
- self.assertRaises(TypeError, myint.from_bytes, mytype(0), 'big')
- # self.assertRaises(TypeError, int.from_bytes, mytype(0), 'big', True)
-
- @expectedFailurePY2
- def test_multiple_inheritance(self):
- """
- Issue #96 (for newint instead of newobject)
- """
- import collections.abc
-
- class Base(int):
- pass
-
- class Foo(Base, collections.abc.Container):
- def __add__(self, other):
- return 0
-
- @expectedFailurePY2
- def test_with_metaclass_and_int(self):
- """
- Issue #91 (for newint instead of newobject)
- """
- from future.utils import with_metaclass
-
- class MetaClass(type):
- pass
-
- class TestClass(with_metaclass(MetaClass, int)):
- pass
-
-
-if __name__ == "__main__":
- unittest.main()