@@ -153,6 +153,7 @@ class C(A, B): pass
153153# assert raised
154154# assert C.__bases__ == [object]
155155
156+
156157def test_namespace_with_non_string_keys ():
157158 class MyStr (str ):
158159 pass
@@ -162,6 +163,7 @@ class MyStr(str):
162163 })
163164 assert any (type (k ) == MyStr for k in A .__dict__ .keys ())
164165
166+
165167def test_mro ():
166168 class M (type ):
167169 def mro (cls ):
@@ -173,7 +175,8 @@ class B: pass
173175 class C (A , B , metaclass = M ): pass
174176
175177 assert C .__mro__ == (C , B , A , object )
176-
178+
179+
177180def test_dir_sorted ():
178181 class C :
179182 b = 1
@@ -253,6 +256,7 @@ class MyDict(dict):
253256 ]:
254257 assert type (x ).__flags__ & flag , "masked __flags__ = {}, expected {}" .format (type (x ).__flags__ & flag , flag )
255258
259+
256260def test_dict ():
257261 def dict_element_raises (o , err ):
258262 raised = False
@@ -295,7 +299,8 @@ class SubSlots(BaseSlots, Base):
295299
296300 str (type (SubSlots .__dict__ ['__dict__' ])) == "<class 'get_set_desc'>"
297301 assert SubSlots ().__dict__ == {}
298-
302+
303+
299304def test_itemsize ():
300305 assert object .__itemsize__ == 0
301306 assert list .__itemsize__ == 0
@@ -330,7 +335,8 @@ class C():
330335 class C (tuple ):
331336 __itemsize__ = 42
332337 assert C .__itemsize__ == 8
333-
338+
339+
334340def test_descr_name_qualname ():
335341 assert float .real .__qualname__ == 'float.real'
336342 assert float .real .__name__ == 'real'
@@ -349,7 +355,8 @@ class C: __slots__ = ['a']
349355 except AttributeError :
350356 raised = True
351357 assert raised
352-
358+
359+
353360def test_cant_set_builtin_attributes ():
354361 raised = False
355362 try :
@@ -392,3 +399,41 @@ def test_cant_set_builtin_attributes():
392399 except TypeError :
393400 raised = True
394401 assert raised
402+
403+
404+ def test_slots_no_instance_layout_conflict ():
405+ # with slots
406+ class A (object ):
407+ __slots__ = ("a" , "b" )
408+
409+ class B (A ):
410+ pass
411+
412+ class C (A ):
413+ pass
414+
415+ raised = False
416+ try :
417+ class D (B , C ):
418+ pass
419+ except TypeError :
420+ raised = True
421+ assert not raised
422+
423+ # without slots
424+ class A (object ):
425+ pass
426+
427+ class B (A ):
428+ pass
429+
430+ class C (A ):
431+ pass
432+
433+ raised = False
434+ try :
435+ class D (B , C ):
436+ pass
437+ except TypeError :
438+ raised = True
439+ assert not raised
0 commit comments