annotate Lib/test/test_bisect.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 33bdd0a985b9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
1 import sys
27266
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
2 import unittest
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 45495
diff changeset
3 from test import support
45302
b1cb6b44b798 Move UserList to collections.
Raymond Hettinger <python@rcn.com>
parents: 42142
diff changeset
4 from collections import UserList
27266
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
5
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
6 py_bisect = support.import_fresh_module('bisect', blocked=['_bisect'])
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
7 c_bisect = support.import_fresh_module('bisect', fresh=['_bisect'])
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
8
76995
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
9 class Range(object):
81788
a375c3d88c7e Tweak a comment to be in line with Python 3
Brett Cannon <brett@python.org>
parents: 81346
diff changeset
10 """A trivial range()-like object that has an insert() method."""
76995
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
11 def __init__(self, start, stop):
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
12 self.start = start
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
13 self.stop = stop
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
14 self.last_insert = None
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
15
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
16 def __len__(self):
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
17 return self.stop - self.start
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
18
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
19 def __getitem__(self, idx):
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
20 n = self.stop - self.start
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
21 if idx < 0:
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
22 idx += n
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
23 if idx >= n:
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
24 raise IndexError(idx)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
25 return self.start + idx
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
26
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
27 def insert(self, idx, item):
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
28 self.last_insert = idx, item
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
29
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
30
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
31 class TestBisect:
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
32 def setUp(self):
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
33 self.precomputedCases = [
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
34 (self.module.bisect_right, [], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
35 (self.module.bisect_right, [1], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
36 (self.module.bisect_right, [1], 1, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
37 (self.module.bisect_right, [1], 2, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
38 (self.module.bisect_right, [1, 1], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
39 (self.module.bisect_right, [1, 1], 1, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
40 (self.module.bisect_right, [1, 1], 2, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
41 (self.module.bisect_right, [1, 1, 1], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
42 (self.module.bisect_right, [1, 1, 1], 1, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
43 (self.module.bisect_right, [1, 1, 1], 2, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
44 (self.module.bisect_right, [1, 1, 1, 1], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
45 (self.module.bisect_right, [1, 1, 1, 1], 1, 4),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
46 (self.module.bisect_right, [1, 1, 1, 1], 2, 4),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
47 (self.module.bisect_right, [1, 2], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
48 (self.module.bisect_right, [1, 2], 1, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
49 (self.module.bisect_right, [1, 2], 1.5, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
50 (self.module.bisect_right, [1, 2], 2, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
51 (self.module.bisect_right, [1, 2], 3, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
52 (self.module.bisect_right, [1, 1, 2, 2], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
53 (self.module.bisect_right, [1, 1, 2, 2], 1, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
54 (self.module.bisect_right, [1, 1, 2, 2], 1.5, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
55 (self.module.bisect_right, [1, 1, 2, 2], 2, 4),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
56 (self.module.bisect_right, [1, 1, 2, 2], 3, 4),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
57 (self.module.bisect_right, [1, 2, 3], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
58 (self.module.bisect_right, [1, 2, 3], 1, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
59 (self.module.bisect_right, [1, 2, 3], 1.5, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
60 (self.module.bisect_right, [1, 2, 3], 2, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
61 (self.module.bisect_right, [1, 2, 3], 2.5, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
62 (self.module.bisect_right, [1, 2, 3], 3, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
63 (self.module.bisect_right, [1, 2, 3], 4, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
64 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
65 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
66 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1.5, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
67 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
68 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2.5, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
69 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3, 6),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
70 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3.5, 6),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
71 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 4, 10),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
72 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 5, 10),
15673
67b3ac439f64 Fred, THIS NEEDS DOCS! The function docstrings tell the tale.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
73
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
74 (self.module.bisect_left, [], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
75 (self.module.bisect_left, [1], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
76 (self.module.bisect_left, [1], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
77 (self.module.bisect_left, [1], 2, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
78 (self.module.bisect_left, [1, 1], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
79 (self.module.bisect_left, [1, 1], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
80 (self.module.bisect_left, [1, 1], 2, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
81 (self.module.bisect_left, [1, 1, 1], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
82 (self.module.bisect_left, [1, 1, 1], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
83 (self.module.bisect_left, [1, 1, 1], 2, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
84 (self.module.bisect_left, [1, 1, 1, 1], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
85 (self.module.bisect_left, [1, 1, 1, 1], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
86 (self.module.bisect_left, [1, 1, 1, 1], 2, 4),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
87 (self.module.bisect_left, [1, 2], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
88 (self.module.bisect_left, [1, 2], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
89 (self.module.bisect_left, [1, 2], 1.5, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
90 (self.module.bisect_left, [1, 2], 2, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
91 (self.module.bisect_left, [1, 2], 3, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
92 (self.module.bisect_left, [1, 1, 2, 2], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
93 (self.module.bisect_left, [1, 1, 2, 2], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
94 (self.module.bisect_left, [1, 1, 2, 2], 1.5, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
95 (self.module.bisect_left, [1, 1, 2, 2], 2, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
96 (self.module.bisect_left, [1, 1, 2, 2], 3, 4),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
97 (self.module.bisect_left, [1, 2, 3], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
98 (self.module.bisect_left, [1, 2, 3], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
99 (self.module.bisect_left, [1, 2, 3], 1.5, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
100 (self.module.bisect_left, [1, 2, 3], 2, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
101 (self.module.bisect_left, [1, 2, 3], 2.5, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
102 (self.module.bisect_left, [1, 2, 3], 3, 2),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
103 (self.module.bisect_left, [1, 2, 3], 4, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
104 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 0, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
105 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1, 0),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
106 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1.5, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
107 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2, 1),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
108 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2.5, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
109 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3, 3),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
110 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3.5, 6),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
111 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 4, 6),
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
112 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 5, 10)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
113 ]
15673
67b3ac439f64 Fred, THIS NEEDS DOCS! The function docstrings tell the tale.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
114
27266
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
115 def test_precomputed(self):
27269
dbe4f57e8bb2 Let test_random cover the endpoints.
Raymond Hettinger <python@rcn.com>
parents: 27268
diff changeset
116 for func, data, elem, expected in self.precomputedCases:
dbe4f57e8bb2 Let test_random cover the endpoints.
Raymond Hettinger <python@rcn.com>
parents: 27268
diff changeset
117 self.assertEqual(func(data, elem), expected)
31353
ed20259a1ea5 SF Patch #864863: Bisect C implementation
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
118 self.assertEqual(func(UserList(data), elem), expected)
27266
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
119
48499
de0bf60f1245 Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
120 def test_negative_lo(self):
de0bf60f1245 Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
121 # Issue 3301
de0bf60f1245 Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
122 mod = self.module
82958
33bdd0a985b9 Issue #17516: do not create useless tuple: remove dummy commas in tests
Victor Stinner <victor.stinner@gmail.com>
parents: 81788
diff changeset
123 self.assertRaises(ValueError, mod.bisect_left, [1, 2, 3], 5, -1, 3)
33bdd0a985b9 Issue #17516: do not create useless tuple: remove dummy commas in tests
Victor Stinner <victor.stinner@gmail.com>
parents: 81788
diff changeset
124 self.assertRaises(ValueError, mod.bisect_right, [1, 2, 3], 5, -1, 3)
33bdd0a985b9 Issue #17516: do not create useless tuple: remove dummy commas in tests
Victor Stinner <victor.stinner@gmail.com>
parents: 81788
diff changeset
125 self.assertRaises(ValueError, mod.insort_left, [1, 2, 3], 5, -1, 3)
33bdd0a985b9 Issue #17516: do not create useless tuple: remove dummy commas in tests
Victor Stinner <victor.stinner@gmail.com>
parents: 81788
diff changeset
126 self.assertRaises(ValueError, mod.insort_right, [1, 2, 3], 5, -1, 3)
48499
de0bf60f1245 Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
127
76323
35a3a7e0d66d Issue 13496: Fix bisect.bisect overflow bug for large collections.
Mark Dickinson <mdickinson@enthought.com>
parents: 55593
diff changeset
128 def test_large_range(self):
35a3a7e0d66d Issue 13496: Fix bisect.bisect overflow bug for large collections.
Mark Dickinson <mdickinson@enthought.com>
parents: 55593
diff changeset
129 # Issue 13496
35a3a7e0d66d Issue 13496: Fix bisect.bisect overflow bug for large collections.
Mark Dickinson <mdickinson@enthought.com>
parents: 55593
diff changeset
130 mod = self.module
76995
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
131 n = sys.maxsize
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
132 data = range(n-1)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
133 self.assertEqual(mod.bisect_left(data, n-3), n-3)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
134 self.assertEqual(mod.bisect_right(data, n-3), n-2)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
135 self.assertEqual(mod.bisect_left(data, n-3, n-10, n), n-3)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
136 self.assertEqual(mod.bisect_right(data, n-3, n-10, n), n-2)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
137
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
138 def test_large_pyrange(self):
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
139 # Same as above, but without C-imposed limits on range() parameters
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
140 mod = self.module
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
141 n = sys.maxsize
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
142 data = Range(0, n-1)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
143 self.assertEqual(mod.bisect_left(data, n-3), n-3)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
144 self.assertEqual(mod.bisect_right(data, n-3), n-2)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
145 self.assertEqual(mod.bisect_left(data, n-3, n-10, n), n-3)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
146 self.assertEqual(mod.bisect_right(data, n-3, n-10, n), n-2)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
147 x = n - 100
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
148 mod.insort_left(data, x, x - 50, x + 50)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
149 self.assertEqual(data.last_insert, (x, x))
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
150 x = n - 200
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
151 mod.insort_right(data, x, x - 50, x + 50)
13900edf13be Forward port additional tests from 2.7 (issue #14829).
Antoine Pitrou <solipsis@pitrou.net>
parents: 76323
diff changeset
152 self.assertEqual(data.last_insert, (x + 1, x))
76323
35a3a7e0d66d Issue 13496: Fix bisect.bisect overflow bug for large collections.
Mark Dickinson <mdickinson@enthought.com>
parents: 55593
diff changeset
153
27269
dbe4f57e8bb2 Let test_random cover the endpoints.
Raymond Hettinger <python@rcn.com>
parents: 27268
diff changeset
154 def test_random(self, n=25):
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
155 from random import randrange
41642
a6eb6acfe04a Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40775
diff changeset
156 for i in range(n):
a6eb6acfe04a Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40775
diff changeset
157 data = [randrange(0, n, 2) for j in range(i)]
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
158 data.sort()
27269
dbe4f57e8bb2 Let test_random cover the endpoints.
Raymond Hettinger <python@rcn.com>
parents: 27268
diff changeset
159 elem = randrange(-1, n+1)
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
160 ip = self.module.bisect_left(data, elem)
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
161 if ip < len(data):
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49493
diff changeset
162 self.assertTrue(elem <= data[ip])
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
163 if ip > 0:
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49493
diff changeset
164 self.assertTrue(data[ip-1] < elem)
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
165 ip = self.module.bisect_right(data, elem)
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
166 if ip < len(data):
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49493
diff changeset
167 self.assertTrue(elem < data[ip])
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
168 if ip > 0:
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49493
diff changeset
169 self.assertTrue(data[ip-1] <= elem)
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
170
27268
be3d1b7e62dc Test optional slice arguments.
Raymond Hettinger <python@rcn.com>
parents: 27267
diff changeset
171 def test_optionalSlicing(self):
27269
dbe4f57e8bb2 Let test_random cover the endpoints.
Raymond Hettinger <python@rcn.com>
parents: 27268
diff changeset
172 for func, data, elem, expected in self.precomputedCases:
41642
a6eb6acfe04a Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40775
diff changeset
173 for lo in range(4):
27269
dbe4f57e8bb2 Let test_random cover the endpoints.
Raymond Hettinger <python@rcn.com>
parents: 27268
diff changeset
174 lo = min(len(data), lo)
41642
a6eb6acfe04a Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40775
diff changeset
175 for hi in range(3,8):
27269
dbe4f57e8bb2 Let test_random cover the endpoints.
Raymond Hettinger <python@rcn.com>
parents: 27268
diff changeset
176 hi = min(len(data), hi)
dbe4f57e8bb2 Let test_random cover the endpoints.
Raymond Hettinger <python@rcn.com>
parents: 27268
diff changeset
177 ip = func(data, elem, lo, hi)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49493
diff changeset
178 self.assertTrue(lo <= ip <= hi)
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
179 if func is self.module.bisect_left and ip < hi:
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49493
diff changeset
180 self.assertTrue(elem <= data[ip])
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
181 if func is self.module.bisect_left and ip > lo:
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49493
diff changeset
182 self.assertTrue(data[ip-1] < elem)
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
183 if func is self.module.bisect_right and ip < hi:
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49493
diff changeset
184 self.assertTrue(elem < data[ip])
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
185 if func is self.module.bisect_right and ip > lo:
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49493
diff changeset
186 self.assertTrue(data[ip-1] <= elem)
27269
dbe4f57e8bb2 Let test_random cover the endpoints.
Raymond Hettinger <python@rcn.com>
parents: 27268
diff changeset
187 self.assertEqual(ip, max(lo, min(hi, expected)))
27268
be3d1b7e62dc Test optional slice arguments.
Raymond Hettinger <python@rcn.com>
parents: 27267
diff changeset
188
be3d1b7e62dc Test optional slice arguments.
Raymond Hettinger <python@rcn.com>
parents: 27267
diff changeset
189 def test_backcompatibility(self):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
190 self.assertEqual(self.module.bisect, self.module.bisect_right)
27268
be3d1b7e62dc Test optional slice arguments.
Raymond Hettinger <python@rcn.com>
parents: 27267
diff changeset
191
35699
3572249c1e77 SF #1313496: bisect C replacement doesn't accept named args
Raymond Hettinger <python@rcn.com>
parents: 33602
diff changeset
192 def test_keyword_args(self):
3572249c1e77 SF #1313496: bisect C replacement doesn't accept named args
Raymond Hettinger <python@rcn.com>
parents: 33602
diff changeset
193 data = [10, 20, 30, 40, 50]
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
194 self.assertEqual(self.module.bisect_left(a=data, x=25, lo=1, hi=3), 2)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
195 self.assertEqual(self.module.bisect_right(a=data, x=25, lo=1, hi=3), 2)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
196 self.assertEqual(self.module.bisect(a=data, x=25, lo=1, hi=3), 2)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
197 self.module.insort_left(a=data, x=25, lo=1, hi=3)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
198 self.module.insort_right(a=data, x=25, lo=1, hi=3)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
199 self.module.insort(a=data, x=25, lo=1, hi=3)
35699
3572249c1e77 SF #1313496: bisect C replacement doesn't accept named args
Raymond Hettinger <python@rcn.com>
parents: 33602
diff changeset
200 self.assertEqual(data, [10, 20, 25, 25, 25, 30, 40, 50])
3572249c1e77 SF #1313496: bisect C replacement doesn't accept named args
Raymond Hettinger <python@rcn.com>
parents: 33602
diff changeset
201
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
202 class TestBisectPython(TestBisect, unittest.TestCase):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
203 module = py_bisect
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
204
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
205 class TestBisectC(TestBisect, unittest.TestCase):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
206 module = c_bisect
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
207
27266
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
208 #==============================================================================
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
209
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
210 class TestInsort:
31353
ed20259a1ea5 SF Patch #864863: Bisect C implementation
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
211 def test_vsBuiltinSort(self, n=500):
27266
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
212 from random import choice
31353
ed20259a1ea5 SF Patch #864863: Bisect C implementation
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
213 for insorted in (list(), UserList()):
41642
a6eb6acfe04a Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40775
diff changeset
214 for i in range(n):
31353
ed20259a1ea5 SF Patch #864863: Bisect C implementation
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
215 digit = choice("0123456789")
ed20259a1ea5 SF Patch #864863: Bisect C implementation
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
216 if digit in "02468":
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
217 f = self.module.insort_left
31353
ed20259a1ea5 SF Patch #864863: Bisect C implementation
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
218 else:
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
219 f = self.module.insort_right
31353
ed20259a1ea5 SF Patch #864863: Bisect C implementation
Raymond Hettinger <python@rcn.com>
parents: 28917
diff changeset
220 f(insorted, digit)
80133
838e2b19489e Issue #16377: Fix bisect unittest.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 76995
diff changeset
221 self.assertEqual(sorted(insorted), insorted)
27266
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
222
27268
be3d1b7e62dc Test optional slice arguments.
Raymond Hettinger <python@rcn.com>
parents: 27267
diff changeset
223 def test_backcompatibility(self):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
224 self.assertEqual(self.module.insort, self.module.insort_right)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
225
49493
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
226 def test_listDerived(self):
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
227 class List(list):
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
228 data = []
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
229 def insert(self, index, item):
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
230 self.data.insert(index, item)
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
231
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
232 lst = List()
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
233 self.module.insort_left(lst, 10)
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
234 self.module.insort_right(lst, 5)
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
235 self.assertEqual([5, 10], lst.data)
bdf4da5d04ad merge from trunk
Benjamin Peterson <benjamin@python.org>
parents: 48499
diff changeset
236
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
237 class TestInsortPython(TestInsort, unittest.TestCase):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
238 module = py_bisect
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
239
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
240 class TestInsortC(TestInsort, unittest.TestCase):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
241 module = c_bisect
27268
be3d1b7e62dc Test optional slice arguments.
Raymond Hettinger <python@rcn.com>
parents: 27267
diff changeset
242
27266
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
243 #==============================================================================
15673
67b3ac439f64 Fred, THIS NEEDS DOCS! The function docstrings tell the tale.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
244
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
245 class LenOnly:
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
246 "Dummy sequence class defining __len__ but not __getitem__."
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
247 def __len__(self):
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
248 return 10
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
249
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
250 class GetOnly:
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
251 "Dummy sequence class defining __getitem__ but not __len__."
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
252 def __getitem__(self, ndx):
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
253 return 10
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
254
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
255 class CmpErr:
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
256 "Dummy element that always raises an error during comparison"
39644
13d5e5f0e993 Restructure comparison dramatically. There is no longer a default
Guido van Rossum <guido@python.org>
parents: 37739
diff changeset
257 def __lt__(self, other):
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
258 raise ZeroDivisionError
39644
13d5e5f0e993 Restructure comparison dramatically. There is no longer a default
Guido van Rossum <guido@python.org>
parents: 37739
diff changeset
259 __gt__ = __lt__
13d5e5f0e993 Restructure comparison dramatically. There is no longer a default
Guido van Rossum <guido@python.org>
parents: 37739
diff changeset
260 __le__ = __lt__
13d5e5f0e993 Restructure comparison dramatically. There is no longer a default
Guido van Rossum <guido@python.org>
parents: 37739
diff changeset
261 __ge__ = __lt__
13d5e5f0e993 Restructure comparison dramatically. There is no longer a default
Guido van Rossum <guido@python.org>
parents: 37739
diff changeset
262 __eq__ = __lt__
13d5e5f0e993 Restructure comparison dramatically. There is no longer a default
Guido van Rossum <guido@python.org>
parents: 37739
diff changeset
263 __ne__ = __lt__
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
264
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
265 class TestErrorHandling:
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
266 def test_non_sequence(self):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
267 for f in (self.module.bisect_left, self.module.bisect_right,
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
268 self.module.insort_left, self.module.insort_right):
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
269 self.assertRaises(TypeError, f, 10, 10)
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
270
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
271 def test_len_only(self):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
272 for f in (self.module.bisect_left, self.module.bisect_right,
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
273 self.module.insort_left, self.module.insort_right):
37739
fb2aff1862e4 Fix test_bisect in the same way as test_itertools: iter() blows up a lot
Thomas Wouters <thomas@python.org>
parents: 35699
diff changeset
274 self.assertRaises(TypeError, f, LenOnly(), 10)
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
275
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
276 def test_get_only(self):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
277 for f in (self.module.bisect_left, self.module.bisect_right,
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
278 self.module.insort_left, self.module.insort_right):
37739
fb2aff1862e4 Fix test_bisect in the same way as test_itertools: iter() blows up a lot
Thomas Wouters <thomas@python.org>
parents: 35699
diff changeset
279 self.assertRaises(TypeError, f, GetOnly(), 10)
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
280
33602
7d6679ee39f9 Rename test for comparision errors.
Raymond Hettinger <python@rcn.com>
parents: 33601
diff changeset
281 def test_cmp_err(self):
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
282 seq = [CmpErr(), CmpErr(), CmpErr()]
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
283 for f in (self.module.bisect_left, self.module.bisect_right,
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
284 self.module.insort_left, self.module.insort_right):
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
285 self.assertRaises(ZeroDivisionError, f, seq, 10)
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
286
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
287 def test_arg_parsing(self):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
288 for f in (self.module.bisect_left, self.module.bisect_right,
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
289 self.module.insort_left, self.module.insort_right):
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
290 self.assertRaises(TypeError, f, 10)
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
291
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
292 class TestErrorHandlingPython(TestErrorHandling, unittest.TestCase):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
293 module = py_bisect
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
294
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
295 class TestErrorHandlingC(TestErrorHandling, unittest.TestCase):
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
296 module = c_bisect
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45302
diff changeset
297
33601
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
298 #==============================================================================
7511585f2e6a Beef-up tests for greater coverage and refcount checking.
Raymond Hettinger <python@rcn.com>
parents: 31436
diff changeset
299
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
300 class TestDocExample:
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
301 def test_grades(self):
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
302 def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
303 i = self.module.bisect(breakpoints, score)
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
304 return grades[i]
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
305
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
306 result = [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
307 self.assertEqual(result, ['F', 'A', 'C', 'C', 'B', 'A', 'A'])
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
308
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
309 def test_colors(self):
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
310 data = [('red', 5), ('blue', 1), ('yellow', 8), ('black', 0)]
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
311 data.sort(key=lambda r: r[1])
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
312 keys = [r[1] for r in data]
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
313 bisect_left = self.module.bisect_left
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
314 self.assertEqual(data[bisect_left(keys, 0)], ('black', 0))
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
315 self.assertEqual(data[bisect_left(keys, 1)], ('blue', 1))
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
316 self.assertEqual(data[bisect_left(keys, 5)], ('red', 5))
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
317 self.assertEqual(data[bisect_left(keys, 8)], ('yellow', 8))
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
318
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
319 class TestDocExamplePython(TestDocExample, unittest.TestCase):
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
320 module = py_bisect
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
321
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
322 class TestDocExampleC(TestDocExample, unittest.TestCase):
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
323 module = c_bisect
27267
b744508d5b12 Added doctest for examples in the library reference.
Raymond Hettinger <python@rcn.com>
parents: 27266
diff changeset
324
27266
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
325 #------------------------------------------------------------------------------
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
326
a9ddadf789ea Convert to unittest format so that more tests can be added cleanly.
Raymond Hettinger <python@rcn.com>
parents: 24442
diff changeset
327 if __name__ == "__main__":
81346
f32cb5389a4b #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 80133
diff changeset
328 unittest.main()