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()