(root)/
Python-3.12.0/
Lib/
test/
test_opcache.py
       1  import unittest
       2  
       3  
       4  class ESC[4;38;5;81mTestLoadSuperAttrCache(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
       5      def test_descriptor_not_double_executed_on_spec_fail(self):
       6          calls = []
       7          class ESC[4;38;5;81mDescriptor:
       8              def __get__(self, instance, owner):
       9                  calls.append((instance, owner))
      10                  return lambda: 1
      11  
      12          class ESC[4;38;5;81mC:
      13              d = Descriptor()
      14  
      15          class ESC[4;38;5;81mD(ESC[4;38;5;149mC):
      16              def f(self):
      17                  return super().d()
      18  
      19          d = D()
      20  
      21          self.assertEqual(d.f(), 1)  # warmup
      22          calls.clear()
      23          self.assertEqual(d.f(), 1)  # try to specialize
      24          self.assertEqual(calls, [(d, D)])
      25  
      26  
      27  class ESC[4;38;5;81mTestLoadAttrCache(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
      28      def test_descriptor_added_after_optimization(self):
      29          class ESC[4;38;5;81mDescriptor:
      30              pass
      31  
      32          class ESC[4;38;5;81mC:
      33              def __init__(self):
      34                  self.x = 1
      35              x = Descriptor()
      36  
      37          def f(o):
      38              return o.x
      39  
      40          o = C()
      41          for i in range(1025):
      42              assert f(o) == 1
      43  
      44          Descriptor.__get__ = lambda self, instance, value: 2
      45          Descriptor.__set__ = lambda *args: None
      46  
      47          self.assertEqual(f(o), 2)
      48  
      49      def test_metaclass_descriptor_added_after_optimization(self):
      50          class ESC[4;38;5;81mDescriptor:
      51              pass
      52  
      53          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
      54              attribute = Descriptor()
      55  
      56          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
      57              attribute = True
      58  
      59          def __get__(self, instance, owner):
      60              return False
      61  
      62          def __set__(self, instance, value):
      63              return None
      64  
      65          def f():
      66              return Class.attribute
      67  
      68          for _ in range(1025):
      69              self.assertTrue(f())
      70  
      71          Descriptor.__get__ = __get__
      72          Descriptor.__set__ = __set__
      73  
      74          for _ in range(1025):
      75              self.assertFalse(f())
      76  
      77      def test_metaclass_descriptor_shadows_class_attribute(self):
      78          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
      79              @property
      80              def attribute(self):
      81                  return True
      82  
      83          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
      84              attribute = False
      85  
      86          def f():
      87              return Class.attribute
      88  
      89          for _ in range(1025):
      90              self.assertTrue(f())
      91  
      92      def test_metaclass_set_descriptor_after_optimization(self):
      93          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
      94              pass
      95  
      96          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
      97              attribute = True
      98  
      99          @property
     100          def attribute(self):
     101              return False
     102  
     103          def f():
     104              return Class.attribute
     105  
     106          for _ in range(1025):
     107              self.assertTrue(f())
     108  
     109          Metaclass.attribute = attribute
     110  
     111          for _ in range(1025):
     112              self.assertFalse(f())
     113  
     114      def test_metaclass_del_descriptor_after_optimization(self):
     115          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
     116              @property
     117              def attribute(self):
     118                  return True
     119  
     120          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
     121              attribute = False
     122  
     123          def f():
     124              return Class.attribute
     125  
     126          for _ in range(1025):
     127              self.assertTrue(f())
     128  
     129          del Metaclass.attribute
     130  
     131          for _ in range(1025):
     132              self.assertFalse(f())
     133  
     134      def test_type_descriptor_shadows_attribute_method(self):
     135          class ESC[4;38;5;81mClass:
     136              mro = None
     137  
     138          def f():
     139              return Class.mro
     140  
     141          for _ in range(1025):
     142              self.assertIsNone(f())
     143  
     144      def test_type_descriptor_shadows_attribute_member(self):
     145          class ESC[4;38;5;81mClass:
     146              __base__ = None
     147  
     148          def f():
     149              return Class.__base__
     150  
     151          for _ in range(1025):
     152              self.assertIs(f(), object)
     153  
     154      def test_type_descriptor_shadows_attribute_getset(self):
     155          class ESC[4;38;5;81mClass:
     156              __name__ = "Spam"
     157  
     158          def f():
     159              return Class.__name__
     160  
     161          for _ in range(1025):
     162              self.assertEqual(f(), "Class")
     163  
     164      def test_metaclass_getattribute(self):
     165          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
     166              def __getattribute__(self, name):
     167                  return True
     168  
     169          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
     170              attribute = False
     171  
     172          def f():
     173              return Class.attribute
     174  
     175          for _ in range(1025):
     176              self.assertTrue(f())
     177  
     178      def test_metaclass_swap(self):
     179          class ESC[4;38;5;81mOldMetaclass(ESC[4;38;5;149mtype):
     180              @property
     181              def attribute(self):
     182                  return True
     183  
     184          class ESC[4;38;5;81mNewMetaclass(ESC[4;38;5;149mtype):
     185              @property
     186              def attribute(self):
     187                  return False
     188  
     189          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mOldMetaclass):
     190              pass
     191  
     192          def f():
     193              return Class.attribute
     194  
     195          for _ in range(1025):
     196              self.assertTrue(f())
     197  
     198          Class.__class__ = NewMetaclass
     199  
     200          for _ in range(1025):
     201              self.assertFalse(f())
     202  
     203      def test_load_shadowing_slot_should_raise_type_error(self):
     204          class ESC[4;38;5;81mClass:
     205              __slots__ = ("slot",)
     206  
     207          class ESC[4;38;5;81mSneaky:
     208              __slots__ = ("shadowed",)
     209              shadowing = Class.slot
     210  
     211          def f(o):
     212              o.shadowing
     213  
     214          o = Sneaky()
     215          o.shadowed = 42
     216  
     217          for _ in range(1025):
     218              with self.assertRaises(TypeError):
     219                  f(o)
     220  
     221      def test_store_shadowing_slot_should_raise_type_error(self):
     222          class ESC[4;38;5;81mClass:
     223              __slots__ = ("slot",)
     224  
     225          class ESC[4;38;5;81mSneaky:
     226              __slots__ = ("shadowed",)
     227              shadowing = Class.slot
     228  
     229          def f(o):
     230              o.shadowing = 42
     231  
     232          o = Sneaky()
     233  
     234          for _ in range(1025):
     235              with self.assertRaises(TypeError):
     236                  f(o)
     237  
     238      def test_load_borrowed_slot_should_not_crash(self):
     239          class ESC[4;38;5;81mClass:
     240              __slots__ = ("slot",)
     241  
     242          class ESC[4;38;5;81mSneaky:
     243              borrowed = Class.slot
     244  
     245          def f(o):
     246              o.borrowed
     247  
     248          o = Sneaky()
     249  
     250          for _ in range(1025):
     251              with self.assertRaises(TypeError):
     252                  f(o)
     253  
     254      def test_store_borrowed_slot_should_not_crash(self):
     255          class ESC[4;38;5;81mClass:
     256              __slots__ = ("slot",)
     257  
     258          class ESC[4;38;5;81mSneaky:
     259              borrowed = Class.slot
     260  
     261          def f(o):
     262              o.borrowed = 42
     263  
     264          o = Sneaky()
     265  
     266          for _ in range(1025):
     267              with self.assertRaises(TypeError):
     268                  f(o)
     269  
     270  
     271  class ESC[4;38;5;81mTestLoadMethodCache(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     272      def test_descriptor_added_after_optimization(self):
     273          class ESC[4;38;5;81mDescriptor:
     274              pass
     275  
     276          class ESC[4;38;5;81mClass:
     277              attribute = Descriptor()
     278  
     279          def __get__(self, instance, owner):
     280              return lambda: False
     281  
     282          def __set__(self, instance, value):
     283              return None
     284  
     285          def attribute():
     286              return True
     287  
     288          instance = Class()
     289          instance.attribute = attribute
     290  
     291          def f():
     292              return instance.attribute()
     293  
     294          for _ in range(1025):
     295              self.assertTrue(f())
     296  
     297          Descriptor.__get__ = __get__
     298          Descriptor.__set__ = __set__
     299  
     300          for _ in range(1025):
     301              self.assertFalse(f())
     302  
     303      def test_metaclass_descriptor_added_after_optimization(self):
     304          class ESC[4;38;5;81mDescriptor:
     305              pass
     306  
     307          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
     308              attribute = Descriptor()
     309  
     310          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
     311              def attribute():
     312                  return True
     313  
     314          def __get__(self, instance, owner):
     315              return lambda: False
     316  
     317          def __set__(self, instance, value):
     318              return None
     319  
     320          def f():
     321              return Class.attribute()
     322  
     323          for _ in range(1025):
     324              self.assertTrue(f())
     325  
     326          Descriptor.__get__ = __get__
     327          Descriptor.__set__ = __set__
     328  
     329          for _ in range(1025):
     330              self.assertFalse(f())
     331  
     332      def test_metaclass_descriptor_shadows_class_attribute(self):
     333          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
     334              @property
     335              def attribute(self):
     336                  return lambda: True
     337  
     338          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
     339              def attribute():
     340                  return False
     341  
     342          def f():
     343              return Class.attribute()
     344  
     345          for _ in range(1025):
     346              self.assertTrue(f())
     347  
     348      def test_metaclass_set_descriptor_after_optimization(self):
     349          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
     350              pass
     351  
     352          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
     353              def attribute():
     354                  return True
     355  
     356          @property
     357          def attribute(self):
     358              return lambda: False
     359  
     360          def f():
     361              return Class.attribute()
     362  
     363          for _ in range(1025):
     364              self.assertTrue(f())
     365  
     366          Metaclass.attribute = attribute
     367  
     368          for _ in range(1025):
     369              self.assertFalse(f())
     370  
     371      def test_metaclass_del_descriptor_after_optimization(self):
     372          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
     373              @property
     374              def attribute(self):
     375                  return lambda: True
     376  
     377          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
     378              def attribute():
     379                  return False
     380  
     381          def f():
     382              return Class.attribute()
     383  
     384          for _ in range(1025):
     385              self.assertTrue(f())
     386  
     387          del Metaclass.attribute
     388  
     389          for _ in range(1025):
     390              self.assertFalse(f())
     391  
     392      def test_type_descriptor_shadows_attribute_method(self):
     393          class ESC[4;38;5;81mClass:
     394              def mro():
     395                  return ["Spam", "eggs"]
     396  
     397          def f():
     398              return Class.mro()
     399  
     400          for _ in range(1025):
     401              self.assertEqual(f(), ["Spam", "eggs"])
     402  
     403      def test_type_descriptor_shadows_attribute_member(self):
     404          class ESC[4;38;5;81mClass:
     405              def __base__():
     406                  return "Spam"
     407  
     408          def f():
     409              return Class.__base__()
     410  
     411          for _ in range(1025):
     412              self.assertNotEqual(f(), "Spam")
     413  
     414      def test_metaclass_getattribute(self):
     415          class ESC[4;38;5;81mMetaclass(ESC[4;38;5;149mtype):
     416              def __getattribute__(self, name):
     417                  return lambda: True
     418  
     419          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mMetaclass):
     420              def attribute():
     421                  return False
     422  
     423          def f():
     424              return Class.attribute()
     425  
     426          for _ in range(1025):
     427              self.assertTrue(f())
     428  
     429      def test_metaclass_swap(self):
     430          class ESC[4;38;5;81mOldMetaclass(ESC[4;38;5;149mtype):
     431              @property
     432              def attribute(self):
     433                  return lambda: True
     434  
     435          class ESC[4;38;5;81mNewMetaclass(ESC[4;38;5;149mtype):
     436              @property
     437              def attribute(self):
     438                  return lambda: False
     439  
     440          class ESC[4;38;5;81mClass(metaclass=ESC[4;38;5;149mOldMetaclass):
     441              pass
     442  
     443          def f():
     444              return Class.attribute()
     445  
     446          for _ in range(1025):
     447              self.assertTrue(f())
     448  
     449          Class.__class__ = NewMetaclass
     450  
     451          for _ in range(1025):
     452              self.assertFalse(f())
     453  
     454  
     455  class ESC[4;38;5;81mTestCallCache(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     456      def test_too_many_defaults_0(self):
     457          def f():
     458              pass
     459  
     460          f.__defaults__ = (None,)
     461          for _ in range(1025):
     462              f()
     463  
     464      def test_too_many_defaults_1(self):
     465          def f(x):
     466              pass
     467  
     468          f.__defaults__ = (None, None)
     469          for _ in range(1025):
     470              f(None)
     471              f()
     472  
     473      def test_too_many_defaults_2(self):
     474          def f(x, y):
     475              pass
     476  
     477          f.__defaults__ = (None, None, None)
     478          for _ in range(1025):
     479              f(None, None)
     480              f(None)
     481              f()
     482  
     483  
     484  if __name__ == "__main__":
     485      import unittest
     486      unittest.main()