blob: 2ac3a68302cdb6693937be28faba0aa82b103596 [file] [log] [blame]
Christian Heimesd3eb5a152008-02-24 00:38:49 +00001import sys
Raymond Hettingerd2305502003-01-16 12:02:35 +00002import unittest
Benjamin Petersonee8712c2008-05-20 21:35:26 +00003from test import support
Raymond Hettinger53dbe392008-02-12 20:03:09 +00004from collections import UserList
Tim Peters36cdad12000-12-29 02:06:45 +00005
Christian Heimesd3eb5a152008-02-24 00:38:49 +00006# We do a bit of trickery here to be able to test both the C implementation
7# and the Python implementation of the module.
8
9# Make it impossible to import the C implementation anymore.
10sys.modules['_bisect'] = 0
11# We must also handle the case that bisect was imported before.
12if 'bisect' in sys.modules:
13 del sys.modules['bisect']
14
15# Now we can import the module and get the pure Python implementation.
16import bisect as py_bisect
17
18# Restore everything to normal.
19del sys.modules['_bisect']
20del sys.modules['bisect']
21
22# This is now the module with the C implementation.
23import bisect as c_bisect
24
25
Antoine Pitroufb5b9542012-05-16 15:01:40 +020026class Range(object):
27 """A trivial range()-like object without any integer width limitations."""
28 def __init__(self, start, stop):
29 self.start = start
30 self.stop = stop
31 self.last_insert = None
32
33 def __len__(self):
34 return self.stop - self.start
35
36 def __getitem__(self, idx):
37 n = self.stop - self.start
38 if idx < 0:
39 idx += n
40 if idx >= n:
41 raise IndexError(idx)
42 return self.start + idx
43
44 def insert(self, idx, item):
45 self.last_insert = idx, item
46
47
Raymond Hettingerd2305502003-01-16 12:02:35 +000048class TestBisect(unittest.TestCase):
Christian Heimesd3eb5a152008-02-24 00:38:49 +000049 module = None
Tim Peters36cdad12000-12-29 02:06:45 +000050
Christian Heimesd3eb5a152008-02-24 00:38:49 +000051 def setUp(self):
52 self.precomputedCases = [
53 (self.module.bisect_right, [], 1, 0),
54 (self.module.bisect_right, [1], 0, 0),
55 (self.module.bisect_right, [1], 1, 1),
56 (self.module.bisect_right, [1], 2, 1),
57 (self.module.bisect_right, [1, 1], 0, 0),
58 (self.module.bisect_right, [1, 1], 1, 2),
59 (self.module.bisect_right, [1, 1], 2, 2),
60 (self.module.bisect_right, [1, 1, 1], 0, 0),
61 (self.module.bisect_right, [1, 1, 1], 1, 3),
62 (self.module.bisect_right, [1, 1, 1], 2, 3),
63 (self.module.bisect_right, [1, 1, 1, 1], 0, 0),
64 (self.module.bisect_right, [1, 1, 1, 1], 1, 4),
65 (self.module.bisect_right, [1, 1, 1, 1], 2, 4),
66 (self.module.bisect_right, [1, 2], 0, 0),
67 (self.module.bisect_right, [1, 2], 1, 1),
68 (self.module.bisect_right, [1, 2], 1.5, 1),
69 (self.module.bisect_right, [1, 2], 2, 2),
70 (self.module.bisect_right, [1, 2], 3, 2),
71 (self.module.bisect_right, [1, 1, 2, 2], 0, 0),
72 (self.module.bisect_right, [1, 1, 2, 2], 1, 2),
73 (self.module.bisect_right, [1, 1, 2, 2], 1.5, 2),
74 (self.module.bisect_right, [1, 1, 2, 2], 2, 4),
75 (self.module.bisect_right, [1, 1, 2, 2], 3, 4),
76 (self.module.bisect_right, [1, 2, 3], 0, 0),
77 (self.module.bisect_right, [1, 2, 3], 1, 1),
78 (self.module.bisect_right, [1, 2, 3], 1.5, 1),
79 (self.module.bisect_right, [1, 2, 3], 2, 2),
80 (self.module.bisect_right, [1, 2, 3], 2.5, 2),
81 (self.module.bisect_right, [1, 2, 3], 3, 3),
82 (self.module.bisect_right, [1, 2, 3], 4, 3),
83 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 0, 0),
84 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1, 1),
85 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1.5, 1),
86 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2, 3),
87 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2.5, 3),
88 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3, 6),
89 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3.5, 6),
90 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 4, 10),
91 (self.module.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 5, 10),
Tim Peters36cdad12000-12-29 02:06:45 +000092
Christian Heimesd3eb5a152008-02-24 00:38:49 +000093 (self.module.bisect_left, [], 1, 0),
94 (self.module.bisect_left, [1], 0, 0),
95 (self.module.bisect_left, [1], 1, 0),
96 (self.module.bisect_left, [1], 2, 1),
97 (self.module.bisect_left, [1, 1], 0, 0),
98 (self.module.bisect_left, [1, 1], 1, 0),
99 (self.module.bisect_left, [1, 1], 2, 2),
100 (self.module.bisect_left, [1, 1, 1], 0, 0),
101 (self.module.bisect_left, [1, 1, 1], 1, 0),
102 (self.module.bisect_left, [1, 1, 1], 2, 3),
103 (self.module.bisect_left, [1, 1, 1, 1], 0, 0),
104 (self.module.bisect_left, [1, 1, 1, 1], 1, 0),
105 (self.module.bisect_left, [1, 1, 1, 1], 2, 4),
106 (self.module.bisect_left, [1, 2], 0, 0),
107 (self.module.bisect_left, [1, 2], 1, 0),
108 (self.module.bisect_left, [1, 2], 1.5, 1),
109 (self.module.bisect_left, [1, 2], 2, 1),
110 (self.module.bisect_left, [1, 2], 3, 2),
111 (self.module.bisect_left, [1, 1, 2, 2], 0, 0),
112 (self.module.bisect_left, [1, 1, 2, 2], 1, 0),
113 (self.module.bisect_left, [1, 1, 2, 2], 1.5, 2),
114 (self.module.bisect_left, [1, 1, 2, 2], 2, 2),
115 (self.module.bisect_left, [1, 1, 2, 2], 3, 4),
116 (self.module.bisect_left, [1, 2, 3], 0, 0),
117 (self.module.bisect_left, [1, 2, 3], 1, 0),
118 (self.module.bisect_left, [1, 2, 3], 1.5, 1),
119 (self.module.bisect_left, [1, 2, 3], 2, 1),
120 (self.module.bisect_left, [1, 2, 3], 2.5, 2),
121 (self.module.bisect_left, [1, 2, 3], 3, 2),
122 (self.module.bisect_left, [1, 2, 3], 4, 3),
123 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 0, 0),
124 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1, 0),
125 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1.5, 1),
126 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2, 1),
127 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2.5, 3),
128 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3, 3),
129 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3.5, 6),
130 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 4, 6),
131 (self.module.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 5, 10)
132 ]
Tim Peters36cdad12000-12-29 02:06:45 +0000133
Raymond Hettingerd2305502003-01-16 12:02:35 +0000134 def test_precomputed(self):
Raymond Hettinger6aa1c3f2003-01-16 14:00:15 +0000135 for func, data, elem, expected in self.precomputedCases:
136 self.assertEqual(func(data, elem), expected)
Raymond Hettinger0c410272004-01-05 10:13:35 +0000137 self.assertEqual(func(UserList(data), elem), expected)
Raymond Hettingerd2305502003-01-16 12:02:35 +0000138
Georg Brandl2ee470f2008-07-16 12:55:28 +0000139 def test_negative_lo(self):
140 # Issue 3301
141 mod = self.module
142 self.assertRaises(ValueError, mod.bisect_left, [1, 2, 3], 5, -1, 3),
143 self.assertRaises(ValueError, mod.bisect_right, [1, 2, 3], 5, -1, 3),
144 self.assertRaises(ValueError, mod.insort_left, [1, 2, 3], 5, -1, 3),
145 self.assertRaises(ValueError, mod.insort_right, [1, 2, 3], 5, -1, 3),
146
Mark Dickinsona13b1092012-04-15 16:30:35 +0100147 def test_large_range(self):
148 # Issue 13496
149 mod = self.module
Antoine Pitroufb5b9542012-05-16 15:01:40 +0200150 n = sys.maxsize
151 data = range(n-1)
152 self.assertEqual(mod.bisect_left(data, n-3), n-3)
153 self.assertEqual(mod.bisect_right(data, n-3), n-2)
154 self.assertEqual(mod.bisect_left(data, n-3, n-10, n), n-3)
155 self.assertEqual(mod.bisect_right(data, n-3, n-10, n), n-2)
156
157 def test_large_pyrange(self):
158 # Same as above, but without C-imposed limits on range() parameters
159 mod = self.module
160 n = sys.maxsize
161 data = Range(0, n-1)
162 self.assertEqual(mod.bisect_left(data, n-3), n-3)
163 self.assertEqual(mod.bisect_right(data, n-3), n-2)
164 self.assertEqual(mod.bisect_left(data, n-3, n-10, n), n-3)
165 self.assertEqual(mod.bisect_right(data, n-3, n-10, n), n-2)
166 x = n - 100
167 mod.insort_left(data, x, x - 50, x + 50)
168 self.assertEqual(data.last_insert, (x, x))
169 x = n - 200
170 mod.insort_right(data, x, x - 50, x + 50)
171 self.assertEqual(data.last_insert, (x + 1, x))
Mark Dickinsona13b1092012-04-15 16:30:35 +0100172
Raymond Hettinger6aa1c3f2003-01-16 14:00:15 +0000173 def test_random(self, n=25):
Raymond Hettinger44223752003-01-16 12:31:36 +0000174 from random import randrange
Guido van Rossum805365e2007-05-07 22:24:25 +0000175 for i in range(n):
176 data = [randrange(0, n, 2) for j in range(i)]
Raymond Hettinger44223752003-01-16 12:31:36 +0000177 data.sort()
Raymond Hettinger6aa1c3f2003-01-16 14:00:15 +0000178 elem = randrange(-1, n+1)
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000179 ip = self.module.bisect_left(data, elem)
Raymond Hettinger44223752003-01-16 12:31:36 +0000180 if ip < len(data):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000181 self.assertTrue(elem <= data[ip])
Raymond Hettinger44223752003-01-16 12:31:36 +0000182 if ip > 0:
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000183 self.assertTrue(data[ip-1] < elem)
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000184 ip = self.module.bisect_right(data, elem)
Raymond Hettinger44223752003-01-16 12:31:36 +0000185 if ip < len(data):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000186 self.assertTrue(elem < data[ip])
Raymond Hettinger44223752003-01-16 12:31:36 +0000187 if ip > 0:
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000188 self.assertTrue(data[ip-1] <= elem)
Raymond Hettinger44223752003-01-16 12:31:36 +0000189
Raymond Hettingera9f18dc2003-01-16 13:02:25 +0000190 def test_optionalSlicing(self):
Raymond Hettinger6aa1c3f2003-01-16 14:00:15 +0000191 for func, data, elem, expected in self.precomputedCases:
Guido van Rossum805365e2007-05-07 22:24:25 +0000192 for lo in range(4):
Raymond Hettinger6aa1c3f2003-01-16 14:00:15 +0000193 lo = min(len(data), lo)
Guido van Rossum805365e2007-05-07 22:24:25 +0000194 for hi in range(3,8):
Raymond Hettinger6aa1c3f2003-01-16 14:00:15 +0000195 hi = min(len(data), hi)
196 ip = func(data, elem, lo, hi)
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000197 self.assertTrue(lo <= ip <= hi)
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000198 if func is self.module.bisect_left and ip < hi:
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000199 self.assertTrue(elem <= data[ip])
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000200 if func is self.module.bisect_left and ip > lo:
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000201 self.assertTrue(data[ip-1] < elem)
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000202 if func is self.module.bisect_right and ip < hi:
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000203 self.assertTrue(elem < data[ip])
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000204 if func is self.module.bisect_right and ip > lo:
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000205 self.assertTrue(data[ip-1] <= elem)
Raymond Hettinger6aa1c3f2003-01-16 14:00:15 +0000206 self.assertEqual(ip, max(lo, min(hi, expected)))
Raymond Hettingera9f18dc2003-01-16 13:02:25 +0000207
208 def test_backcompatibility(self):
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000209 self.assertEqual(self.module.bisect, self.module.bisect_right)
Raymond Hettingera9f18dc2003-01-16 13:02:25 +0000210
Raymond Hettingercc9a9512005-10-05 11:39:12 +0000211 def test_keyword_args(self):
212 data = [10, 20, 30, 40, 50]
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000213 self.assertEqual(self.module.bisect_left(a=data, x=25, lo=1, hi=3), 2)
214 self.assertEqual(self.module.bisect_right(a=data, x=25, lo=1, hi=3), 2)
215 self.assertEqual(self.module.bisect(a=data, x=25, lo=1, hi=3), 2)
216 self.module.insort_left(a=data, x=25, lo=1, hi=3)
217 self.module.insort_right(a=data, x=25, lo=1, hi=3)
218 self.module.insort(a=data, x=25, lo=1, hi=3)
Raymond Hettingercc9a9512005-10-05 11:39:12 +0000219 self.assertEqual(data, [10, 20, 25, 25, 25, 30, 40, 50])
220
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000221class TestBisectPython(TestBisect):
222 module = py_bisect
223
224class TestBisectC(TestBisect):
225 module = c_bisect
226
Raymond Hettingerd2305502003-01-16 12:02:35 +0000227#==============================================================================
228
229class TestInsort(unittest.TestCase):
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000230 module = None
Raymond Hettingerd2305502003-01-16 12:02:35 +0000231
Raymond Hettinger0c410272004-01-05 10:13:35 +0000232 def test_vsBuiltinSort(self, n=500):
Raymond Hettingerd2305502003-01-16 12:02:35 +0000233 from random import choice
Raymond Hettinger0c410272004-01-05 10:13:35 +0000234 for insorted in (list(), UserList()):
Guido van Rossum805365e2007-05-07 22:24:25 +0000235 for i in range(n):
Raymond Hettinger0c410272004-01-05 10:13:35 +0000236 digit = choice("0123456789")
237 if digit in "02468":
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000238 f = self.module.insort_left
Raymond Hettinger0c410272004-01-05 10:13:35 +0000239 else:
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000240 f = self.module.insort_right
Raymond Hettinger0c410272004-01-05 10:13:35 +0000241 f(insorted, digit)
242 self.assertEqual(sorted(insorted), insorted)
Raymond Hettingerd2305502003-01-16 12:02:35 +0000243
Raymond Hettingera9f18dc2003-01-16 13:02:25 +0000244 def test_backcompatibility(self):
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000245 self.assertEqual(self.module.insort, self.module.insort_right)
246
Benjamin Petersonf10a79a2008-10-11 00:49:57 +0000247 def test_listDerived(self):
248 class List(list):
249 data = []
250 def insert(self, index, item):
251 self.data.insert(index, item)
252
253 lst = List()
254 self.module.insort_left(lst, 10)
255 self.module.insort_right(lst, 5)
256 self.assertEqual([5, 10], lst.data)
257
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000258class TestInsortPython(TestInsort):
259 module = py_bisect
260
261class TestInsortC(TestInsort):
262 module = c_bisect
Raymond Hettingera9f18dc2003-01-16 13:02:25 +0000263
Raymond Hettingerd2305502003-01-16 12:02:35 +0000264#==============================================================================
265
Raymond Hettinger63251782004-09-27 22:48:40 +0000266
267class LenOnly:
268 "Dummy sequence class defining __len__ but not __getitem__."
269 def __len__(self):
270 return 10
271
272class GetOnly:
273 "Dummy sequence class defining __getitem__ but not __len__."
274 def __getitem__(self, ndx):
275 return 10
276
277class CmpErr:
278 "Dummy element that always raises an error during comparison"
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000279 def __lt__(self, other):
Raymond Hettinger63251782004-09-27 22:48:40 +0000280 raise ZeroDivisionError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000281 __gt__ = __lt__
282 __le__ = __lt__
283 __ge__ = __lt__
284 __eq__ = __lt__
285 __ne__ = __lt__
Raymond Hettinger63251782004-09-27 22:48:40 +0000286
287class TestErrorHandling(unittest.TestCase):
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000288 module = None
Raymond Hettinger63251782004-09-27 22:48:40 +0000289
290 def test_non_sequence(self):
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000291 for f in (self.module.bisect_left, self.module.bisect_right,
292 self.module.insort_left, self.module.insort_right):
Raymond Hettinger63251782004-09-27 22:48:40 +0000293 self.assertRaises(TypeError, f, 10, 10)
294
295 def test_len_only(self):
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000296 for f in (self.module.bisect_left, self.module.bisect_right,
297 self.module.insort_left, self.module.insort_right):
Thomas Wouters1ae9afa2006-04-15 09:12:14 +0000298 self.assertRaises(TypeError, f, LenOnly(), 10)
Raymond Hettinger63251782004-09-27 22:48:40 +0000299
300 def test_get_only(self):
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000301 for f in (self.module.bisect_left, self.module.bisect_right,
302 self.module.insort_left, self.module.insort_right):
Thomas Wouters1ae9afa2006-04-15 09:12:14 +0000303 self.assertRaises(TypeError, f, GetOnly(), 10)
Raymond Hettinger63251782004-09-27 22:48:40 +0000304
Raymond Hettinger630e5352004-09-27 23:11:35 +0000305 def test_cmp_err(self):
Raymond Hettinger63251782004-09-27 22:48:40 +0000306 seq = [CmpErr(), CmpErr(), CmpErr()]
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000307 for f in (self.module.bisect_left, self.module.bisect_right,
308 self.module.insort_left, self.module.insort_right):
Raymond Hettinger63251782004-09-27 22:48:40 +0000309 self.assertRaises(ZeroDivisionError, f, seq, 10)
310
311 def test_arg_parsing(self):
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000312 for f in (self.module.bisect_left, self.module.bisect_right,
313 self.module.insort_left, self.module.insort_right):
Raymond Hettinger63251782004-09-27 22:48:40 +0000314 self.assertRaises(TypeError, f, 10)
315
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000316class TestErrorHandlingPython(TestErrorHandling):
317 module = py_bisect
318
319class TestErrorHandlingC(TestErrorHandling):
320 module = c_bisect
321
Raymond Hettinger63251782004-09-27 22:48:40 +0000322#==============================================================================
323
Raymond Hettinger44223752003-01-16 12:31:36 +0000324libreftest = """
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000325Example from the Library Reference: Doc/library/bisect.rst
Raymond Hettinger44223752003-01-16 12:31:36 +0000326
327The bisect() function is generally useful for categorizing numeric data.
328This example uses bisect() to look up a letter grade for an exam total
329(say) based on a set of ordered numeric breakpoints: 85 and up is an `A',
33075..84 is a `B', etc.
331
332 >>> grades = "FEDCBA"
333 >>> breakpoints = [30, 44, 66, 75, 85]
334 >>> from bisect import bisect
335 >>> def grade(total):
336 ... return grades[bisect(breakpoints, total)]
337 ...
338 >>> grade(66)
339 'C'
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000340 >>> list(map(grade, [33, 99, 77, 44, 12, 88]))
Raymond Hettinger44223752003-01-16 12:31:36 +0000341 ['E', 'A', 'B', 'D', 'F', 'A']
342
Raymond Hettinger44223752003-01-16 12:31:36 +0000343"""
344
Raymond Hettingerd2305502003-01-16 12:02:35 +0000345#------------------------------------------------------------------------------
346
Raymond Hettinger44223752003-01-16 12:31:36 +0000347__test__ = {'libreftest' : libreftest}
348
Raymond Hettingerd2305502003-01-16 12:02:35 +0000349def test_main(verbose=None):
350 from test import test_bisect
Raymond Hettinger63251782004-09-27 22:48:40 +0000351
Christian Heimesd3eb5a152008-02-24 00:38:49 +0000352 test_classes = [TestBisectPython, TestBisectC,
353 TestInsortPython, TestInsortC,
354 TestErrorHandlingPython, TestErrorHandlingC]
Raymond Hettinger63251782004-09-27 22:48:40 +0000355
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000356 support.run_unittest(*test_classes)
357 support.run_doctest(test_bisect, verbose)
Raymond Hettingerd2305502003-01-16 12:02:35 +0000358
Raymond Hettinger63251782004-09-27 22:48:40 +0000359 # verify reference counting
360 if verbose and hasattr(sys, "gettotalrefcount"):
361 import gc
362 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +0000363 for i in range(len(counts)):
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000364 support.run_unittest(*test_classes)
Raymond Hettinger63251782004-09-27 22:48:40 +0000365 gc.collect()
366 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000367 print(counts)
Raymond Hettinger63251782004-09-27 22:48:40 +0000368
Raymond Hettingerd2305502003-01-16 12:02:35 +0000369if __name__ == "__main__":
370 test_main(verbose=True)