1cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drakeimport unittest 235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaimport pickle 335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaimport sys 4cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 5ee8712cda46338d223509cc5751fd36509ad3860Benjamin Petersonfrom test import support 6cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 7a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitroupy_operator = support.import_fresh_module('operator', blocked=['_operator']) 8a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrouc_operator = support.import_fresh_module('operator', fresh=['_operator']) 9a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou 10fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigoclass Seq1: 11fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __init__(self, lst): 12fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo self.lst = lst 13fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __len__(self): 14fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return len(self.lst) 15fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __getitem__(self, i): 16fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return self.lst[i] 17fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __add__(self, other): 18fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return self.lst + other.lst 19fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __mul__(self, other): 20fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return self.lst * other 21fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __rmul__(self, other): 22fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return other * self.lst 23fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo 24fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigoclass Seq2(object): 25fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __init__(self, lst): 26fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo self.lst = lst 27fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __len__(self): 28fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return len(self.lst) 29fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __getitem__(self, i): 30fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return self.lst[i] 31fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __add__(self, other): 32fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return self.lst + other.lst 33fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __mul__(self, other): 34fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return self.lst * other 35fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo def __rmul__(self, other): 36fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo return other * self.lst 37fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo 38cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 39a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrouclass OperatorTestCase: 40cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_lt(self): 41a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 42c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.lt) 43c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.lt, 1j, 2j) 44c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.lt(1, 0)) 45c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.lt(1, 0.0)) 46c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.lt(1, 1)) 47c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.lt(1, 1.0)) 48c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.lt(1, 2)) 49c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.lt(1, 2.0)) 50cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 51cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_le(self): 52a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 53c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.le) 54c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.le, 1j, 2j) 55c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.le(1, 0)) 56c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.le(1, 0.0)) 57c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.le(1, 1)) 58c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.le(1, 1.0)) 59c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.le(1, 2)) 60c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.le(1, 2.0)) 61cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 62cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_eq(self): 63a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 64bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald class C(object): 65bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald def __eq__(self, other): 66bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald raise SyntaxError 67c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.eq) 68c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(SyntaxError, operator.eq, C(), C()) 69c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.eq(1, 0)) 70c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.eq(1, 0.0)) 71c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.eq(1, 1)) 72c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.eq(1, 1.0)) 73c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.eq(1, 2)) 74c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.eq(1, 2.0)) 75cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 76cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_ne(self): 77a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 78bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald class C(object): 79bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald def __ne__(self, other): 80bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald raise SyntaxError 81c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.ne) 82c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(SyntaxError, operator.ne, C(), C()) 83c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.ne(1, 0)) 84c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.ne(1, 0.0)) 85c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.ne(1, 1)) 86c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.ne(1, 1.0)) 87c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.ne(1, 2)) 88c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.ne(1, 2.0)) 89cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 90cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_ge(self): 91a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 92c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.ge) 93c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.ge, 1j, 2j) 94c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.ge(1, 0)) 95c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.ge(1, 0.0)) 96c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.ge(1, 1)) 97c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.ge(1, 1.0)) 98c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.ge(1, 2)) 99c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.ge(1, 2.0)) 100cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 101cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_gt(self): 102a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 103c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.gt) 104c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.gt, 1j, 2j) 105c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.gt(1, 0)) 106c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.gt(1, 0.0)) 107c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.gt(1, 1)) 108c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.gt(1, 1.0)) 109c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.gt(1, 2)) 110c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.gt(1, 2.0)) 111cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 112cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_abs(self): 113a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 114c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.abs) 115c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.abs, None) 116e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.abs(-1), 1) 117e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.abs(1), 1) 118cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 119cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_add(self): 120a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 121c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.add) 122c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.add, None, None) 123870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.add(3, 4), 7) 124cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 125cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_bitwise_and(self): 126a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 127c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.and_) 128c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.and_, None, None) 129870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.and_(0xf, 0xa), 0xa) 130cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 131cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_concat(self): 132a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 133c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.concat) 134c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.concat, None, None) 135870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.concat('py', 'thon'), 'python') 136870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.concat([1, 2], [3, 4]), [1, 2, 3, 4]) 137870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.concat(Seq1([5, 6]), Seq1([7])), [5, 6, 7]) 138870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.concat(Seq2([5, 6]), Seq2([7])), [5, 6, 7]) 139c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.concat, 13, 29) 140cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 141cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_countOf(self): 142a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 143c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.countOf) 144c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.countOf, None, None) 145870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.countOf([1, 2, 1, 3, 1, 4], 3), 1) 146870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.countOf([1, 2, 1, 3, 1, 4], 5), 0) 147cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 148cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_delitem(self): 149a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 150cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake a = [4, 3, 2, 1] 151c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.delitem, a) 152c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.delitem, a, None) 153870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertIsNone(operator.delitem(a, 1)) 154870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(a, [4, 2, 1]) 155cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 156cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_floordiv(self): 157a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 158c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.floordiv, 5) 159c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.floordiv, None, None) 160870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.floordiv(5, 2), 2) 161cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 162cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_truediv(self): 163a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 164c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.truediv, 5) 165c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.truediv, None, None) 166870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.truediv(5, 2), 2.5) 167cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 168cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_getitem(self): 169a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 170cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake a = range(10) 171c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.getitem) 172c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.getitem, a, None) 173870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.getitem(a, 2), 2) 174cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 175cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_indexOf(self): 176a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 177c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.indexOf) 178c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.indexOf, None, None) 179870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.indexOf([4, 3, 2, 1], 3), 1) 180cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake self.assertRaises(ValueError, operator.indexOf, [4, 3, 2, 1], 0) 181cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 182cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_invert(self): 183a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 184c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.invert) 185c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.invert, None) 186e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.inv(4), -5) 187cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 188cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_lshift(self): 189a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 190c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.lshift) 191c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.lshift, None, 42) 192870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.lshift(5, 1), 10) 193870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.lshift(5, 0), 5) 194cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake self.assertRaises(ValueError, operator.lshift, 2, -1) 195cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 196cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_mod(self): 197a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 198c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.mod) 199c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.mod, None, 42) 200870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.mod(5, 2), 1) 201cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 202cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_mul(self): 203a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 204c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.mul) 205c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.mul, None, None) 206870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.mul(5, 2), 10) 207cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 208d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson def test_matmul(self): 209d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson operator = self.module 210d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson self.assertRaises(TypeError, operator.matmul) 211d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson self.assertRaises(TypeError, operator.matmul, 42, 42) 212d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson class M: 213d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson def __matmul__(self, other): 214d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson return other - 1 215d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson self.assertEqual(M() @ 42, 41) 216d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson 217cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_neg(self): 218a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 219c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.neg) 220c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.neg, None) 221e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.neg(5), -5) 222e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.neg(-5), 5) 223e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.neg(0), 0) 224e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.neg(-0), 0) 225cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 226cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_bitwise_or(self): 227a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 228c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.or_) 229c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.or_, None, None) 230870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.or_(0xa, 0x5), 0xf) 231cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 232cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_pos(self): 233a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 234c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.pos) 235c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.pos, None) 236e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.pos(5), 5) 237e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.pos(-5), -5) 238e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.pos(0), 0) 239e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.pos(-0), 0) 240cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 2415959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger def test_pow(self): 242a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 243c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.pow) 244c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.pow, None, None) 245e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum self.assertEqual(operator.pow(3,5), 3**5) 2465959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger self.assertRaises(TypeError, operator.pow, 1) 2475959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger self.assertRaises(TypeError, operator.pow, 1, 2, 3) 2485959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger 249cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_rshift(self): 250a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 251c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.rshift) 252c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.rshift, None, 42) 253870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.rshift(5, 1), 2) 254870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.rshift(5, 0), 5) 255cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake self.assertRaises(ValueError, operator.rshift, 2, -1) 256cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 257cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_contains(self): 258a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 259c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.contains) 260c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.contains, None, None) 261c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.contains(range(4), 2)) 262c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.contains(range(4), 5)) 263cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 264cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_setitem(self): 265a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 266805365ee39298f93e433e19ae0dd87c6f782145bGuido van Rossum a = list(range(3)) 267c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.setitem, a) 268c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.setitem, a, None, None) 269870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertIsNone(operator.setitem(a, 0, 2)) 270870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(a, [2, 1, 2]) 271cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake self.assertRaises(IndexError, operator.setitem, a, 4, 2) 272cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 273cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_sub(self): 274a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 275c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.sub) 276c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.sub, None, None) 277870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.sub(5, 2), 3) 278cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 279cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_truth(self): 280a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 281bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald class C(object): 2824dafcc4ece09c2a60473bb109513de4e7d2c2b11Jack Diederich def __bool__(self): 283bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald raise SyntaxError 284c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.truth) 285c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(SyntaxError, operator.truth, C()) 286c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.truth(5)) 287c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.truth([0])) 288c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.truth(0)) 289c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.truth([])) 290cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 291cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake def test_bitwise_xor(self): 292a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 293c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.xor) 294c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.xor, None, None) 295870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou self.assertEqual(operator.xor(0xb, 0xc), 0x7) 296cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 2979543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger def test_is(self): 298a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 2999543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger a = b = 'xyzpdq' 3009543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger c = a[:3] + b[3:] 301c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.is_) 302c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.is_(a, b)) 303c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.is_(a,c)) 3049543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger 3059543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger def test_is_not(self): 306a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 3079543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger a = b = 'xyzpdq' 3089543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger c = a[:3] + b[3:] 309c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(TypeError, operator.is_not) 310c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertFalse(operator.is_not(a, b)) 311c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertTrue(operator.is_not(a,c)) 312cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake 313166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger def test_attrgetter(self): 314a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 315166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger class A: 316166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger pass 317166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger a = A() 318166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger a.name = 'arthur' 319166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger f = operator.attrgetter('name') 320166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger self.assertEqual(f(a), 'arthur') 321c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka self.assertRaises(TypeError, f) 322c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka self.assertRaises(TypeError, f, a, 'dent') 323c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka self.assertRaises(TypeError, f, a, surname='dent') 324166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger f = operator.attrgetter('rank') 325166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger self.assertRaises(AttributeError, f, a) 326e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou self.assertRaises(TypeError, operator.attrgetter, 2) 327166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger self.assertRaises(TypeError, operator.attrgetter) 328984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger 329984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger # multiple gets 330984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger record = A() 331984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger record.x = 'X' 332984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger record.y = 'Y' 333984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger record.z = 'Z' 334984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger self.assertEqual(operator.attrgetter('x','z','y')(record), ('X', 'Z', 'Y')) 335e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou self.assertRaises(TypeError, operator.attrgetter, ('x', (), 'y')) 336166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger 337bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald class C(object): 3389bd667ad030913ead3a789f45e73c26f9f28fb46Christian Heimes def __getattr__(self, name): 339bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald raise SyntaxError 340c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(SyntaxError, operator.attrgetter('foo'), C()) 341bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald 342d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes # recursive gets 343d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes a = A() 344d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes a.name = 'arthur' 345d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes a.child = A() 346d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes a.child.name = 'thomas' 347d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes f = operator.attrgetter('child.name') 348d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes self.assertEqual(f(a), 'thomas') 349d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes self.assertRaises(AttributeError, f, a.child) 350d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes f = operator.attrgetter('name', 'child.name') 351d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes self.assertEqual(f(a), ('arthur', 'thomas')) 352d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes f = operator.attrgetter('name', 'child.name', 'child.child.name') 353d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes self.assertRaises(AttributeError, f, a) 354e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou f = operator.attrgetter('child.') 355e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou self.assertRaises(AttributeError, f, a) 356e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou f = operator.attrgetter('.child') 357e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou self.assertRaises(AttributeError, f, a) 358d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes 359d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes a.child.child = A() 360d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes a.child.child.name = 'johnson' 361d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes f = operator.attrgetter('child.child.name') 362d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes self.assertEqual(f(a), 'johnson') 363d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes f = operator.attrgetter('name', 'child.name', 'child.child.name') 364d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes self.assertEqual(f(a), ('arthur', 'thomas', 'johnson')) 365d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes 366166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger def test_itemgetter(self): 367a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 368166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger a = 'ABCDE' 369166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger f = operator.itemgetter(2) 370166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger self.assertEqual(f(a), 'C') 371c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka self.assertRaises(TypeError, f) 372c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka self.assertRaises(TypeError, f, a, 3) 373c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka self.assertRaises(TypeError, f, a, size=3) 374166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger f = operator.itemgetter(10) 375166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger self.assertRaises(IndexError, f, a) 376166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger 377bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald class C(object): 3789bd667ad030913ead3a789f45e73c26f9f28fb46Christian Heimes def __getitem__(self, name): 379bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald raise SyntaxError 380c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson self.assertRaises(SyntaxError, operator.itemgetter(42), C()) 381bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald 382166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger f = operator.itemgetter('name') 383166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger self.assertRaises(TypeError, f, a) 384166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger self.assertRaises(TypeError, operator.itemgetter) 385166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger 386166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger d = dict(key='val') 387166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger f = operator.itemgetter('key') 388166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger self.assertEqual(f(d), 'val') 389166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger f = operator.itemgetter('nonkey') 390166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger self.assertRaises(KeyError, f, d) 391166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger 392166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger # example used in the docs 393166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)] 394166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger getcount = operator.itemgetter(1) 395c1f779cb015272412e4da2e5cb61b4e8cdcbf191Guido van Rossum self.assertEqual(list(map(getcount, inventory)), [3, 2, 5, 1]) 39664958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger self.assertEqual(sorted(inventory, key=getcount), 397166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]) 398166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger 399984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger # multiple gets 400c1f779cb015272412e4da2e5cb61b4e8cdcbf191Guido van Rossum data = list(map(str, range(20))) 401984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger self.assertEqual(operator.itemgetter(2,10,5)(data), ('2', '10', '5')) 402984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger self.assertRaises(TypeError, operator.itemgetter(2, 'x', 5), data) 403984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger 404d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes def test_methodcaller(self): 405a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 406d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes self.assertRaises(TypeError, operator.methodcaller) 40735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertRaises(TypeError, operator.methodcaller, 12) 408d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes class A: 409d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes def foo(self, *args, **kwds): 410d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes return args[0] + args[1] 411d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes def bar(self, f=42): 412d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes return f 413a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou def baz(*args, **kwds): 414a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou return kwds['name'], kwds['self'] 415d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes a = A() 416d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes f = operator.methodcaller('foo') 417d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes self.assertRaises(IndexError, f, a) 418d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes f = operator.methodcaller('foo', 1, 2) 419b3aedd48621ed9d33b5f42f946b256bce4a50673Ezio Melotti self.assertEqual(f(a), 3) 420c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka self.assertRaises(TypeError, f) 421c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka self.assertRaises(TypeError, f, a, 3) 422c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka self.assertRaises(TypeError, f, a, spam=3) 423d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes f = operator.methodcaller('bar') 424b3aedd48621ed9d33b5f42f946b256bce4a50673Ezio Melotti self.assertEqual(f(a), 42) 425d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes self.assertRaises(TypeError, f, a, a) 426d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes f = operator.methodcaller('bar', f=5) 427b3aedd48621ed9d33b5f42f946b256bce4a50673Ezio Melotti self.assertEqual(f(a), 5) 428a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou f = operator.methodcaller('baz', name='spam', self='eggs') 429a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou self.assertEqual(f(a), ('spam', 'eggs')) 430d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes 431f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def test_inplace(self): 432a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 433f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo class C(object): 434f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __iadd__ (self, other): return "iadd" 435f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __iand__ (self, other): return "iand" 436f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __ifloordiv__(self, other): return "ifloordiv" 437f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __ilshift__ (self, other): return "ilshift" 438f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __imod__ (self, other): return "imod" 439f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __imul__ (self, other): return "imul" 440d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson def __imatmul__ (self, other): return "imatmul" 441f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __ior__ (self, other): return "ior" 442f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __ipow__ (self, other): return "ipow" 443f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __irshift__ (self, other): return "irshift" 444f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __isub__ (self, other): return "isub" 445f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __itruediv__ (self, other): return "itruediv" 446f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __ixor__ (self, other): return "ixor" 447f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo def __getitem__(self, other): return 5 # so that C is a sequence 448f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo c = C() 449f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.iadd (c, 5), "iadd") 450f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.iand (c, 5), "iand") 451f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.ifloordiv(c, 5), "ifloordiv") 452f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.ilshift (c, 5), "ilshift") 453f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.imod (c, 5), "imod") 454f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.imul (c, 5), "imul") 455d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson self.assertEqual(operator.imatmul (c, 5), "imatmul") 456f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.ior (c, 5), "ior") 457f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.ipow (c, 5), "ipow") 458f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.irshift (c, 5), "irshift") 459f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.isub (c, 5), "isub") 460f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.itruediv (c, 5), "itruediv") 461f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.ixor (c, 5), "ixor") 462f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo self.assertEqual(operator.iconcat (c, c), "iadd") 463984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger 464aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher def test_length_hint(self): 465a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 466aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher class X(object): 467aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher def __init__(self, value): 468aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher self.value = value 469aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher 470aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher def __length_hint__(self): 471aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher if type(self.value) is type: 472aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher raise self.value 473aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher else: 474aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher return self.value 475aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher 476aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher self.assertEqual(operator.length_hint([], 2), 0) 477aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher self.assertEqual(operator.length_hint(iter([1, 2, 3])), 3) 478aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher 479aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher self.assertEqual(operator.length_hint(X(2)), 2) 480aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher self.assertEqual(operator.length_hint(X(NotImplemented), 4), 4) 481aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher self.assertEqual(operator.length_hint(X(TypeError), 12), 12) 482aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher with self.assertRaises(TypeError): 483aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher operator.length_hint(X("abc")) 484aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher with self.assertRaises(ValueError): 485aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher operator.length_hint(X(-2)) 486aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher with self.assertRaises(LookupError): 487aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher operator.length_hint(X(LookupError)) 488aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher 489a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou def test_dunder_is_original(self): 490a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou operator = self.module 491aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher 492a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou names = [name for name in dir(operator) if not name.startswith('_')] 493a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou for name in names: 494a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou orig = getattr(operator, name) 495a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou dunder = getattr(operator, '__' + name.strip('_') + '__', None) 496a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou if dunder: 497a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou self.assertIs(dunder, orig) 498984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger 499a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrouclass PyOperatorTestCase(OperatorTestCase, unittest.TestCase): 500a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou module = py_operator 5012e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake 502a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou@unittest.skipUnless(c_operator, 'requires _operator') 503a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrouclass COperatorTestCase(OperatorTestCase, unittest.TestCase): 504a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou module = c_operator 5052e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake 50635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 50735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass OperatorPickleTestCase: 50835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka def copy(self, obj, proto): 50935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka with support.swap_item(sys.modules, 'operator', self.module): 51035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka pickled = pickle.dumps(obj, proto) 51135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka with support.swap_item(sys.modules, 'operator', self.module2): 51235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka return pickle.loads(pickled) 51335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 51435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka def test_attrgetter(self): 51535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka attrgetter = self.module.attrgetter 51635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka class A: 51735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka pass 51835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka a = A() 51935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka a.x = 'X' 52035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka a.y = 'Y' 52135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka a.z = 'Z' 52235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka a.t = A() 52335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka a.t.u = A() 52435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka a.t.u.v = 'V' 52535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 52635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka with self.subTest(proto=proto): 52735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f = attrgetter('x') 52835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f2 = self.copy(f, proto) 52935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(repr(f2), repr(f)) 53035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(f2(a), f(a)) 53135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka # multiple gets 53235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f = attrgetter('x', 'y', 'z') 53335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f2 = self.copy(f, proto) 53435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(repr(f2), repr(f)) 53535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(f2(a), f(a)) 53635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka # recursive gets 53735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f = attrgetter('t.u.v') 53835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f2 = self.copy(f, proto) 53935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(repr(f2), repr(f)) 54035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(f2(a), f(a)) 54135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 54235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka def test_itemgetter(self): 54335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka itemgetter = self.module.itemgetter 54435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka a = 'ABCDE' 54535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 54635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka with self.subTest(proto=proto): 54735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f = itemgetter(2) 54835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f2 = self.copy(f, proto) 54935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(repr(f2), repr(f)) 55035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(f2(a), f(a)) 55135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka # multiple gets 55235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f = itemgetter(2, 0, 4) 55335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f2 = self.copy(f, proto) 55435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(repr(f2), repr(f)) 55535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(f2(a), f(a)) 55635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 55735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka def test_methodcaller(self): 55835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka methodcaller = self.module.methodcaller 55935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka class A: 56035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka def foo(self, *args, **kwds): 56135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka return args[0] + args[1] 56235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka def bar(self, f=42): 56335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka return f 56435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka def baz(*args, **kwds): 56535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka return kwds['name'], kwds['self'] 56635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka a = A() 56735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka for proto in range(pickle.HIGHEST_PROTOCOL + 1): 56835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka with self.subTest(proto=proto): 56935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f = methodcaller('bar') 57035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f2 = self.copy(f, proto) 57135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(repr(f2), repr(f)) 57235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(f2(a), f(a)) 57335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka # positional args 57435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f = methodcaller('foo', 1, 2) 57535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f2 = self.copy(f, proto) 57635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(repr(f2), repr(f)) 57735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(f2(a), f(a)) 57835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka # keyword args 57935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f = methodcaller('bar', f=5) 58035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f2 = self.copy(f, proto) 58135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(repr(f2), repr(f)) 58235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(f2(a), f(a)) 58335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f = methodcaller('baz', self='eggs', name='spam') 58435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka f2 = self.copy(f, proto) 58535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka # Can't test repr consistently with multiple keyword args 58635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka self.assertEqual(f2(a), f(a)) 58735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 58835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass PyPyOperatorPickleTestCase(OperatorPickleTestCase, unittest.TestCase): 58935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka module = py_operator 59035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka module2 = py_operator 59135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 59235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka@unittest.skipUnless(c_operator, 'requires _operator') 59335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass PyCOperatorPickleTestCase(OperatorPickleTestCase, unittest.TestCase): 59435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka module = py_operator 59535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka module2 = c_operator 59635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 59735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka@unittest.skipUnless(c_operator, 'requires _operator') 59835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass CPyOperatorPickleTestCase(OperatorPickleTestCase, unittest.TestCase): 59935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka module = c_operator 60035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka module2 = py_operator 60135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 60235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka@unittest.skipUnless(c_operator, 'requires _operator') 60335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass CCOperatorPickleTestCase(OperatorPickleTestCase, unittest.TestCase): 60435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka module = c_operator 60535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka module2 = c_operator 60635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 60735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka 6082e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drakeif __name__ == "__main__": 609a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou unittest.main() 610