MCPcopy Index your code
hub / github.com/python/cpython / test_reduce

Method test_reduce

Lib/test/test_functools.py:1037–1090  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

1035
1036class TestReduce:
1037 def test_reduce(self):
1038 class Squares:
1039 def __init__(self, max):
1040 self.max = max
1041 self.sofar = []
1042
1043 def __len__(self):
1044 return len(self.sofar)
1045
1046 def __getitem__(self, i):
1047 if not 0 <= i < self.max: raise IndexError
1048 n = len(self.sofar)
1049 while n <= i:
1050 self.sofar.append(n*n)
1051 n += 1
1052 return self.sofar[i]
1053 def add(x, y):
1054 return x + y
1055 self.assertEqual(self.reduce(add, ['a', 'b', 'c'], ''), 'abc')
1056 self.assertEqual(
1057 self.reduce(add, [['a', 'c'], [], ['d', 'w']], []),
1058 ['a','c','d','w']
1059 )
1060 self.assertEqual(self.reduce(lambda x, y: x*y, range(2,8), 1), 5040)
1061 self.assertEqual(
1062 self.reduce(lambda x, y: x*y, range(2,21), 1),
1063 2432902008176640000
1064 )
1065 self.assertEqual(self.reduce(add, Squares(10)), 285)
1066 self.assertEqual(self.reduce(add, Squares(10), 0), 285)
1067 self.assertEqual(self.reduce(add, Squares(0), 0), 0)
1068 self.assertRaises(TypeError, self.reduce)
1069 self.assertRaises(TypeError, self.reduce, 42, 42)
1070 self.assertRaises(TypeError, self.reduce, 42, 42, 42)
1071 self.assertEqual(self.reduce(42, "1"), "1") # func is never called with one item
1072 self.assertEqual(self.reduce(42, "", "1"), "1") # func is never called with one item
1073 self.assertRaises(TypeError, self.reduce, 42, (42, 42))
1074 self.assertRaises(TypeError, self.reduce, add, []) # arg 2 must not be empty sequence with no initial value
1075 self.assertRaises(TypeError, self.reduce, add, "")
1076 self.assertRaises(TypeError, self.reduce, add, ())
1077 self.assertRaises(TypeError, self.reduce, add, object())
1078
1079 class TestFailingIter:
1080 def __iter__(self):
1081 raise RuntimeError
1082 self.assertRaises(RuntimeError, self.reduce, add, TestFailingIter())
1083
1084 self.assertEqual(self.reduce(add, [], None), None)
1085 self.assertEqual(self.reduce(add, [], 42), 42)
1086
1087 class BadSeq:
1088 def __getitem__(self, index):
1089 raise ValueError
1090 self.assertRaises(ValueError, self.reduce, 42, BadSeq())
1091
1092 # Test reduce()'s use of iterators.
1093 def test_iterator_usage(self):

Callers

nothing calls this directly

Calls 6

reduceMethod · 0.80
SquaresClass · 0.70
TestFailingIterClass · 0.70
BadSeqClass · 0.70
assertEqualMethod · 0.45
assertRaisesMethod · 0.45

Tested by

no test coverage detected