[Python-checkins] cpython (2.7): Issue #16045: add more unit tests for built-in int()

andrew.svetlov python-checkins at python.org
Sun Dec 23 11:52:11 CET 2012


http://hg.python.org/cpython/rev/c502a2dc0345
changeset:   80986:c502a2dc0345
branch:      2.7
parent:      80977:231e4889b117
user:        Andrew Svetlov <andrew.svetlov at gmail.com>
date:        Sun Dec 23 12:44:04 2012 +0200
summary:
  Issue #16045: add more unit tests for built-in int()

Patch by Chris Jerdonek.

files:
  Lib/test/test_builtin.py |   2 +
  Lib/test/test_int.py     |  54 ++++++++++++++++++++++++++++
  2 files changed, 56 insertions(+), 0 deletions(-)


diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -680,6 +680,8 @@
 
     # 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,
diff --git a/Lib/test/test_int.py b/Lib/test/test_int.py
--- a/Lib/test/test_int.py
+++ b/Lib/test/test_int.py
@@ -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 @@
         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:

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list