Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test___future__.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 | 3c9232a684ae |
| children |
| rev | line source |
|---|---|
|
59522
fcfe324663a6
convert shebang lines: python -> python3
Benjamin Peterson <benjamin@python.org>
parents:
55061
diff
changeset
|
1 #! /usr/bin/env python3 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
2 import unittest |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
43577
diff
changeset
|
3 from test import support |
|
16770
14affbd03750
Add __future__.py to std library, + dull test to verify that assignments
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
4 import __future__ |
|
14affbd03750
Add __future__.py to std library, + dull test to verify that assignments
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
5 |
|
14affbd03750
Add __future__.py to std library, + dull test to verify that assignments
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
6 GOOD_SERIALS = ("alpha", "beta", "candidate", "final") |
|
14affbd03750
Add __future__.py to std library, + dull test to verify that assignments
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
7 |
|
19345
38be177bd493
A self-contained piece of Michael Hudson's patch
Tim Peters <tim.peters@gmail.com>
parents:
16929
diff
changeset
|
8 features = __future__.all_feature_names |
|
19371
2bf2690966ff
Expose the CO_xxx flags via the "new" module (re-solving a problem "the
Tim Peters <tim.peters@gmail.com>
parents:
19345
diff
changeset
|
9 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
10 class FutureTest(unittest.TestCase): |
|
19371
2bf2690966ff
Expose the CO_xxx flags via the "new" module (re-solving a problem "the
Tim Peters <tim.peters@gmail.com>
parents:
19345
diff
changeset
|
11 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
12 def test_names(self): |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
13 # Verify that all_feature_names appears correct. |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
14 given_feature_names = features[:] |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
15 for name in dir(__future__): |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
16 obj = getattr(__future__, name, None) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
17 if obj is not None and isinstance(obj, __future__._Feature): |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
55062
diff
changeset
|
18 self.assertTrue( |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
19 name in given_feature_names, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
20 "%r should have been in all_feature_names" % name |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
21 ) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
22 given_feature_names.remove(name) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
23 self.assertEqual(len(given_feature_names), 0, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
24 "all_feature_names has too much: %r" % given_feature_names) |
|
16770
14affbd03750
Add __future__.py to std library, + dull test to verify that assignments
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
25 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
26 def test_attributes(self): |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
27 for feature in features: |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
28 value = getattr(__future__, feature) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
29 |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
30 optional = value.getOptionalRelease() |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
31 mandatory = value.getMandatoryRelease() |
|
16770
14affbd03750
Add __future__.py to std library, + dull test to verify that assignments
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
32 |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
55062
diff
changeset
|
33 a = self.assertTrue |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
34 e = self.assertEqual |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
35 def check(t, name): |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
36 a(isinstance(t, tuple), "%s isn't tuple" % name) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
37 e(len(t), 5, "%s isn't 5-tuple" % name) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
38 (major, minor, micro, level, serial) = t |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
39 a(isinstance(major, int), "%s major isn't int" % name) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
40 a(isinstance(minor, int), "%s minor isn't int" % name) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
41 a(isinstance(micro, int), "%s micro isn't int" % name) |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
42 a(isinstance(level, str), |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
43 "%s level isn't string" % name) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
44 a(level in GOOD_SERIALS, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
45 "%s level string has unknown value" % name) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
46 a(isinstance(serial, int), "%s serial isn't int" % name) |
|
16770
14affbd03750
Add __future__.py to std library, + dull test to verify that assignments
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
47 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
48 check(optional, "optional") |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
49 if mandatory is not None: |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
50 check(mandatory, "mandatory") |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
51 a(optional < mandatory, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
52 "optional not less than mandatory, and mandatory not None") |
|
19345
38be177bd493
A self-contained piece of Michael Hudson's patch
Tim Peters <tim.peters@gmail.com>
parents:
16929
diff
changeset
|
53 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
54 a(hasattr(value, "compiler_flag"), |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
55 "feature is missing a .compiler_flag attr") |
|
55062
65e41bcbc25d
Merged revisions 73782-73784 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
47201
diff
changeset
|
56 # Make sure the compile accepts the flag. |
|
65e41bcbc25d
Merged revisions 73782-73784 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
47201
diff
changeset
|
57 compile("", "<test>", "exec", value.compiler_flag) |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
58 a(isinstance(getattr(value, "compiler_flag"), int), |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
59 ".compiler_flag isn't int") |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
60 |
|
55062
65e41bcbc25d
Merged revisions 73782-73784 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
47201
diff
changeset
|
61 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
62 def test_main(): |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
43577
diff
changeset
|
63 support.run_unittest(FutureTest) |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
64 |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
65 if __name__ == "__main__": |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
26140
diff
changeset
|
66 test_main() |
