Skip to content

Commit aa4b5a7

Browse files
authored
gh-136535: Tests: Correct Py_TPFLAGS_MANAGED_DICT in test_class.py (gh-136538)
1 parent 92c0c45 commit aa4b5a7

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
@@ -859,7 +859,12 @@ def __init__(self, arg):
859859

860860
from _testinternalcapi import has_inline_values
861861

862-
Py_TPFLAGS_MANAGED_DICT = (1 << 2)
862+
Py_TPFLAGS_INLINE_VALUES = (1 << 2)
863+
Py_TPFLAGS_MANAGED_DICT = (1 << 4)
864+
865+
class NoManagedDict:
866+
__slots__ = ('a',)
867+
863868

864869
class Plain:
865870
pass
@@ -874,11 +879,31 @@ def __init__(self):
874879
self.d = 4
875880

876881

882+
class VarSizedSubclass(tuple):
883+
pass
884+
885+
877886
class TestInlineValues(unittest.TestCase):
878887

879-
def test_flags(self):
880-
self.assertEqual(Plain.__flags__ & Py_TPFLAGS_MANAGED_DICT, Py_TPFLAGS_MANAGED_DICT)
881-
self.assertEqual(WithAttrs.__flags__ & Py_TPFLAGS_MANAGED_DICT, Py_TPFLAGS_MANAGED_DICT)
888+
def test_no_flags_for_slots_class(self):
889+
flags = NoManagedDict.__flags__
890+
self.assertEqual(flags & Py_TPFLAGS_MANAGED_DICT, 0)
891+
self.assertEqual(flags & Py_TPFLAGS_INLINE_VALUES, 0)
892+
self.assertFalse(has_inline_values(NoManagedDict()))
893+
894+
def test_both_flags_for_regular_class(self):
895+
for cls in (Plain, WithAttrs):
896+
with self.subTest(cls=cls.__name__):
897+
flags = cls.__flags__
898+
self.assertEqual(flags & Py_TPFLAGS_MANAGED_DICT, Py_TPFLAGS_MANAGED_DICT)
899+
self.assertEqual(flags & Py_TPFLAGS_INLINE_VALUES, Py_TPFLAGS_INLINE_VALUES)
900+
self.assertTrue(has_inline_values(cls()))
901+
902+
def test_managed_dict_only_for_varsized_subclass(self):
903+
flags = VarSizedSubclass.__flags__
904+
self.assertEqual(flags & Py_TPFLAGS_MANAGED_DICT, Py_TPFLAGS_MANAGED_DICT)
905+
self.assertEqual(flags & Py_TPFLAGS_INLINE_VALUES, 0)
906+
self.assertFalse(has_inline_values(VarSizedSubclass()))
882907

883908
def test_has_inline_values(self):
884909
c = Plain()

0 commit comments

Comments
 (0)