Skip to content

Commit 166b354

Browse files
[3.13] gh-136535: Tests: Correct Py_TPFLAGS_MANAGED_DICT in test_class.py (gh-136538) (gh-140533)
1 parent 050b9dd commit 166b354

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

Lib/test/test_class.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,12 @@ def __init__(self, obj):
841841

842842
from _testinternalcapi import has_inline_values
843843

844-
Py_TPFLAGS_MANAGED_DICT = (1 << 2)
844+
Py_TPFLAGS_INLINE_VALUES = (1 << 2)
845+
Py_TPFLAGS_MANAGED_DICT = (1 << 4)
846+
847+
class NoManagedDict:
848+
__slots__ = ('a',)
849+
845850

846851
class Plain:
847852
pass
@@ -856,11 +861,31 @@ def __init__(self):
856861
self.d = 4
857862

858863

864+
class VarSizedSubclass(tuple):
865+
pass
866+
867+
859868
class TestInlineValues(unittest.TestCase):
860869

861-
def test_flags(self):
862-
self.assertEqual(Plain.__flags__ & Py_TPFLAGS_MANAGED_DICT, Py_TPFLAGS_MANAGED_DICT)
863-
self.assertEqual(WithAttrs.__flags__ & Py_TPFLAGS_MANAGED_DICT, Py_TPFLAGS_MANAGED_DICT)
870+
def test_no_flags_for_slots_class(self):
871+
flags = NoManagedDict.__flags__
872+
self.assertEqual(flags & Py_TPFLAGS_MANAGED_DICT, 0)
873+
self.assertEqual(flags & Py_TPFLAGS_INLINE_VALUES, 0)
874+
self.assertFalse(has_inline_values(NoManagedDict()))
875+
876+
def test_both_flags_for_regular_class(self):
877+
for cls in (Plain, WithAttrs):
878+
with self.subTest(cls=cls.__name__):
879+
flags = cls.__flags__
880+
self.assertEqual(flags & Py_TPFLAGS_MANAGED_DICT, Py_TPFLAGS_MANAGED_DICT)
881+
self.assertEqual(flags & Py_TPFLAGS_INLINE_VALUES, Py_TPFLAGS_INLINE_VALUES)
882+
self.assertTrue(has_inline_values(cls()))
883+
884+
def test_managed_dict_only_for_varsized_subclass(self):
885+
flags = VarSizedSubclass.__flags__
886+
self.assertEqual(flags & Py_TPFLAGS_MANAGED_DICT, Py_TPFLAGS_MANAGED_DICT)
887+
self.assertEqual(flags & Py_TPFLAGS_INLINE_VALUES, 0)
888+
self.assertFalse(has_inline_values(VarSizedSubclass()))
864889

865890
def test_has_inline_values(self):
866891
c = Plain()

0 commit comments

Comments
 (0)