(root)/
Python-3.11.7/
Lib/
test/
test_augassign.py
       1  # Augmented assignment test.
       2  
       3  import unittest
       4  
       5  
       6  class ESC[4;38;5;81mAugAssignTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
       7      def testBasic(self):
       8          x = 2
       9          x += 1
      10          x *= 2
      11          x **= 2
      12          x -= 8
      13          x //= 5
      14          x %= 3
      15          x &= 2
      16          x |= 5
      17          x ^= 1
      18          x /= 2
      19          self.assertEqual(x, 3.0)
      20  
      21      def test_with_unpacking(self):
      22          self.assertRaises(SyntaxError, compile, "x, b += 3", "<test>", "exec")
      23  
      24      def testInList(self):
      25          x = [2]
      26          x[0] += 1
      27          x[0] *= 2
      28          x[0] **= 2
      29          x[0] -= 8
      30          x[0] //= 5
      31          x[0] %= 3
      32          x[0] &= 2
      33          x[0] |= 5
      34          x[0] ^= 1
      35          x[0] /= 2
      36          self.assertEqual(x[0], 3.0)
      37  
      38      def testInDict(self):
      39          x = {0: 2}
      40          x[0] += 1
      41          x[0] *= 2
      42          x[0] **= 2
      43          x[0] -= 8
      44          x[0] //= 5
      45          x[0] %= 3
      46          x[0] &= 2
      47          x[0] |= 5
      48          x[0] ^= 1
      49          x[0] /= 2
      50          self.assertEqual(x[0], 3.0)
      51  
      52      def testSequences(self):
      53          x = [1,2]
      54          x += [3,4]
      55          x *= 2
      56  
      57          self.assertEqual(x, [1, 2, 3, 4, 1, 2, 3, 4])
      58  
      59          x = [1, 2, 3]
      60          y = x
      61          x[1:2] *= 2
      62          y[1:2] += [1]
      63  
      64          self.assertEqual(x, [1, 2, 1, 2, 3])
      65          self.assertTrue(x is y)
      66  
      67      def testCustomMethods1(self):
      68  
      69          class ESC[4;38;5;81maug_test:
      70              def __init__(self, value):
      71                  self.val = value
      72              def __radd__(self, val):
      73                  return self.val + val
      74              def __add__(self, val):
      75                  return aug_test(self.val + val)
      76  
      77          class ESC[4;38;5;81maug_test2(ESC[4;38;5;149maug_test):
      78              def __iadd__(self, val):
      79                  self.val = self.val + val
      80                  return self
      81  
      82          class ESC[4;38;5;81maug_test3(ESC[4;38;5;149maug_test):
      83              def __iadd__(self, val):
      84                  return aug_test3(self.val + val)
      85  
      86          class ESC[4;38;5;81maug_test4(ESC[4;38;5;149maug_test3):
      87              """Blocks inheritance, and fallback to __add__"""
      88              __iadd__ = None
      89  
      90          x = aug_test(1)
      91          y = x
      92          x += 10
      93  
      94          self.assertIsInstance(x, aug_test)
      95          self.assertTrue(y is not x)
      96          self.assertEqual(x.val, 11)
      97  
      98          x = aug_test2(2)
      99          y = x
     100          x += 10
     101  
     102          self.assertTrue(y is x)
     103          self.assertEqual(x.val, 12)
     104  
     105          x = aug_test3(3)
     106          y = x
     107          x += 10
     108  
     109          self.assertIsInstance(x, aug_test3)
     110          self.assertTrue(y is not x)
     111          self.assertEqual(x.val, 13)
     112  
     113          x = aug_test4(4)
     114          with self.assertRaises(TypeError):
     115              x += 10
     116  
     117  
     118      def testCustomMethods2(test_self):
     119          output = []
     120  
     121          class ESC[4;38;5;81mtestall:
     122              def __add__(self, val):
     123                  output.append("__add__ called")
     124              def __radd__(self, val):
     125                  output.append("__radd__ called")
     126              def __iadd__(self, val):
     127                  output.append("__iadd__ called")
     128                  return self
     129  
     130              def __sub__(self, val):
     131                  output.append("__sub__ called")
     132              def __rsub__(self, val):
     133                  output.append("__rsub__ called")
     134              def __isub__(self, val):
     135                  output.append("__isub__ called")
     136                  return self
     137  
     138              def __mul__(self, val):
     139                  output.append("__mul__ called")
     140              def __rmul__(self, val):
     141                  output.append("__rmul__ called")
     142              def __imul__(self, val):
     143                  output.append("__imul__ called")
     144                  return self
     145  
     146              def __matmul__(self, val):
     147                  output.append("__matmul__ called")
     148              def __rmatmul__(self, val):
     149                  output.append("__rmatmul__ called")
     150              def __imatmul__(self, val):
     151                  output.append("__imatmul__ called")
     152                  return self
     153  
     154              def __floordiv__(self, val):
     155                  output.append("__floordiv__ called")
     156                  return self
     157              def __ifloordiv__(self, val):
     158                  output.append("__ifloordiv__ called")
     159                  return self
     160              def __rfloordiv__(self, val):
     161                  output.append("__rfloordiv__ called")
     162                  return self
     163  
     164              def __truediv__(self, val):
     165                  output.append("__truediv__ called")
     166                  return self
     167              def __rtruediv__(self, val):
     168                  output.append("__rtruediv__ called")
     169                  return self
     170              def __itruediv__(self, val):
     171                  output.append("__itruediv__ called")
     172                  return self
     173  
     174              def __mod__(self, val):
     175                  output.append("__mod__ called")
     176              def __rmod__(self, val):
     177                  output.append("__rmod__ called")
     178              def __imod__(self, val):
     179                  output.append("__imod__ called")
     180                  return self
     181  
     182              def __pow__(self, val):
     183                  output.append("__pow__ called")
     184              def __rpow__(self, val):
     185                  output.append("__rpow__ called")
     186              def __ipow__(self, val):
     187                  output.append("__ipow__ called")
     188                  return self
     189  
     190              def __or__(self, val):
     191                  output.append("__or__ called")
     192              def __ror__(self, val):
     193                  output.append("__ror__ called")
     194              def __ior__(self, val):
     195                  output.append("__ior__ called")
     196                  return self
     197  
     198              def __and__(self, val):
     199                  output.append("__and__ called")
     200              def __rand__(self, val):
     201                  output.append("__rand__ called")
     202              def __iand__(self, val):
     203                  output.append("__iand__ called")
     204                  return self
     205  
     206              def __xor__(self, val):
     207                  output.append("__xor__ called")
     208              def __rxor__(self, val):
     209                  output.append("__rxor__ called")
     210              def __ixor__(self, val):
     211                  output.append("__ixor__ called")
     212                  return self
     213  
     214              def __rshift__(self, val):
     215                  output.append("__rshift__ called")
     216              def __rrshift__(self, val):
     217                  output.append("__rrshift__ called")
     218              def __irshift__(self, val):
     219                  output.append("__irshift__ called")
     220                  return self
     221  
     222              def __lshift__(self, val):
     223                  output.append("__lshift__ called")
     224              def __rlshift__(self, val):
     225                  output.append("__rlshift__ called")
     226              def __ilshift__(self, val):
     227                  output.append("__ilshift__ called")
     228                  return self
     229  
     230          x = testall()
     231          x + 1
     232          1 + x
     233          x += 1
     234  
     235          x - 1
     236          1 - x
     237          x -= 1
     238  
     239          x * 1
     240          1 * x
     241          x *= 1
     242  
     243          x @ 1
     244          1 @ x
     245          x @= 1
     246  
     247          x / 1
     248          1 / x
     249          x /= 1
     250  
     251          x // 1
     252          1 // x
     253          x //= 1
     254  
     255          x % 1
     256          1 % x
     257          x %= 1
     258  
     259          x ** 1
     260          1 ** x
     261          x **= 1
     262  
     263          x | 1
     264          1 | x
     265          x |= 1
     266  
     267          x & 1
     268          1 & x
     269          x &= 1
     270  
     271          x ^ 1
     272          1 ^ x
     273          x ^= 1
     274  
     275          x >> 1
     276          1 >> x
     277          x >>= 1
     278  
     279          x << 1
     280          1 << x
     281          x <<= 1
     282  
     283          test_self.assertEqual(output, '''\
     284  __add__ called
     285  __radd__ called
     286  __iadd__ called
     287  __sub__ called
     288  __rsub__ called
     289  __isub__ called
     290  __mul__ called
     291  __rmul__ called
     292  __imul__ called
     293  __matmul__ called
     294  __rmatmul__ called
     295  __imatmul__ called
     296  __truediv__ called
     297  __rtruediv__ called
     298  __itruediv__ called
     299  __floordiv__ called
     300  __rfloordiv__ called
     301  __ifloordiv__ called
     302  __mod__ called
     303  __rmod__ called
     304  __imod__ called
     305  __pow__ called
     306  __rpow__ called
     307  __ipow__ called
     308  __or__ called
     309  __ror__ called
     310  __ior__ called
     311  __and__ called
     312  __rand__ called
     313  __iand__ called
     314  __xor__ called
     315  __rxor__ called
     316  __ixor__ called
     317  __rshift__ called
     318  __rrshift__ called
     319  __irshift__ called
     320  __lshift__ called
     321  __rlshift__ called
     322  __ilshift__ called
     323  '''.splitlines())
     324  
     325  if __name__ == '__main__':
     326      unittest.main()