github.com/grumpyhome/grumpy@v0.3.1-0.20201208125205-7b775405bdf1/grumpy-runtime-src/third_party/stdlib/test/test_slice.py (about)

     1  # tests for slice objects; in particular the indices method.
     2  
     3  import unittest
     4  import weakref
     5  
     6  # from cPickle import loads, dumps
     7  from test import test_support
     8  
     9  import sys
    10  
    11  class SliceTest(unittest.TestCase):
    12  
    13      def test_constructor(self):
    14          self.assertRaises(TypeError, slice)
    15          self.assertRaises(TypeError, slice, 1, 2, 3, 4)
    16  
    17      def test_repr(self):
    18          self.assertEqual(repr(slice(1, 2, 3)), "slice(1, 2, 3)")
    19  
    20      def test_hash(self):
    21          # Verify clearing of SF bug #800796
    22          self.assertRaises(TypeError, hash, slice(5))
    23          with self.assertRaises(TypeError):
    24              slice(5).__hash__()
    25  
    26      @unittest.expectedFailure
    27      def test_cmp(self):
    28          s1 = slice(1, 2, 3)
    29          s2 = slice(1, 2, 3)
    30          s3 = slice(1, 2, 4)
    31          self.assertEqual(s1, s2)
    32          self.assertNotEqual(s1, s3)
    33  
    34          class Exc(Exception):
    35              pass
    36  
    37          class BadCmp(object):
    38              def __eq__(self, other):
    39                  raise Exc
    40              __hash__ = None # Silence Py3k warning
    41  
    42          s1 = slice(BadCmp())
    43          s2 = slice(BadCmp())
    44          self.assertRaises(Exc, cmp, s1, s2)
    45          self.assertEqual(s1, s1)
    46  
    47          s1 = slice(1, BadCmp())
    48          s2 = slice(1, BadCmp())
    49          self.assertEqual(s1, s1)
    50          self.assertRaises(Exc, cmp, s1, s2)
    51  
    52          s1 = slice(1, 2, BadCmp())
    53          s2 = slice(1, 2, BadCmp())
    54          self.assertEqual(s1, s1)
    55          self.assertRaises(Exc, cmp, s1, s2)
    56  
    57      def test_members(self):
    58          s = slice(1)
    59          self.assertEqual(s.start, None)
    60          self.assertEqual(s.stop, 1)
    61          self.assertEqual(s.step, None)
    62  
    63          s = slice(1, 2)
    64          self.assertEqual(s.start, 1)
    65          self.assertEqual(s.stop, 2)
    66          self.assertEqual(s.step, None)
    67  
    68          s = slice(1, 2, 3)
    69          self.assertEqual(s.start, 1)
    70          self.assertEqual(s.stop, 2)
    71          self.assertEqual(s.step, 3)
    72  
    73          class AnyClass(object):
    74              pass
    75  
    76          obj = AnyClass()
    77          s = slice(obj)
    78          self.assertTrue(s.stop is obj)
    79  
    80      @unittest.expectedFailure
    81      def test_indices(self):
    82          self.assertEqual(slice(None           ).indices(10), (0, 10,  1))
    83          self.assertEqual(slice(None,  None,  2).indices(10), (0, 10,  2))
    84          self.assertEqual(slice(1,     None,  2).indices(10), (1, 10,  2))
    85          self.assertEqual(slice(None,  None, -1).indices(10), (9, -1, -1))
    86          self.assertEqual(slice(None,  None, -2).indices(10), (9, -1, -2))
    87          self.assertEqual(slice(3,     None, -2).indices(10), (3, -1, -2))
    88          # issue 3004 tests
    89          self.assertEqual(slice(None, -9).indices(10), (0, 1, 1))
    90          self.assertEqual(slice(None, -10).indices(10), (0, 0, 1))
    91          self.assertEqual(slice(None, -11).indices(10), (0, 0, 1))
    92          self.assertEqual(slice(None, -10, -1).indices(10), (9, 0, -1))
    93          self.assertEqual(slice(None, -11, -1).indices(10), (9, -1, -1))
    94          self.assertEqual(slice(None, -12, -1).indices(10), (9, -1, -1))
    95          self.assertEqual(slice(None, 9).indices(10), (0, 9, 1))
    96          self.assertEqual(slice(None, 10).indices(10), (0, 10, 1))
    97          self.assertEqual(slice(None, 11).indices(10), (0, 10, 1))
    98          self.assertEqual(slice(None, 8, -1).indices(10), (9, 8, -1))
    99          self.assertEqual(slice(None, 9, -1).indices(10), (9, 9, -1))
   100          self.assertEqual(slice(None, 10, -1).indices(10), (9, 9, -1))
   101  
   102          self.assertEqual(
   103              slice(-100,  100     ).indices(10),
   104              slice(None).indices(10)
   105          )
   106          self.assertEqual(
   107              slice(100,  -100,  -1).indices(10),
   108              slice(None, None, -1).indices(10)
   109          )
   110          self.assertEqual(slice(-100L, 100L, 2L).indices(10), (0, 10,  2))
   111  
   112          self.assertEqual(range(10)[::sys.maxint - 1], [0])
   113  
   114          self.assertRaises(OverflowError, slice(None).indices, 1L<<100)
   115  
   116      @unittest.expectedFailure
   117      def test_setslice_without_getslice(self):
   118          tmp = []
   119          class X(object):
   120              def __setslice__(self, i, j, k):
   121                  tmp.append((i, j, k))
   122  
   123          x = X()
   124          with test_support.check_py3k_warnings():
   125              x[1:2] = 42
   126          self.assertEqual(tmp, [(1, 2, 42)])
   127  
   128      # def test_pickle(self):
   129      #     s = slice(10, 20, 3)
   130      #     for protocol in (0,1,2):
   131      #         t = loads(dumps(s, protocol))
   132      #         self.assertEqual(s, t)
   133      #         self.assertEqual(s.indices(15), t.indices(15))
   134      #         self.assertNotEqual(id(s), id(t))
   135  
   136      @unittest.expectedFailure
   137      def test_cycle(self):
   138          class myobj(object): pass
   139          o = myobj()
   140          o.s = slice(o)
   141          w = weakref.ref(o)
   142          o = None
   143          test_support.gc_collect()
   144          self.assertIsNone(w())
   145  
   146  def test_main():
   147      test_support.run_unittest(SliceTest)
   148  
   149  if __name__ == "__main__":
   150      test_main()