Skip to content

Multiple test failures with PyPy 7.2.0 #530

Description

@mgorny

Since this became a dep for PyContracts, I've tried running the tests on PyPy 7.2.0, and I've gotten a number of test failures:

==================================================================== FAILURES =====================================================================
____________________________________________________________ TestChainMap.test_basics _____________________________________________________________

self = <test_future.test_backports.TestChainMap testMethod=test_basics>

    def test_basics(self):
        c = ChainMap()
        c['a'] = 1
        c['b'] = 2
        d = c.new_child()
        d['b'] = 20
        d['c'] = 30
        self.assertEqual(d.maps, [{'b':20, 'c':30}, {'a':1, 'b':2}])  # check internal state
>       self.assertEqual(d.items(), dict(a=1, b=20, c=30).items())    # check items/iter/getitem
E       AssertionError: Lists differ: [('b', 20), ('c', 30), ('a', 1... != [('a', 1), ('b', 20), ('c', 30...
E       
E       First differing element 0:
E       ('b', 20)
E       ('a', 1)
E       
E       - [('b', 20), ('c', 30), ('a', 1)]
E       + [('a', 1), ('b', 20), ('c', 30)]

tests/test_future/test_backports.py:90: AssertionError
__________________________________________________________ BuiltinTest.test_exec_globals __________________________________________________________

self = <test_future.test_builtins.BuiltinTest testMethod=test_exec_globals>

    def test_exec_globals(self):
        code = compile("print('Hello World!')", "", "exec")
        # no builtin function
        # Was:
        # self.assertRaisesRegex(NameError, "name 'print' is not defined",
        #                        exec_, code, {'__builtins__': {}})
        # Now:
        self.assertRaises(NameError,
>                         exec_, code, {'__builtins__': {}})
E       AssertionError: NameError not raised

tests/test_future/test_builtins.py:788: AssertionError
-------------------------------------------------------------- Captured stdout call ---------------------------------------------------------------
Hello World!
__________________________________________________________ BuiltinTest.test_general_eval __________________________________________________________

self = <test_future.test_builtins.BuiltinTest testMethod=test_general_eval>

    def test_general_eval(self):
        # Tests that general mappings can be used for the locals argument
    
        class M:
            "Test mapping interface versus possible calls from eval()."
            def __getitem__(self, key):
                if key == 'a':
                    return 12
                raise KeyError
            def keys(self):
                return list('xyz')
    
        m = M()
        g = globals()
        self.assertEqual(eval('a', g, m), 12)
        self.assertRaises(NameError, eval, 'b', g, m)
        self.assertEqual(eval('dir()', g, m), list('xyz'))
        self.assertEqual(eval('globals()', g, m), g)
        self.assertEqual(eval('locals()', g, m), m)
>       self.assertRaises(TypeError, eval, 'a', m)
E       AssertionError: TypeError not raised

tests/test_future/test_builtins.py:702: AssertionError
____________________________________________ TestIsInstanceIsSubclass.test_isinstance_recursion_limit _____________________________________________

self = <test_future.test_isinstance.TestIsInstanceIsSubclass testMethod=test_isinstance_recursion_limit>

    def test_isinstance_recursion_limit(self):
        # make sure that issubclass raises RuntimeError before the C stack is
        # blown
>       self.assertRaises(RuntimeError, blowstack, isinstance, '', str)
E       AssertionError: RuntimeError not raised

tests/test_future/test_isinstance.py:275: AssertionError
_____________________________________________ TestIsInstanceIsSubclass.test_subclass_recursion_limit ______________________________________________

self = <test_future.test_isinstance.TestIsInstanceIsSubclass testMethod=test_subclass_recursion_limit>

    def test_subclass_recursion_limit(self):
        # make sure that issubclass raises RuntimeError before the C stack is
        # blown
>       self.assertRaises(RuntimeError, blowstack, issubclass, str, str)
E       AssertionError: RuntimeError not raised

tests/test_future/test_isinstance.py:270: AssertionError
________________________________________________________________ TestStr.test_mul _________________________________________________________________

self = <test_future.test_str.TestStr testMethod=test_mul>

    def test_mul(self):
        s = str(u'ABC')
        c = s * 4
        self.assertTrue(isinstance(c, str))
        self.assertEqual(c, u'ABCABCABCABC')
        d = s * int(4)
        self.assertTrue(isinstance(d, str))
        self.assertEqual(d, u'ABCABCABCABC')
        if utils.PY2:
            e = s * long(4)
            self.assertTrue(isinstance(e, str))
            self.assertEqual(e, u'ABCABCABCABC')
        with self.assertRaises(TypeError):
>           s * 3.3
E           AssertionError: TypeError not raised

tests/test_future/test_str.py:434: AssertionError
________________________________________________________________ TestStr.test_rmul ________________________________________________________________

self = <test_future.test_str.TestStr testMethod=test_rmul>

    def test_rmul(self):
        s = str(u'XYZ')
        c = 3 * s
        self.assertTrue(isinstance(c, str))
        self.assertEqual(c, u'XYZXYZXYZ')
        d = s * int(3)
        self.assertTrue(isinstance(d, str))
        self.assertEqual(d, u'XYZXYZXYZ')
        if utils.PY2:
            e = long(3) * s
            self.assertTrue(isinstance(e, str))
            self.assertEqual(e, u'XYZXYZXYZ')
        with self.assertRaises(TypeError):
>           3.3 * s
E           AssertionError: TypeError not raised

tests/test_future/test_str.py:451: AssertionError
_______________________________________________________ TestStr.test_str_join_staticmethod ________________________________________________________

self = <test_future.test_str.TestStr testMethod=test_str_join_staticmethod>

    def test_str_join_staticmethod(self):
        """
        Issue #33
        """
>       c = str.join('-', ['a', 'b'])
E       TypeError: unbound method join() must be called with newstr instance as first argument (got unicode instance instead)

tests/test_future/test_str.py:208: TypeError
__________________________________________________________ BuiltinTest.test_general_eval __________________________________________________________

self = <test_past.test_builtins.BuiltinTest testMethod=test_general_eval>

    @expectedFailurePY3
    def test_general_eval(self):
        # Tests that general mappings can be used for the locals argument
    
        class M:
            "Test mapping interface versus possible calls from eval()."
            def __getitem__(self, key):
                if key == 'a':
                    return 12
                raise KeyError
            def keys(self):
                return list('xyz')
    
        m = M()
        g = globals()
        self.assertEqual(eval('a', g, m), 12)
        self.assertRaises(NameError, eval, 'b', g, m)
        self.assertEqual(eval('dir()', g, m), list('xyz'))
        self.assertEqual(eval('globals()', g, m), g)
        self.assertEqual(eval('locals()', g, m), m)
>       self.assertRaises(TypeError, eval, 'a', m)
E       AssertionError: TypeError not raised

tests/test_past/test_builtins.py:445: AssertionError
_____________________________________________________________ BuiltinTest.test_range ______________________________________________________________

self = <test_past.test_builtins.BuiltinTest testMethod=test_range>

    @skip26
    @expectedFailurePY3
    def test_range(self):
        self.assertEqual(range(3), [0, 1, 2])
        self.assertEqual(range(1, 5), [1, 2, 3, 4])
        self.assertEqual(range(0), [])
        self.assertEqual(range(-3), [])
        self.assertEqual(range(1, 10, 3), [1, 4, 7])
        self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
    
        # Now test range() with longs
        self.assertEqual(range(-2**100), [])
        self.assertEqual(range(0, -2**100), [])
        self.assertEqual(range(0, 2**100, -1), [])
        self.assertEqual(range(0, 2**100, -1), [])
    
        a = long(10 * sys.maxsize)
        b = long(100 * sys.maxsize)
        c = long(50 * sys.maxsize)
    
        self.assertEqual(range(a, a+2), [a, a+1])
        self.assertEqual(range(a+2, a, -1), [a+2, a+1])
        self.assertEqual(range(a+4, a, -2), [a+4, a+2])
    
        seq = range(a, b, c)
        self.assertIn(a, seq)
        self.assertNotIn(b, seq)
        self.assertEqual(len(seq), 2)
    
        seq = range(b, a, -c)
        self.assertIn(b, seq)
        self.assertNotIn(a, seq)
        self.assertEqual(len(seq), 2)
    
        seq = range(-a, -b, -c)
        self.assertIn(-a, seq)
        self.assertNotIn(-b, seq)
        self.assertEqual(len(seq), 2)
    
        self.assertRaises(TypeError, range)
        self.assertRaises(TypeError, range, 1, 2, 3, 4)
        self.assertRaises(ValueError, range, 1, 2, 0)
        self.assertRaises(ValueError, range, a, a + 1, long(0))
    
        class badzero(int):
            def __cmp__(self, other):
                raise RuntimeError
            __hash__ = None # Invalid cmp makes this unhashable
>       self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
E       AssertionError: RuntimeError not raised

tests/test_past/test_builtins.py:1177: AssertionError
_______________________________________________________ Py2DictTest.test_setdefault_atomic ________________________________________________________

self = <test_past.test_olddict.Py2DictTest testMethod=test_setdefault_atomic>

    @skip26
    def test_setdefault_atomic(self):
        # Issue #13521: setdefault() calls __hash__ and __eq__ only once.
        class Hashed(object):
            def __init__(self):
                self.hash_count = 0
                self.eq_count = 0
            def __hash__(self):
                self.hash_count += 1
                return 42
            def __eq__(self, other):
                self.eq_count += 1
                return id(self) == id(other)
        hashed1 = Hashed()
        y = dict({hashed1: 5})
        hashed2 = Hashed()
        y.setdefault(hashed2, [])
>       self.assertEqual(hashed1.hash_count, 1)
E       AssertionError: 2 != 1

tests/test_past/test_olddict.py:434: AssertionError
======================================== 11 failed, 1017 passed, 36 skipped, 62 xfailed in 209.78 seconds =========================================

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions