From 2a504c2abef2ffef9ff8a16abbb37fbe0f60e083 Mon Sep 17 00:00:00 2001 From: Peter Lazorchak Date: Thu, 11 Jan 2024 10:43:06 -0800 Subject: [PATCH 1/2] gh-113937 Fix failures in type cache tests due to re-running --- Lib/test/test_type_cache.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Lib/test/test_type_cache.py b/Lib/test/test_type_cache.py index 95b55009c7187d..6e36987ac300cf 100644 --- a/Lib/test/test_type_cache.py +++ b/Lib/test/test_type_cache.py @@ -84,10 +84,11 @@ class TypeCacheWithSpecializationTests(unittest.TestCase): def tearDown(self): _clear_type_cache() - def _assign_and_check_valid_version(self, user_type): - type_modified(user_type) - type_assign_version(user_type) - self.assertNotEqual(type_get_version(user_type), 0) + def _assign_valid_version_or_skip(self, type_): + type_modified(type_) + type_assign_version(type_) + if type_get_version(type_) == 0: + self.skipTest("Could not assign valid type version") def _assign_and_check_version_0(self, user_type): type_modified(user_type) @@ -98,8 +99,6 @@ def _all_opnames(self, func): return set(instr.opname for instr in dis.Bytecode(func, adaptive=True)) def _check_specialization(self, func, arg, opname, *, should_specialize): - self.assertIn(opname, self._all_opnames(func)) - for _ in range(100): func(arg) @@ -113,7 +112,7 @@ class A: def foo(self): pass - self._assign_and_check_valid_version(A) + self._assign_valid_version_or_skip(A) def load_foo_1(type_): type_.foo @@ -129,8 +128,8 @@ def load_foo_2(type_): self._check_specialization(load_foo_2, A, "LOAD_ATTR", should_specialize=False) def test_class_load_attr_specialization_static_type(self): - self._assign_and_check_valid_version(str) - self._assign_and_check_valid_version(bytes) + self._assign_valid_version_or_skip(str) + self._assign_valid_version_or_skip(bytes) def get_capitalize_1(type_): return type_.capitalize @@ -164,7 +163,7 @@ class G: def x(self): return 9 - self._assign_and_check_valid_version(G) + self._assign_valid_version_or_skip(G) def load_x_1(instance): instance.x @@ -183,7 +182,7 @@ def test_store_attr_specialization_user_type(self): class B: __slots__ = ("bar",) - self._assign_and_check_valid_version(B) + self._assign_valid_version_or_skip(B) def store_bar_1(type_): type_.bar = 10 @@ -203,7 +202,7 @@ class F: def __init__(self): pass - self._assign_and_check_valid_version(F) + self._assign_valid_version_or_skip(F) def call_class_1(type_): type_() @@ -222,7 +221,7 @@ def test_to_bool_specialization_user_type(self): class H: pass - self._assign_and_check_valid_version(H) + self._assign_valid_version_or_skip(H) def to_bool_1(instance): not instance From f5504d690745ad6a2f6b91c886d9b3e2138c72fe Mon Sep 17 00:00:00 2001 From: Peter Lazorchak Date: Thu, 11 Jan 2024 11:00:32 -0800 Subject: [PATCH 2/2] Also update test_type_assign_specific_version --- Lib/test/test_type_cache.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_type_cache.py b/Lib/test/test_type_cache.py index 6e36987ac300cf..295df78a17374a 100644 --- a/Lib/test/test_type_cache.py +++ b/Lib/test/test_type_cache.py @@ -67,7 +67,8 @@ class C: type_assign_version(C) orig_version = type_get_version(C) - self.assertNotEqual(orig_version, 0) + if orig_version == 0: + self.skipTest("Could not assign a valid type version") type_modified(C) type_assign_specific_version_unsafe(C, orig_version + 5)