MCPcopy Index your code
hub / github.com/RustPython/RustPython / test_reduce

Method test_reduce

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

Source from the content-addressed store, hash-verified

971
972class TestReduce:
973 def test_reduce(self):
974 class Squares:
975 def __init__(self, max):
976 self.max = max
977 self.sofar = []
978
979 def __len__(self):
980 return len(self.sofar)
981
982 def __getitem__(self, i):
983 if not 0 <= i < self.max: raise IndexError
984 n = len(self.sofar)
985 while n <= i:
986 self.sofar.append(n*n)
987 n += 1
988 return self.sofar[i]
989 def add(x, y):
990 return x + y
991 self.assertEqual(self.reduce(add, ['a', 'b', 'c'], ''), 'abc')
992 self.assertEqual(
993 self.reduce(add, [['a', 'c'], [], ['d', 'w']], []),
994 ['a','c','d','w']
995 )
996 self.assertEqual(self.reduce(lambda x, y: x*y, range(2,8), 1), 5040)
997 self.assertEqual(
998 self.reduce(lambda x, y: x*y, range(2,21), 1),
999 2432902008176640000
1000 )
1001 self.assertEqual(self.reduce(add, Squares(10)), 285)
1002 self.assertEqual(self.reduce(add, Squares(10), 0), 285)
1003 self.assertEqual(self.reduce(add, Squares(0), 0), 0)
1004 self.assertRaises(TypeError, self.reduce)
1005 self.assertRaises(TypeError, self.reduce, 42, 42)
1006 self.assertRaises(TypeError, self.reduce, 42, 42, 42)
1007 self.assertEqual(self.reduce(42, "1"), "1") # func is never called with one item
1008 self.assertEqual(self.reduce(42, "", "1"), "1") # func is never called with one item
1009 self.assertRaises(TypeError, self.reduce, 42, (42, 42))
1010 self.assertRaises(TypeError, self.reduce, add, []) # arg 2 must not be empty sequence with no initial value
1011 self.assertRaises(TypeError, self.reduce, add, "")
1012 self.assertRaises(TypeError, self.reduce, add, ())
1013 self.assertRaises(TypeError, self.reduce, add, object())
1014
1015 class TestFailingIter:
1016 def __iter__(self):
1017 raise RuntimeError
1018 self.assertRaises(RuntimeError, self.reduce, add, TestFailingIter())
1019
1020 self.assertEqual(self.reduce(add, [], None), None)
1021 self.assertEqual(self.reduce(add, [], 42), 42)
1022
1023 class BadSeq:
1024 def __getitem__(self, index):
1025 raise ValueError
1026 self.assertRaises(ValueError, self.reduce, 42, BadSeq())
1027
1028 # Test reduce()'s use of iterators.
1029 def test_iterator_usage(self):

Callers

nothing calls this directly

Calls 6

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

Tested by

no test coverage detected