From ff85fc925717e88adcc24fab2aa937f2fe9bfba5 Mon Sep 17 00:00:00 2001 From: Jeong Yunwon Date: Wed, 4 May 2022 00:32:25 +0900 Subject: [PATCH] rename extra_tests to prefix form --- extra_tests/snippets/builtin_complex.py | 16 ++ .../snippets/{exit.py => builtin_exit.py} | 0 .../snippets/{hash.py => builtin_hash.py} | 0 .../snippets/{none.py => builtin_none.py} | 0 .../snippets/{object.py => builtin_object.py} | 0 .../{printing.py => builtin_print.py} | 0 .../{property.py => builtin_property.py} | 0 .../snippets/{set.py => builtin_set.py} | 0 extra_tests/snippets/builtin_slice.py | 169 +++++++++++++----- .../{encoding.py => builtin_str_encode.py} | 0 ...ubclass_str.py => builtin_str_subclass.py} | 0 .../{unicode_fu.py => builtin_str_unicode.py} | 0 ...licing.py => builtin_str_unicode_slice.py} | 0 extra_tests/snippets/builtin_type.py | 120 +++++++++++++ .../snippets/{mro.py => builtin_type_mro.py} | 0 extra_tests/snippets/comparisons.py | 23 --- extra_tests/snippets/complex.py | 15 -- extra_tests/snippets/derived_mc.py | 45 ----- .../{code.py => example_interactive.py} | 2 +- extra_tests/snippets/minimum.py | 1 - .../{operator.py => operator_arithmetic.py} | 0 .../snippets/{cast.py => operator_cast.py} | 0 extra_tests/snippets/operator_comparison.py | 25 +++ .../{inplace_ops.py => operator_inplace.py} | 0 .../{callables.py => protocol_callable.py} | 0 ...{bad_indexing.py => protocol_index_bad.py} | 0 .../{iterable.py => protocol_iterable.py} | 0 .../{iterations.py => protocol_iternext.py} | 0 extra_tests/snippets/slice.py | 130 -------------- .../{numbers.py => stdlib_abc_number.py} | 0 .../{ast_snippet.py => stdlib_ast.py} | 0 .../{deque.py => stdlib_collections_deque.py} | 0 .../{module.py => stdlib_dir_module.py} | 0 .../{json_snippet.py => stdlib_json.py} | 0 .../{getframe.py => stdlib_sys_getframe.py} | 0 .../{test_warnings.py => stdlib_warnings.py} | 0 .../{weakrefs.py => stdlib_weakref.py} | 0 .../{assignment.py => syntax_assignment.py} | 0 .../{async_stuff.py => syntax_async.py} | 0 .../snippets/{attr.py => syntax_attr.py} | 0 ...nction_nested.py => syntax_call_nested.py} | 0 .../snippets/{commas.py => syntax_comma.py} | 0 .../{comments.py => syntax_comment.py} | 0 ...prehensions.py => syntax_comprehension.py} | 0 .../{decorators.py => syntax_decorator.py} | 0 .../snippets/{delete.py => syntax_del.py} | 0 .../snippets/{for.py => syntax_for.py} | 0 .../{func_defaults.py => syntax_function.py} | 0 .../{function.py => syntax_function2.py} | 0 ...nction_args.py => syntax_function_args.py} | 0 .../{funky_syntax.py => syntax_funky.py} | 0 .../{generators.py => syntax_generator.py} | 0 ..._nonlocal.py => syntax_global_nonlocal.py} | 0 extra_tests/snippets/{if.py => syntax_if.py} | 0 ...expressions.py => syntax_if_expression.py} | 0 .../{indentation.py => syntax_indent.py} | 0 .../{invalid_syntax.py => syntax_invalid.py} | 0 .../{literals.py => syntax_literal.py} | 0 extra_tests/snippets/syntax_metaclass.py | 46 +++++ ..._flow.py => syntax_nested_control_flow.py} | 0 ...l_eval.py => syntax_short_circuit_bool.py} | 0 ...py => syntax_short_circuit_evaluations.py} | 0 extra_tests/snippets/syntax_slice.py | 47 +++++ .../{statements.py => syntax_statement.py} | 0 .../{try_exceptions.py => syntax_try.py} | 0 .../{type_hints.py => syntax_type_hint.py} | 0 .../snippets/{loop.py => syntax_while.py} | 0 .../snippets/{with.py => syntax_with.py} | 0 extra_tests/snippets/types_snippet.py | 118 ------------ extra_tests/snippets/variables.py | 4 - 70 files changed, 383 insertions(+), 378 deletions(-) rename extra_tests/snippets/{exit.py => builtin_exit.py} (100%) rename extra_tests/snippets/{hash.py => builtin_hash.py} (100%) rename extra_tests/snippets/{none.py => builtin_none.py} (100%) rename extra_tests/snippets/{object.py => builtin_object.py} (100%) rename extra_tests/snippets/{printing.py => builtin_print.py} (100%) rename extra_tests/snippets/{property.py => builtin_property.py} (100%) rename extra_tests/snippets/{set.py => builtin_set.py} (100%) rename extra_tests/snippets/{encoding.py => builtin_str_encode.py} (100%) rename extra_tests/snippets/{subclass_str.py => builtin_str_subclass.py} (100%) rename extra_tests/snippets/{unicode_fu.py => builtin_str_unicode.py} (100%) rename extra_tests/snippets/{unicode_slicing.py => builtin_str_unicode_slice.py} (100%) rename extra_tests/snippets/{mro.py => builtin_type_mro.py} (100%) delete mode 100644 extra_tests/snippets/comparisons.py delete mode 100644 extra_tests/snippets/complex.py delete mode 100644 extra_tests/snippets/derived_mc.py rename extra_tests/snippets/{code.py => example_interactive.py} (95%) delete mode 100644 extra_tests/snippets/minimum.py rename extra_tests/snippets/{operator.py => operator_arithmetic.py} (100%) rename extra_tests/snippets/{cast.py => operator_cast.py} (100%) rename extra_tests/snippets/{inplace_ops.py => operator_inplace.py} (100%) rename extra_tests/snippets/{callables.py => protocol_callable.py} (100%) rename extra_tests/snippets/{bad_indexing.py => protocol_index_bad.py} (100%) rename extra_tests/snippets/{iterable.py => protocol_iterable.py} (100%) rename extra_tests/snippets/{iterations.py => protocol_iternext.py} (100%) delete mode 100644 extra_tests/snippets/slice.py rename extra_tests/snippets/{numbers.py => stdlib_abc_number.py} (100%) rename extra_tests/snippets/{ast_snippet.py => stdlib_ast.py} (100%) rename extra_tests/snippets/{deque.py => stdlib_collections_deque.py} (100%) rename extra_tests/snippets/{module.py => stdlib_dir_module.py} (100%) rename extra_tests/snippets/{json_snippet.py => stdlib_json.py} (100%) rename extra_tests/snippets/{getframe.py => stdlib_sys_getframe.py} (100%) rename extra_tests/snippets/{test_warnings.py => stdlib_warnings.py} (100%) rename extra_tests/snippets/{weakrefs.py => stdlib_weakref.py} (100%) rename extra_tests/snippets/{assignment.py => syntax_assignment.py} (100%) rename extra_tests/snippets/{async_stuff.py => syntax_async.py} (100%) rename extra_tests/snippets/{attr.py => syntax_attr.py} (100%) rename extra_tests/snippets/{function_nested.py => syntax_call_nested.py} (100%) rename extra_tests/snippets/{commas.py => syntax_comma.py} (100%) rename extra_tests/snippets/{comments.py => syntax_comment.py} (100%) rename extra_tests/snippets/{comprehensions.py => syntax_comprehension.py} (100%) rename extra_tests/snippets/{decorators.py => syntax_decorator.py} (100%) rename extra_tests/snippets/{delete.py => syntax_del.py} (100%) rename extra_tests/snippets/{for.py => syntax_for.py} (100%) rename extra_tests/snippets/{func_defaults.py => syntax_function.py} (100%) rename extra_tests/snippets/{function.py => syntax_function2.py} (100%) rename extra_tests/snippets/{function_args.py => syntax_function_args.py} (100%) rename extra_tests/snippets/{funky_syntax.py => syntax_funky.py} (100%) rename extra_tests/snippets/{generators.py => syntax_generator.py} (100%) rename extra_tests/snippets/{global_nonlocal.py => syntax_global_nonlocal.py} (100%) rename extra_tests/snippets/{if.py => syntax_if.py} (100%) rename extra_tests/snippets/{if_expressions.py => syntax_if_expression.py} (100%) rename extra_tests/snippets/{indentation.py => syntax_indent.py} (100%) rename extra_tests/snippets/{invalid_syntax.py => syntax_invalid.py} (100%) rename extra_tests/snippets/{literals.py => syntax_literal.py} (100%) rename extra_tests/snippets/{control_flow.py => syntax_nested_control_flow.py} (100%) rename extra_tests/snippets/{extra_bool_eval.py => syntax_short_circuit_bool.py} (100%) rename extra_tests/snippets/{short_circuit_evaluations.py => syntax_short_circuit_evaluations.py} (100%) create mode 100644 extra_tests/snippets/syntax_slice.py rename extra_tests/snippets/{statements.py => syntax_statement.py} (100%) rename extra_tests/snippets/{try_exceptions.py => syntax_try.py} (100%) rename extra_tests/snippets/{type_hints.py => syntax_type_hint.py} (100%) rename extra_tests/snippets/{loop.py => syntax_while.py} (100%) rename extra_tests/snippets/{with.py => syntax_with.py} (100%) delete mode 100644 extra_tests/snippets/types_snippet.py delete mode 100644 extra_tests/snippets/variables.py diff --git a/extra_tests/snippets/builtin_complex.py b/extra_tests/snippets/builtin_complex.py index 58c9b5384..61dc70712 100644 --- a/extra_tests/snippets/builtin_complex.py +++ b/extra_tests/snippets/builtin_complex.py @@ -1,3 +1,4 @@ +import testutils from testutils import assert_raises # __abs__ @@ -209,3 +210,18 @@ assert complex("( -j)") == -1j assert complex('1e-500') == 0.0 + 0.0j assert complex('-1e-500j') == 0.0 - 0.0j assert complex('-1e-500+1e-500j') == -0.0 + 0.0j + + +# __complex__ +def test__complex__(): + z = 3 + 4j + assert z.__complex__() == z + assert type(z.__complex__()) == complex + + class complex_subclass(complex): + pass + z = complex_subclass(3 + 4j) + assert z.__complex__() == 3 + 4j + assert type(z.__complex__()) == complex + +testutils.skip_if_unsupported(3, 11, test__complex__) diff --git a/extra_tests/snippets/exit.py b/extra_tests/snippets/builtin_exit.py similarity index 100% rename from extra_tests/snippets/exit.py rename to extra_tests/snippets/builtin_exit.py diff --git a/extra_tests/snippets/hash.py b/extra_tests/snippets/builtin_hash.py similarity index 100% rename from extra_tests/snippets/hash.py rename to extra_tests/snippets/builtin_hash.py diff --git a/extra_tests/snippets/none.py b/extra_tests/snippets/builtin_none.py similarity index 100% rename from extra_tests/snippets/none.py rename to extra_tests/snippets/builtin_none.py diff --git a/extra_tests/snippets/object.py b/extra_tests/snippets/builtin_object.py similarity index 100% rename from extra_tests/snippets/object.py rename to extra_tests/snippets/builtin_object.py diff --git a/extra_tests/snippets/printing.py b/extra_tests/snippets/builtin_print.py similarity index 100% rename from extra_tests/snippets/printing.py rename to extra_tests/snippets/builtin_print.py diff --git a/extra_tests/snippets/property.py b/extra_tests/snippets/builtin_property.py similarity index 100% rename from extra_tests/snippets/property.py rename to extra_tests/snippets/builtin_property.py diff --git a/extra_tests/snippets/set.py b/extra_tests/snippets/builtin_set.py similarity index 100% rename from extra_tests/snippets/set.py rename to extra_tests/snippets/builtin_set.py diff --git a/extra_tests/snippets/builtin_slice.py b/extra_tests/snippets/builtin_slice.py index 6c2dd847b..71ab7cbde 100644 --- a/extra_tests/snippets/builtin_slice.py +++ b/extra_tests/snippets/builtin_slice.py @@ -1,51 +1,138 @@ from testutils import assert_raises +a = slice(10) +assert a.start == None +assert a.stop == 10 +assert a.step == None + +a = slice(0, 10, 1) +assert a.start == 0 +assert a.stop == 10 +assert a.step == 1 + +assert slice(10).__repr__() == 'slice(None, 10, None)' +assert slice(None).__repr__() == 'slice(None, None, None)' +assert slice(0, 10, 13).__repr__() == 'slice(0, 10, 13)' +assert slice('0', 1.1, 2+3j).__repr__() == "slice('0', 1.1, (2+3j))" + +assert slice(10) == slice(10) +assert slice(-1) != slice(1) +assert slice(0, 10, 3) != slice(0, 11, 3) +assert slice(0, None, 3) != slice(0, 'a', 3) +assert slice(0, 'a', 3) == slice(0, 'a', 3) + +assert slice(0, 0, 0).__eq__(slice(0, 0, 0)) +assert not slice(0, 0, 1).__eq__(slice(0, 0, 0)) +assert not slice(0, 1, 0).__eq__(slice(0, 0, 0)) +assert not slice(1, 0, 0).__eq__(slice(0, 0, 0)) +assert slice(1, 0, 0).__ne__(slice(0, 0, 0)) +assert slice(0, 1, 0).__ne__(slice(0, 0, 0)) +assert slice(0, 0, 1).__ne__(slice(0, 0, 0)) + +assert slice(0).__eq__(0) == NotImplemented +assert slice(0).__ne__(0) == NotImplemented +assert slice(None).__ne__(slice(0)) + +# slice gt, ge, lt, le +assert_raises(TypeError, lambda: slice(0, slice(), 0) < slice(0, 0, 0)) +assert_raises(TypeError, lambda: slice(0, slice(), 0) <= slice(0, 0, 0)) +assert_raises(TypeError, lambda: slice(0, slice(), 0) > slice(0, 0, 0)) +assert_raises(TypeError, lambda: slice(0, slice(), 0) >= slice(0, 0, 0)) + +assert_raises(TypeError, lambda: slice(0, 0, 0) < slice(0, 0, slice())) +assert_raises(TypeError, lambda: slice(0, 0, 0) <= slice(0, 0, slice())) +assert_raises(TypeError, lambda: slice(0, 0, 0) > slice(0, 0, slice())) +assert_raises(TypeError, lambda: slice(0, 0, 0) >= slice(0, 0, slice())) + +assert_raises(TypeError, lambda: slice(0, 0) >= slice(0, 0, 0)) +assert_raises(TypeError, lambda: slice(0, 0) <= slice(0, 0, 0)) +assert_raises(TypeError, lambda: slice(0, 0) < slice(0, 0, 0)) +assert_raises(TypeError, lambda: slice(0, 0) > slice(0, 0, 0)) + +assert slice(0, 0, 0) < slice(0, 1, -1) +assert slice(0, 0, 0) < slice(0, 0, 1) +assert slice(0, 0, 0) > slice(0, 0, -1) +assert slice(0, 0, 0) >= slice(0, 0, -1) +assert not slice(0, 0, 0) <= slice(0, 0, -1) + +assert slice(0, 0, 0) > slice(0, -1, 1) +assert slice(0, 0, 0) >= slice(0, -1, 1) +assert slice(0, 0, 0) >= slice(0, -1, 1) + +assert slice(0, 0, 0) <= slice(0, 0, 1) +assert slice(0, 0, 0) <= slice(0, 0, 0) +assert slice(0, 0, 0) <= slice(0, 0, 0) +assert not slice(0, 0, 0) > slice(0, 0, 0) +assert not slice(0, 0, 0) < slice(0, 0, 0) + +assert not slice(0, float('nan'), float('nan')) <= slice(0, float('nan'), 1) +assert not slice(0, float('nan'), float('nan')) <= slice(0, float('nan'), float('nan')) +assert not slice(0, float('nan'), float('nan')) >= slice(0, float('nan'), float('nan')) +assert not slice(0, float('nan'), float('nan')) < slice(0, float('nan'), float('nan')) +assert not slice(0, float('nan'), float('nan')) > slice(0, float('nan'), float('nan')) + +assert slice(0, float('inf'), float('inf')) >= slice(0, float('inf'), 1) +assert slice(0, float('inf'), float('inf')) <= slice(0, float('inf'), float('inf')) +assert slice(0, float('inf'), float('inf')) >= slice(0, float('inf'), float('inf')) +assert not slice(0, float('inf'), float('inf')) < slice(0, float('inf'), float('inf')) +assert not slice(0, float('inf'), float('inf')) > slice(0, float('inf'), float('inf')) + +assert_raises(TypeError, lambda: slice(0) < 3) +assert_raises(TypeError, lambda: slice(0) > 3) +assert_raises(TypeError, lambda: slice(0) <= 3) +assert_raises(TypeError, lambda: slice(0) >= 3) + +assert_raises(TypeError, hash, slice(0)) +assert_raises(TypeError, hash, slice(None)) + +def dict_slice(): + d = {} + d[slice(0)] = 3 + +assert_raises(TypeError, dict_slice) + +assert slice(None ).indices(10) == (0, 10, 1) +assert slice(None, None, 2).indices(10) == (0, 10, 2) +assert slice(1, None, 2).indices(10) == (1, 10, 2) +assert slice(None, None, -1).indices(10) == (9, -1, -1) +assert slice(None, None, -2).indices(10) == (9, -1, -2) +assert slice(3, None, -2).indices(10) == (3, -1, -2) + +# issue 3004 tests +assert slice(None, -9).indices(10) == (0, 1, 1) +assert slice(None, -10).indices(10) == (0, 0, 1) +assert slice(None, -11).indices(10) == (0, 0, 1) +assert slice(None, -10, -1).indices(10) == (9, 0, -1) +assert slice(None, -11, -1).indices(10) == (9, -1, -1) +assert slice(None, -12, -1).indices(10) == (9, -1, -1) +assert slice(None, 9).indices(10) == (0, 9, 1) +assert slice(None, 10).indices(10) == (0, 10, 1) +assert slice(None, 11).indices(10) == (0, 10, 1) +assert slice(None, 8, -1).indices(10) == (9, 8, -1) +assert slice(None, 9, -1).indices(10) == (9, 9, -1) +assert slice(None, 10, -1).indices(10) == (9, 9, -1) + +assert \ + slice(-100, 100).indices(10) == \ + slice(None ).indices(10) + +assert \ + slice(100, -100, -1).indices(10) == \ + slice(None, None, -1).indices(10) + +assert slice(-100, 100, 2).indices(10) == (0, 10, 2) + +try: + slice(None, None, 0) + assert "zero step" == "throws an exception" +except: + pass + a = [] -assert a[:] == [] -assert a[: 2 ** 100] == [] -assert a[-2 ** 100 :] == [] -assert a[:: 2 ** 100] == [] -assert a[10:20] == [] -assert a[-20:-10] == [] - b = [1, 2] - -assert b[:] == [1, 2] -assert b[slice(None)] == [1, 2] -assert b[: 2 ** 100] == [1, 2] -assert b[-2 ** 100 :] == [1, 2] -assert b[2 ** 100 :] == [] -assert b[:: 2 ** 100] == [1] -assert b[-10:1] == [1] -assert b[0:0] == [] -assert b[1:0] == [] - -assert_raises(ValueError, lambda: b[::0], _msg='zero step slice') - -assert b[::-1] == [2, 1] -assert b[1::-1] == [2, 1] -assert b[0::-1] == [1] -assert b[0:-5:-1] == [1] -assert b[:0:-1] == [2] -assert b[5:0:-1] == [2] - c = list(range(10)) - -assert c[9:6:-3] == [9] -assert c[9::-3] == [9, 6, 3, 0] -assert c[9::-4] == [9, 5, 1] -assert c[8 :: -2 ** 100] == [8] - -assert c[7:7:-2] == [] -assert c[7:8:-2] == [] - d = "123456" -assert d[3::-1] == "4321" -assert d[4::-3] == "52" - -assert [1, 2, 3, 5, 6][-1:-5:-1] == [6, 5, 3, 2] # #746 - slice_a = slice(5) assert slice_a.start is None assert slice_a.stop == 5 diff --git a/extra_tests/snippets/encoding.py b/extra_tests/snippets/builtin_str_encode.py similarity index 100% rename from extra_tests/snippets/encoding.py rename to extra_tests/snippets/builtin_str_encode.py diff --git a/extra_tests/snippets/subclass_str.py b/extra_tests/snippets/builtin_str_subclass.py similarity index 100% rename from extra_tests/snippets/subclass_str.py rename to extra_tests/snippets/builtin_str_subclass.py diff --git a/extra_tests/snippets/unicode_fu.py b/extra_tests/snippets/builtin_str_unicode.py similarity index 100% rename from extra_tests/snippets/unicode_fu.py rename to extra_tests/snippets/builtin_str_unicode.py diff --git a/extra_tests/snippets/unicode_slicing.py b/extra_tests/snippets/builtin_str_unicode_slice.py similarity index 100% rename from extra_tests/snippets/unicode_slicing.py rename to extra_tests/snippets/builtin_str_unicode_slice.py diff --git a/extra_tests/snippets/builtin_type.py b/extra_tests/snippets/builtin_type.py index aa4fb31ee..d9cd39b3a 100644 --- a/extra_tests/snippets/builtin_type.py +++ b/extra_tests/snippets/builtin_type.py @@ -100,6 +100,126 @@ assert D.__module__ == 'd' assert D.__qualname__ == 'DD' +from testutils import assert_raises + +import platform +if platform.python_implementation() == 'RustPython': + gc = None +else: + import gc + +assert type(type) is type +assert type(object) is type +assert type(object()) is object + +new_type = type('New', (object,), {}) + +assert type(new_type) is type +assert type(new_type()) is new_type + +metaclass = type('MCl', (type,), {}) +cls = metaclass('Cls', (object,), {}) +inst = cls() + +assert type(inst) is cls +assert type(cls) is metaclass +assert type(metaclass) is type + +assert issubclass(metaclass, type) +assert isinstance(cls, type) + +assert inst.__class__ is cls +assert cls.__class__ is metaclass +assert metaclass.__class__ is type +assert type.__class__ is type +assert None.__class__ is type(None) + +assert isinstance(type, type) +assert issubclass(type, type) + +assert not isinstance(type, (int, float)) +assert isinstance(type, (int, object)) + +assert not issubclass(type, (int, float)) +assert issubclass(type, (int, type)) + +class A: pass +class B(A): pass +class C(A): pass +class D(B, C): pass + +assert A.__subclasses__() == [B, C] +assert B.__subclasses__() == [D] +assert C.__subclasses__() == [D] +assert D.__subclasses__() == [] + +assert D.__bases__ == (B, C) +assert A.__bases__ == (object,) +assert B.__bases__ == (A,) + + +del D + +if gc: + # gc sweep is needed here for CPython... + gc.collect() + # ...while RustPython doesn't have `gc` yet. + +if gc: + # D.__new__ is a method bound to the D type, so just deleting D + # from globals won't actually invalidate the weak reference that + # subclasses holds. TODO: implement a proper tracing gc + assert B.__subclasses__() == [] + assert C.__subclasses__() == [] + +assert type in object.__subclasses__() + +assert cls.__name__ == 'Cls' + +# mro +assert int.mro() == [int, object] +assert bool.mro() == [bool, int, object] +assert object.mro() == [object] + +class A: + pass + +class B(A): + pass + +assert A.mro() == [A, object] +assert B.mro() == [B, A, object] + +class AA: + pass + +class BB(AA): + pass + +class C(B, BB): + pass + +assert C.mro() == [C, B, A, BB, AA, object] + + +assert type(Exception.args).__name__ == 'getset_descriptor' +assert type(None).__bool__(None) is False + +class A: + pass + +class B: + pass + +a = A() +a.__class__ = B +assert isinstance(a, B) + +b = 1 +with assert_raises(TypeError): + b.__class__ = B + + # Regression to # https://github.com/RustPython/RustPython/issues/2310 import builtins diff --git a/extra_tests/snippets/mro.py b/extra_tests/snippets/builtin_type_mro.py similarity index 100% rename from extra_tests/snippets/mro.py rename to extra_tests/snippets/builtin_type_mro.py diff --git a/extra_tests/snippets/comparisons.py b/extra_tests/snippets/comparisons.py deleted file mode 100644 index d68dcaf3e..000000000 --- a/extra_tests/snippets/comparisons.py +++ /dev/null @@ -1,23 +0,0 @@ -from testutils import assert_raises - -assert 1 < 2 -assert 1 < 2 < 3 -assert 5 == 5 == 5 -assert (5 == 5) == True -assert 5 == 5 != 4 == 4 > 3 > 2 < 3 <= 3 != 0 == 0 - -assert not 1 > 2 -assert not 5 == 5 == True -assert not 5 == 5 != 5 == 5 -assert not 1 < 2 < 3 > 4 -assert not 1 < 2 > 3 < 4 -assert not 1 > 2 < 3 < 4 - -def test_type_error(x, y): - assert_raises(TypeError, lambda: x < y) - assert_raises(TypeError, lambda: x <= y) - assert_raises(TypeError, lambda: x > y) - assert_raises(TypeError, lambda: x >= y) - -test_type_error([], 0) -test_type_error((), 0) diff --git a/extra_tests/snippets/complex.py b/extra_tests/snippets/complex.py deleted file mode 100644 index 6858a1521..000000000 --- a/extra_tests/snippets/complex.py +++ /dev/null @@ -1,15 +0,0 @@ -import testutils - -# __complex__ -def test__complex__(): - z = 3 + 4j - assert z.__complex__() == z - assert type(z.__complex__()) == complex - - class complex_subclass(complex): - pass - z = complex_subclass(3 + 4j) - assert z.__complex__() == 3 + 4j - assert type(z.__complex__()) == complex - -testutils.skip_if_unsupported(3,11,test__complex__) \ No newline at end of file diff --git a/extra_tests/snippets/derived_mc.py b/extra_tests/snippets/derived_mc.py deleted file mode 100644 index 31bf5f703..000000000 --- a/extra_tests/snippets/derived_mc.py +++ /dev/null @@ -1,45 +0,0 @@ -class MC(type): - pass - -class MC2(MC): - pass - -class MC3(type): - pass - -class A(): - pass - -assert type(A) == type - -class B(metaclass=MC): - pass - -assert type(B) == MC - -class C(B): - pass - -assert type(C) == MC - -class D(metaclass=MC2): - pass - -assert type(D) == MC2 - -class E(C, D, metaclass=MC): - pass - -assert type(E) == MC2 - -class F(metaclass=MC3): - pass - -assert type(F) == MC3 - -try: - class G(D, E, F): - pass - assert False -except TypeError: - pass diff --git a/extra_tests/snippets/code.py b/extra_tests/snippets/example_interactive.py similarity index 95% rename from extra_tests/snippets/code.py rename to extra_tests/snippets/example_interactive.py index ed8d8db68..6e8b02c86 100644 --- a/extra_tests/snippets/code.py +++ b/extra_tests/snippets/example_interactive.py @@ -18,7 +18,7 @@ assert c2.co_argcount == 2 assert "Constant String" in c2.co_consts, c2.co_consts print(c2.co_consts) assert 2 in c2.co_consts, c2.co_consts -assert "code.py" in c2.co_filename +assert "example_interactive.py" in c2.co_filename assert c2.co_firstlineno == 5, str(c2.co_firstlineno) # assert isinstance(c2.co_flags, int) # 'OPTIMIZED, NEWLOCALS, NOFREE' # assert c2.co_freevars == (), str(c2.co_freevars) diff --git a/extra_tests/snippets/minimum.py b/extra_tests/snippets/minimum.py deleted file mode 100644 index d00491fd7..000000000 --- a/extra_tests/snippets/minimum.py +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/extra_tests/snippets/operator.py b/extra_tests/snippets/operator_arithmetic.py similarity index 100% rename from extra_tests/snippets/operator.py rename to extra_tests/snippets/operator_arithmetic.py diff --git a/extra_tests/snippets/cast.py b/extra_tests/snippets/operator_cast.py similarity index 100% rename from extra_tests/snippets/cast.py rename to extra_tests/snippets/operator_cast.py diff --git a/extra_tests/snippets/operator_comparison.py b/extra_tests/snippets/operator_comparison.py index 400d47d07..644a5ea6a 100644 --- a/extra_tests/snippets/operator_comparison.py +++ b/extra_tests/snippets/operator_comparison.py @@ -1,3 +1,28 @@ +from testutils import assert_raises + +assert 1 < 2 +assert 1 < 2 < 3 +assert 5 == 5 == 5 +assert (5 == 5) == True +assert 5 == 5 != 4 == 4 > 3 > 2 < 3 <= 3 != 0 == 0 + +assert not 1 > 2 +assert not 5 == 5 == True +assert not 5 == 5 != 5 == 5 +assert not 1 < 2 < 3 > 4 +assert not 1 < 2 > 3 < 4 +assert not 1 > 2 < 3 < 4 + +def test_type_error(x, y): + assert_raises(TypeError, lambda: x < y) + assert_raises(TypeError, lambda: x <= y) + assert_raises(TypeError, lambda: x > y) + assert_raises(TypeError, lambda: x >= y) + +test_type_error([], 0) +test_type_error((), 0) + + # 10**308 cannot be represented exactly in f64, thus it is not equal to 1e308 float assert not (10**308 == 1e308) # but the 1e308 float can be converted to big int and then it still should be equal to itself diff --git a/extra_tests/snippets/inplace_ops.py b/extra_tests/snippets/operator_inplace.py similarity index 100% rename from extra_tests/snippets/inplace_ops.py rename to extra_tests/snippets/operator_inplace.py diff --git a/extra_tests/snippets/callables.py b/extra_tests/snippets/protocol_callable.py similarity index 100% rename from extra_tests/snippets/callables.py rename to extra_tests/snippets/protocol_callable.py diff --git a/extra_tests/snippets/bad_indexing.py b/extra_tests/snippets/protocol_index_bad.py similarity index 100% rename from extra_tests/snippets/bad_indexing.py rename to extra_tests/snippets/protocol_index_bad.py diff --git a/extra_tests/snippets/iterable.py b/extra_tests/snippets/protocol_iterable.py similarity index 100% rename from extra_tests/snippets/iterable.py rename to extra_tests/snippets/protocol_iterable.py diff --git a/extra_tests/snippets/iterations.py b/extra_tests/snippets/protocol_iternext.py similarity index 100% rename from extra_tests/snippets/iterations.py rename to extra_tests/snippets/protocol_iternext.py diff --git a/extra_tests/snippets/slice.py b/extra_tests/snippets/slice.py deleted file mode 100644 index a04e1bfe8..000000000 --- a/extra_tests/snippets/slice.py +++ /dev/null @@ -1,130 +0,0 @@ -from testutils import assert_raises -import itertools - -a = slice(10) -assert a.start == None -assert a.stop == 10 -assert a.step == None - -a = slice(0, 10, 1) -assert a.start == 0 -assert a.stop == 10 -assert a.step == 1 - -assert slice(10).__repr__() == 'slice(None, 10, None)' -assert slice(None).__repr__() == 'slice(None, None, None)' -assert slice(0, 10, 13).__repr__() == 'slice(0, 10, 13)' -assert slice('0', 1.1, 2+3j).__repr__() == "slice('0', 1.1, (2+3j))" - -assert slice(10) == slice(10) -assert slice(-1) != slice(1) -assert slice(0, 10, 3) != slice(0, 11, 3) -assert slice(0, None, 3) != slice(0, 'a', 3) -assert slice(0, 'a', 3) == slice(0, 'a', 3) - -assert slice(0, 0, 0).__eq__(slice(0, 0, 0)) -assert not slice(0, 0, 1).__eq__(slice(0, 0, 0)) -assert not slice(0, 1, 0).__eq__(slice(0, 0, 0)) -assert not slice(1, 0, 0).__eq__(slice(0, 0, 0)) -assert slice(1, 0, 0).__ne__(slice(0, 0, 0)) -assert slice(0, 1, 0).__ne__(slice(0, 0, 0)) -assert slice(0, 0, 1).__ne__(slice(0, 0, 0)) - -assert slice(0).__eq__(0) == NotImplemented -assert slice(0).__ne__(0) == NotImplemented -assert slice(None).__ne__(slice(0)) - -# slice gt, ge, lt, le -assert_raises(TypeError, lambda: slice(0, slice(), 0) < slice(0, 0, 0)) -assert_raises(TypeError, lambda: slice(0, slice(), 0) <= slice(0, 0, 0)) -assert_raises(TypeError, lambda: slice(0, slice(), 0) > slice(0, 0, 0)) -assert_raises(TypeError, lambda: slice(0, slice(), 0) >= slice(0, 0, 0)) - -assert_raises(TypeError, lambda: slice(0, 0, 0) < slice(0, 0, slice())) -assert_raises(TypeError, lambda: slice(0, 0, 0) <= slice(0, 0, slice())) -assert_raises(TypeError, lambda: slice(0, 0, 0) > slice(0, 0, slice())) -assert_raises(TypeError, lambda: slice(0, 0, 0) >= slice(0, 0, slice())) - -assert_raises(TypeError, lambda: slice(0, 0) >= slice(0, 0, 0)) -assert_raises(TypeError, lambda: slice(0, 0) <= slice(0, 0, 0)) -assert_raises(TypeError, lambda: slice(0, 0) < slice(0, 0, 0)) -assert_raises(TypeError, lambda: slice(0, 0) > slice(0, 0, 0)) - -assert slice(0, 0, 0) < slice(0, 1, -1) -assert slice(0, 0, 0) < slice(0, 0, 1) -assert slice(0, 0, 0) > slice(0, 0, -1) -assert slice(0, 0, 0) >= slice(0, 0, -1) -assert not slice(0, 0, 0) <= slice(0, 0, -1) - -assert slice(0, 0, 0) > slice(0, -1, 1) -assert slice(0, 0, 0) >= slice(0, -1, 1) -assert slice(0, 0, 0) >= slice(0, -1, 1) - -assert slice(0, 0, 0) <= slice(0, 0, 1) -assert slice(0, 0, 0) <= slice(0, 0, 0) -assert slice(0, 0, 0) <= slice(0, 0, 0) -assert not slice(0, 0, 0) > slice(0, 0, 0) -assert not slice(0, 0, 0) < slice(0, 0, 0) - -assert not slice(0, float('nan'), float('nan')) <= slice(0, float('nan'), 1) -assert not slice(0, float('nan'), float('nan')) <= slice(0, float('nan'), float('nan')) -assert not slice(0, float('nan'), float('nan')) >= slice(0, float('nan'), float('nan')) -assert not slice(0, float('nan'), float('nan')) < slice(0, float('nan'), float('nan')) -assert not slice(0, float('nan'), float('nan')) > slice(0, float('nan'), float('nan')) - -assert slice(0, float('inf'), float('inf')) >= slice(0, float('inf'), 1) -assert slice(0, float('inf'), float('inf')) <= slice(0, float('inf'), float('inf')) -assert slice(0, float('inf'), float('inf')) >= slice(0, float('inf'), float('inf')) -assert not slice(0, float('inf'), float('inf')) < slice(0, float('inf'), float('inf')) -assert not slice(0, float('inf'), float('inf')) > slice(0, float('inf'), float('inf')) - -assert_raises(TypeError, lambda: slice(0) < 3) -assert_raises(TypeError, lambda: slice(0) > 3) -assert_raises(TypeError, lambda: slice(0) <= 3) -assert_raises(TypeError, lambda: slice(0) >= 3) - -assert_raises(TypeError, hash, slice(0)) -assert_raises(TypeError, hash, slice(None)) - -def dict_slice(): - d = {} - d[slice(0)] = 3 - -assert_raises(TypeError, dict_slice) - -assert slice(None ).indices(10) == (0, 10, 1) -assert slice(None, None, 2).indices(10) == (0, 10, 2) -assert slice(1, None, 2).indices(10) == (1, 10, 2) -assert slice(None, None, -1).indices(10) == (9, -1, -1) -assert slice(None, None, -2).indices(10) == (9, -1, -2) -assert slice(3, None, -2).indices(10) == (3, -1, -2) - -# issue 3004 tests -assert slice(None, -9).indices(10) == (0, 1, 1) -assert slice(None, -10).indices(10) == (0, 0, 1) -assert slice(None, -11).indices(10) == (0, 0, 1) -assert slice(None, -10, -1).indices(10) == (9, 0, -1) -assert slice(None, -11, -1).indices(10) == (9, -1, -1) -assert slice(None, -12, -1).indices(10) == (9, -1, -1) -assert slice(None, 9).indices(10) == (0, 9, 1) -assert slice(None, 10).indices(10) == (0, 10, 1) -assert slice(None, 11).indices(10) == (0, 10, 1) -assert slice(None, 8, -1).indices(10) == (9, 8, -1) -assert slice(None, 9, -1).indices(10) == (9, 9, -1) -assert slice(None, 10, -1).indices(10) == (9, 9, -1) - -assert \ - slice(-100, 100).indices(10) == \ - slice(None ).indices(10) - -assert \ - slice(100, -100, -1).indices(10) == \ - slice(None, None, -1).indices(10) - -assert slice(-100, 100, 2).indices(10) == (0, 10, 2) - -try: - slice(None, None, 0) - assert "zero step" == "throws an exception" -except: - pass diff --git a/extra_tests/snippets/numbers.py b/extra_tests/snippets/stdlib_abc_number.py similarity index 100% rename from extra_tests/snippets/numbers.py rename to extra_tests/snippets/stdlib_abc_number.py diff --git a/extra_tests/snippets/ast_snippet.py b/extra_tests/snippets/stdlib_ast.py similarity index 100% rename from extra_tests/snippets/ast_snippet.py rename to extra_tests/snippets/stdlib_ast.py diff --git a/extra_tests/snippets/deque.py b/extra_tests/snippets/stdlib_collections_deque.py similarity index 100% rename from extra_tests/snippets/deque.py rename to extra_tests/snippets/stdlib_collections_deque.py diff --git a/extra_tests/snippets/module.py b/extra_tests/snippets/stdlib_dir_module.py similarity index 100% rename from extra_tests/snippets/module.py rename to extra_tests/snippets/stdlib_dir_module.py diff --git a/extra_tests/snippets/json_snippet.py b/extra_tests/snippets/stdlib_json.py similarity index 100% rename from extra_tests/snippets/json_snippet.py rename to extra_tests/snippets/stdlib_json.py diff --git a/extra_tests/snippets/getframe.py b/extra_tests/snippets/stdlib_sys_getframe.py similarity index 100% rename from extra_tests/snippets/getframe.py rename to extra_tests/snippets/stdlib_sys_getframe.py diff --git a/extra_tests/snippets/test_warnings.py b/extra_tests/snippets/stdlib_warnings.py similarity index 100% rename from extra_tests/snippets/test_warnings.py rename to extra_tests/snippets/stdlib_warnings.py diff --git a/extra_tests/snippets/weakrefs.py b/extra_tests/snippets/stdlib_weakref.py similarity index 100% rename from extra_tests/snippets/weakrefs.py rename to extra_tests/snippets/stdlib_weakref.py diff --git a/extra_tests/snippets/assignment.py b/extra_tests/snippets/syntax_assignment.py similarity index 100% rename from extra_tests/snippets/assignment.py rename to extra_tests/snippets/syntax_assignment.py diff --git a/extra_tests/snippets/async_stuff.py b/extra_tests/snippets/syntax_async.py similarity index 100% rename from extra_tests/snippets/async_stuff.py rename to extra_tests/snippets/syntax_async.py diff --git a/extra_tests/snippets/attr.py b/extra_tests/snippets/syntax_attr.py similarity index 100% rename from extra_tests/snippets/attr.py rename to extra_tests/snippets/syntax_attr.py diff --git a/extra_tests/snippets/function_nested.py b/extra_tests/snippets/syntax_call_nested.py similarity index 100% rename from extra_tests/snippets/function_nested.py rename to extra_tests/snippets/syntax_call_nested.py diff --git a/extra_tests/snippets/commas.py b/extra_tests/snippets/syntax_comma.py similarity index 100% rename from extra_tests/snippets/commas.py rename to extra_tests/snippets/syntax_comma.py diff --git a/extra_tests/snippets/comments.py b/extra_tests/snippets/syntax_comment.py similarity index 100% rename from extra_tests/snippets/comments.py rename to extra_tests/snippets/syntax_comment.py diff --git a/extra_tests/snippets/comprehensions.py b/extra_tests/snippets/syntax_comprehension.py similarity index 100% rename from extra_tests/snippets/comprehensions.py rename to extra_tests/snippets/syntax_comprehension.py diff --git a/extra_tests/snippets/decorators.py b/extra_tests/snippets/syntax_decorator.py similarity index 100% rename from extra_tests/snippets/decorators.py rename to extra_tests/snippets/syntax_decorator.py diff --git a/extra_tests/snippets/delete.py b/extra_tests/snippets/syntax_del.py similarity index 100% rename from extra_tests/snippets/delete.py rename to extra_tests/snippets/syntax_del.py diff --git a/extra_tests/snippets/for.py b/extra_tests/snippets/syntax_for.py similarity index 100% rename from extra_tests/snippets/for.py rename to extra_tests/snippets/syntax_for.py diff --git a/extra_tests/snippets/func_defaults.py b/extra_tests/snippets/syntax_function.py similarity index 100% rename from extra_tests/snippets/func_defaults.py rename to extra_tests/snippets/syntax_function.py diff --git a/extra_tests/snippets/function.py b/extra_tests/snippets/syntax_function2.py similarity index 100% rename from extra_tests/snippets/function.py rename to extra_tests/snippets/syntax_function2.py diff --git a/extra_tests/snippets/function_args.py b/extra_tests/snippets/syntax_function_args.py similarity index 100% rename from extra_tests/snippets/function_args.py rename to extra_tests/snippets/syntax_function_args.py diff --git a/extra_tests/snippets/funky_syntax.py b/extra_tests/snippets/syntax_funky.py similarity index 100% rename from extra_tests/snippets/funky_syntax.py rename to extra_tests/snippets/syntax_funky.py diff --git a/extra_tests/snippets/generators.py b/extra_tests/snippets/syntax_generator.py similarity index 100% rename from extra_tests/snippets/generators.py rename to extra_tests/snippets/syntax_generator.py diff --git a/extra_tests/snippets/global_nonlocal.py b/extra_tests/snippets/syntax_global_nonlocal.py similarity index 100% rename from extra_tests/snippets/global_nonlocal.py rename to extra_tests/snippets/syntax_global_nonlocal.py diff --git a/extra_tests/snippets/if.py b/extra_tests/snippets/syntax_if.py similarity index 100% rename from extra_tests/snippets/if.py rename to extra_tests/snippets/syntax_if.py diff --git a/extra_tests/snippets/if_expressions.py b/extra_tests/snippets/syntax_if_expression.py similarity index 100% rename from extra_tests/snippets/if_expressions.py rename to extra_tests/snippets/syntax_if_expression.py diff --git a/extra_tests/snippets/indentation.py b/extra_tests/snippets/syntax_indent.py similarity index 100% rename from extra_tests/snippets/indentation.py rename to extra_tests/snippets/syntax_indent.py diff --git a/extra_tests/snippets/invalid_syntax.py b/extra_tests/snippets/syntax_invalid.py similarity index 100% rename from extra_tests/snippets/invalid_syntax.py rename to extra_tests/snippets/syntax_invalid.py diff --git a/extra_tests/snippets/literals.py b/extra_tests/snippets/syntax_literal.py similarity index 100% rename from extra_tests/snippets/literals.py rename to extra_tests/snippets/syntax_literal.py diff --git a/extra_tests/snippets/syntax_metaclass.py b/extra_tests/snippets/syntax_metaclass.py index 99f8575ee..0b7e27b61 100644 --- a/extra_tests/snippets/syntax_metaclass.py +++ b/extra_tests/snippets/syntax_metaclass.py @@ -29,3 +29,49 @@ assert C().count == 2 assert C.prepared assert D.prepared + +class MC(type): + pass + +class MC2(MC): + pass + +class MC3(type): + pass + +class A(): + pass + +assert type(A) == type + +class B(metaclass=MC): + pass + +assert type(B) == MC + +class C(B): + pass + +assert type(C) == MC + +class D(metaclass=MC2): + pass + +assert type(D) == MC2 + +class E(C, D, metaclass=MC): + pass + +assert type(E) == MC2 + +class F(metaclass=MC3): + pass + +assert type(F) == MC3 + +try: + class G(D, E, F): + pass + assert False +except TypeError: + pass diff --git a/extra_tests/snippets/control_flow.py b/extra_tests/snippets/syntax_nested_control_flow.py similarity index 100% rename from extra_tests/snippets/control_flow.py rename to extra_tests/snippets/syntax_nested_control_flow.py diff --git a/extra_tests/snippets/extra_bool_eval.py b/extra_tests/snippets/syntax_short_circuit_bool.py similarity index 100% rename from extra_tests/snippets/extra_bool_eval.py rename to extra_tests/snippets/syntax_short_circuit_bool.py diff --git a/extra_tests/snippets/short_circuit_evaluations.py b/extra_tests/snippets/syntax_short_circuit_evaluations.py similarity index 100% rename from extra_tests/snippets/short_circuit_evaluations.py rename to extra_tests/snippets/syntax_short_circuit_evaluations.py diff --git a/extra_tests/snippets/syntax_slice.py b/extra_tests/snippets/syntax_slice.py new file mode 100644 index 000000000..5f6bb410d --- /dev/null +++ b/extra_tests/snippets/syntax_slice.py @@ -0,0 +1,47 @@ +from testutils import assert_raises + +a = [] +assert a[:] == [] +assert a[: 2 ** 100] == [] +assert a[-2 ** 100 :] == [] +assert a[:: 2 ** 100] == [] +assert a[10:20] == [] +assert a[-20:-10] == [] + +b = [1, 2] + +assert b[:] == [1, 2] +assert b[slice(None)] == [1, 2] +assert b[: 2 ** 100] == [1, 2] +assert b[-2 ** 100 :] == [1, 2] +assert b[2 ** 100 :] == [] +assert b[:: 2 ** 100] == [1] +assert b[-10:1] == [1] +assert b[0:0] == [] +assert b[1:0] == [] + +assert_raises(ValueError, lambda: b[::0], _msg='zero step slice') + +assert b[::-1] == [2, 1] +assert b[1::-1] == [2, 1] +assert b[0::-1] == [1] +assert b[0:-5:-1] == [1] +assert b[:0:-1] == [2] +assert b[5:0:-1] == [2] + +c = list(range(10)) + +assert c[9:6:-3] == [9] +assert c[9::-3] == [9, 6, 3, 0] +assert c[9::-4] == [9, 5, 1] +assert c[8 :: -2 ** 100] == [8] + +assert c[7:7:-2] == [] +assert c[7:8:-2] == [] + +d = "123456" + +assert d[3::-1] == "4321" +assert d[4::-3] == "52" + +assert [1, 2, 3, 5, 6][-1:-5:-1] == [6, 5, 3, 2] # #746 diff --git a/extra_tests/snippets/statements.py b/extra_tests/snippets/syntax_statement.py similarity index 100% rename from extra_tests/snippets/statements.py rename to extra_tests/snippets/syntax_statement.py diff --git a/extra_tests/snippets/try_exceptions.py b/extra_tests/snippets/syntax_try.py similarity index 100% rename from extra_tests/snippets/try_exceptions.py rename to extra_tests/snippets/syntax_try.py diff --git a/extra_tests/snippets/type_hints.py b/extra_tests/snippets/syntax_type_hint.py similarity index 100% rename from extra_tests/snippets/type_hints.py rename to extra_tests/snippets/syntax_type_hint.py diff --git a/extra_tests/snippets/loop.py b/extra_tests/snippets/syntax_while.py similarity index 100% rename from extra_tests/snippets/loop.py rename to extra_tests/snippets/syntax_while.py diff --git a/extra_tests/snippets/with.py b/extra_tests/snippets/syntax_with.py similarity index 100% rename from extra_tests/snippets/with.py rename to extra_tests/snippets/syntax_with.py diff --git a/extra_tests/snippets/types_snippet.py b/extra_tests/snippets/types_snippet.py deleted file mode 100644 index fa08f6b91..000000000 --- a/extra_tests/snippets/types_snippet.py +++ /dev/null @@ -1,118 +0,0 @@ -from testutils import assert_raises - -import platform -if platform.python_implementation() == 'RustPython': - gc = None -else: - import gc - -assert type(type) is type -assert type(object) is type -assert type(object()) is object - -new_type = type('New', (object,), {}) - -assert type(new_type) is type -assert type(new_type()) is new_type - -metaclass = type('MCl', (type,), {}) -cls = metaclass('Cls', (object,), {}) -inst = cls() - -assert type(inst) is cls -assert type(cls) is metaclass -assert type(metaclass) is type - -assert issubclass(metaclass, type) -assert isinstance(cls, type) - -assert inst.__class__ is cls -assert cls.__class__ is metaclass -assert metaclass.__class__ is type -assert type.__class__ is type -assert None.__class__ is type(None) - -assert isinstance(type, type) -assert issubclass(type, type) - -assert not isinstance(type, (int, float)) -assert isinstance(type, (int, object)) - -assert not issubclass(type, (int, float)) -assert issubclass(type, (int, type)) - -class A: pass -class B(A): pass -class C(A): pass -class D(B, C): pass - -assert A.__subclasses__() == [B, C] -assert B.__subclasses__() == [D] -assert C.__subclasses__() == [D] -assert D.__subclasses__() == [] - -assert D.__bases__ == (B, C) -assert A.__bases__ == (object,) -assert B.__bases__ == (A,) - - -del D - -if gc: - # gc sweep is needed here for CPython... - gc.collect() - # ...while RustPython doesn't have `gc` yet. - -if gc: - # D.__new__ is a method bound to the D type, so just deleting D - # from globals won't actually invalidate the weak reference that - # subclasses holds. TODO: implement a proper tracing gc - assert B.__subclasses__() == [] - assert C.__subclasses__() == [] - -assert type in object.__subclasses__() - -assert cls.__name__ == 'Cls' - -# mro -assert int.mro() == [int, object] -assert bool.mro() == [bool, int, object] -assert object.mro() == [object] - -class A: - pass - -class B(A): - pass - -assert A.mro() == [A, object] -assert B.mro() == [B, A, object] - -class AA: - pass - -class BB(AA): - pass - -class C(B, BB): - pass - -assert C.mro() == [C, B, A, BB, AA, object] - - -assert type(Exception.args).__name__ == 'getset_descriptor' -assert type(None).__bool__(None) is False - -class A: - pass - -class B: - pass - -a = A() -a.__class__ = B -assert isinstance(a, B) - -b = 1 -with assert_raises(TypeError): - b.__class__ = B diff --git a/extra_tests/snippets/variables.py b/extra_tests/snippets/variables.py deleted file mode 100644 index 2dc1403c7..000000000 --- a/extra_tests/snippets/variables.py +++ /dev/null @@ -1,4 +0,0 @@ -a = 8 -b = 7 -assert a+b == 15 -# print(a+b)