From 64ef4916ecbb56508b67ec9d6190ef61212f550c Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 13 Mar 2022 03:54:42 +0900 Subject: [PATCH] Update test_int.py to CPython 3.10.2 --- Lib/test/test_int.py | 67 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 58 insertions(+), 9 deletions(-) diff --git a/Lib/test/test_int.py b/Lib/test/test_int.py index 7fc5e15f7..87cde63c7 100644 --- a/Lib/test/test_int.py +++ b/Lib/test/test_int.py @@ -340,8 +340,6 @@ class IntTestCases(unittest.TestCase): def test_string_float(self): self.assertRaises(ValueError, int, '1.2') - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_intconversion(self): # Test __int__() class ClassicMissingMethods: @@ -380,15 +378,23 @@ class IntTestCases(unittest.TestCase): int(ExceptionalTrunc()) for trunc_result_base in (object, Classic): - class Integral(trunc_result_base): - def __int__(self): + class Index(trunc_result_base): + def __index__(self): return 42 class TruncReturnsNonInt(base): def __trunc__(self): - return Integral() - with self.assertWarns(DeprecationWarning): - self.assertEqual(int(TruncReturnsNonInt()), 42) + return Index() + self.assertEqual(int(TruncReturnsNonInt()), 42) + + class Intable(trunc_result_base): + def __int__(self): + return 42 + + class TruncReturnsNonIndex(base): + def __trunc__(self): + return Intable() + self.assertEqual(int(TruncReturnsNonInt()), 42) class NonIntegral(trunc_result_base): def __trunc__(self): @@ -420,6 +426,21 @@ class IntTestCases(unittest.TestCase): with self.assertRaises(TypeError): int(TruncReturnsBadInt()) + def test_int_subclass_with_index(self): + class MyIndex(int): + def __index__(self): + return 42 + + class BadIndex(int): + def __index__(self): + return 42.0 + + my_int = MyIndex(7) + self.assertEqual(my_int, 7) + self.assertEqual(int(my_int), 7) + + self.assertEqual(int(BadIndex()), 0) + def test_int_subclass_with_int(self): class MyInt(int): def __int__(self): @@ -433,11 +454,21 @@ class IntTestCases(unittest.TestCase): self.assertEqual(my_int, 7) self.assertEqual(int(my_int), 42) - self.assertRaises(TypeError, int, BadInt()) + my_int = BadInt(7) + self.assertEqual(my_int, 7) + self.assertRaises(TypeError, int, my_int) # TODO: RUSTPYTHON @unittest.expectedFailure def test_int_returns_int_subclass(self): + class BadIndex: + def __index__(self): + return True + + class BadIndex2(int): + def __index__(self): + return True + class BadInt: def __int__(self): return True @@ -446,6 +477,10 @@ class IntTestCases(unittest.TestCase): def __int__(self): return True + class TruncReturnsBadIndex: + def __trunc__(self): + return BadIndex() + class TruncReturnsBadInt: def __trunc__(self): return BadInt() @@ -454,6 +489,17 @@ class IntTestCases(unittest.TestCase): def __trunc__(self): return True + bad_int = BadIndex() + with self.assertWarns(DeprecationWarning): + n = int(bad_int) + self.assertEqual(n, 1) + self.assertIs(type(n), int) + + bad_int = BadIndex2() + n = int(bad_int) + self.assertEqual(n, 0) + self.assertIs(type(n), int) + bad_int = BadInt() with self.assertWarns(DeprecationWarning): n = int(bad_int) @@ -466,12 +512,15 @@ class IntTestCases(unittest.TestCase): self.assertEqual(n, 1) self.assertIs(type(n), int) - bad_int = TruncReturnsBadInt() + bad_int = TruncReturnsBadIndex() with self.assertWarns(DeprecationWarning): n = int(bad_int) self.assertEqual(n, 1) self.assertIs(type(n), int) + bad_int = TruncReturnsBadInt() + self.assertRaises(TypeError, int, bad_int) + good_int = TruncReturnsIntSubclass() n = int(good_int) self.assertEqual(n, 1)