mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
Issue 18111: Add a default argument to min() and max()
This commit is contained in:
parent
d7a034bd75
commit
4d6018fe45
4 changed files with 78 additions and 28 deletions
|
|
@ -847,8 +847,19 @@ class BuiltinTest(unittest.TestCase):
|
|||
self.assertEqual(max(1, 2.0, 3), 3)
|
||||
self.assertEqual(max(1.0, 2, 3), 3)
|
||||
|
||||
self.assertRaises(TypeError, max)
|
||||
self.assertRaises(TypeError, max, 42)
|
||||
self.assertRaises(ValueError, max, ())
|
||||
class BadSeq:
|
||||
def __getitem__(self, index):
|
||||
raise ValueError
|
||||
self.assertRaises(ValueError, max, BadSeq())
|
||||
|
||||
for stmt in (
|
||||
"max(key=int)", # no args
|
||||
"max(default=None)",
|
||||
"max(1, 2, default=None)", # require container for default
|
||||
"max(default=None, key=int)",
|
||||
"max(1, key=int)", # single arg not iterable
|
||||
"max(1, 2, keystone=int)", # wrong keyword
|
||||
"max(1, 2, key=int, abc=int)", # two many keywords
|
||||
|
|
@ -865,6 +876,13 @@ class BuiltinTest(unittest.TestCase):
|
|||
self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
|
||||
self.assertEqual(max(1, 2, key=neg), 1) # two elems
|
||||
|
||||
self.assertEqual(max((), default=None), None) # zero elem iterable
|
||||
self.assertEqual(max((1,), default=None), 1) # one elem iterable
|
||||
self.assertEqual(max((1,2), default=None), 2) # two elem iterable
|
||||
|
||||
self.assertEqual(max((), default=1, key=neg), 1)
|
||||
self.assertEqual(max((1, 2), default=3, key=neg), 1)
|
||||
|
||||
data = [random.randrange(200) for i in range(100)]
|
||||
keys = dict((elem, random.randrange(50)) for elem in data)
|
||||
f = keys.__getitem__
|
||||
|
|
@ -891,6 +909,9 @@ class BuiltinTest(unittest.TestCase):
|
|||
|
||||
for stmt in (
|
||||
"min(key=int)", # no args
|
||||
"min(default=None)",
|
||||
"min(1, 2, default=None)", # require container for default
|
||||
"min(default=None, key=int)",
|
||||
"min(1, key=int)", # single arg not iterable
|
||||
"min(1, 2, keystone=int)", # wrong keyword
|
||||
"min(1, 2, key=int, abc=int)", # two many keywords
|
||||
|
|
@ -907,6 +928,13 @@ class BuiltinTest(unittest.TestCase):
|
|||
self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
|
||||
self.assertEqual(min(1, 2, key=neg), 2) # two elems
|
||||
|
||||
self.assertEqual(min((), default=None), None) # zero elem iterable
|
||||
self.assertEqual(min((1,), default=None), 1) # one elem iterable
|
||||
self.assertEqual(min((1,2), default=None), 1) # two elem iterable
|
||||
|
||||
self.assertEqual(min((), default=1, key=neg), 1)
|
||||
self.assertEqual(min((1, 2), default=1, key=neg), 2)
|
||||
|
||||
data = [random.randrange(200) for i in range(100)]
|
||||
keys = dict((elem, random.randrange(50)) for elem in data)
|
||||
f = keys.__getitem__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue