from beaker.util import SyncDict
-import random, time, weakref
+import random, time, weakref
# this script tests SyncDict for its thread safety,
# ability to always return a value even for a dictionary
raise "this test requires a thread-enabled python"
+jython = sys.platform.startswith('java')
+ """The tests assume CPython GC behavior in regard to weakrefs, but
+ we can coerce Jython into passing by triggering GC when we expect
+ it to have happened on CPython
if theitem() is not None:
raise "create %d old item is still referenced" % id
- time.sleep(random.random() * .89)
+ # Give Jython more time on the final create for Java GC
+ sleeptime = (jython and x == 9) and 2 or random.random() * .89
# normal dictionary test, where we will remove the value
# periodically. the number of creates should be equal to
# the number of removes plus one.
print "\ntesting with normal dict"
assert(totalremoves + 1 == totalcreates)
print "\ntesting with weak dict"