mirror of https://github.com/python/cpython
Issue #16045: add more unit tests for built-in int()
Patch by Chris Jerdonek.
This commit is contained in:
parent
8e1e8165a3
commit
cddcafaf6b
|
@ -680,6 +680,8 @@ class BuiltinTest(unittest.TestCase):
|
|||
|
||||
# Test input() later, together with raw_input
|
||||
|
||||
# test_int(): see test_int.py for int() tests.
|
||||
|
||||
def test_intern(self):
|
||||
self.assertRaises(TypeError, intern)
|
||||
# This fails if the test is run twice with a constant string,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import sys
|
||||
|
||||
import unittest
|
||||
from test import test_support
|
||||
from test.test_support import run_unittest, have_unicode
|
||||
import math
|
||||
|
||||
|
@ -315,6 +316,59 @@ class IntTestCases(unittest.TestCase):
|
|||
self.assertEqual(int(float(2**54+10)), 2**54+8)
|
||||
self.assertEqual(int(float(2**54+11)), 2**54+12)
|
||||
|
||||
def test_no_args(self):
|
||||
self.assertEquals(int(), 0)
|
||||
|
||||
def test_keyword_args(self):
|
||||
# Test invoking int() using keyword arguments.
|
||||
self.assertEquals(int(x=1.2), 1)
|
||||
self.assertEquals(int('100', base=2), 4)
|
||||
self.assertEquals(int(x='100', base=2), 4)
|
||||
|
||||
def test_valid_non_numeric_input_types_for_x(self):
|
||||
# Test possible valid non-numeric types for x, including subclasses
|
||||
# of the allowed built-in types.
|
||||
class CustomStr(str): pass
|
||||
values = ['100', CustomStr('100')]
|
||||
|
||||
if have_unicode:
|
||||
class CustomUnicode(unicode): pass
|
||||
values += [unicode('100'), CustomUnicode(unicode('100'))]
|
||||
|
||||
for x in values:
|
||||
msg = 'x has value %s and type %s' % (x, type(x).__name__)
|
||||
try:
|
||||
self.assertEquals(int(x), 100, msg=msg)
|
||||
self.assertEquals(int(x, 2), 4, msg=msg)
|
||||
except TypeError, err:
|
||||
raise AssertionError('For %s got TypeError: %s' %
|
||||
(type(x).__name__, err))
|
||||
|
||||
def test_error_on_string_float_for_x(self):
|
||||
self.assertRaises(ValueError, int, '1.2')
|
||||
|
||||
def test_error_on_bytearray_for_x(self):
|
||||
self.assertRaises(TypeError, int, bytearray('100'), 2)
|
||||
|
||||
def test_error_on_invalid_int_bases(self):
|
||||
for base in [-1, 1, 1000]:
|
||||
self.assertRaises(ValueError, int, '100', base)
|
||||
|
||||
def test_error_on_string_base(self):
|
||||
self.assertRaises(TypeError, int, 100, base='foo')
|
||||
# Include the following because in contrast CPython raises no error
|
||||
# for bad integer bases when x is not given.
|
||||
self.assertRaises(TypeError, int, base='foo')
|
||||
|
||||
# For example, PyPy 1.9.0 raised TypeError for these cases because it
|
||||
# expects x to be a string if base is given.
|
||||
@test_support.cpython_only
|
||||
def test_int_base_without_x_returns_0(self):
|
||||
self.assertEquals(int(base=6), 0)
|
||||
# Even invalid bases don't raise an exception.
|
||||
self.assertEquals(int(base=1), 0)
|
||||
self.assertEquals(int(base=1000), 0)
|
||||
|
||||
def test_intconversion(self):
|
||||
# Test __int__()
|
||||
class ClassicMissingMethods:
|
||||
|
|
Loading…
Reference in New Issue