44import time
55import unittest
66from test import support
7-
7+ try :
8+ import threading
9+ except ImportError :
10+ threading = None
811
912class TestCase (unittest .TestCase ):
1013
@@ -26,6 +29,20 @@ def test_enterabs(self):
2629 scheduler .run ()
2730 self .assertEqual (l , [0.01 , 0.02 , 0.03 , 0.04 , 0.05 ])
2831
32+ @unittest .skipUnless (threading , 'Threading required for this test.' )
33+ def test_enter_concurrent (self ):
34+ l = []
35+ fun = lambda x : l .append (x )
36+ scheduler = sched .scheduler (time .time , time .sleep )
37+ scheduler .enter (0.03 , 1 , fun , (0.03 ,))
38+ t = threading .Thread (target = scheduler .run )
39+ t .start ()
40+ for x in [0.05 , 0.04 , 0.02 , 0.01 ]:
41+ z = scheduler .enter (x , 1 , fun , (x ,))
42+ scheduler .run ()
43+ t .join ()
44+ self .assertEqual (l , [0.01 , 0.02 , 0.03 , 0.04 , 0.05 ])
45+
2946 def test_priority (self ):
3047 l = []
3148 fun = lambda x : l .append (x )
@@ -50,6 +67,24 @@ def test_cancel(self):
5067 scheduler .run ()
5168 self .assertEqual (l , [0.02 , 0.03 , 0.04 ])
5269
70+ @unittest .skipUnless (threading , 'Threading required for this test.' )
71+ def test_cancel_concurrent (self ):
72+ l = []
73+ fun = lambda x : l .append (x )
74+ scheduler = sched .scheduler (time .time , time .sleep )
75+ now = time .time ()
76+ event1 = scheduler .enterabs (now + 0.01 , 1 , fun , (0.01 ,))
77+ event2 = scheduler .enterabs (now + 0.02 , 1 , fun , (0.02 ,))
78+ event3 = scheduler .enterabs (now + 0.03 , 1 , fun , (0.03 ,))
79+ event4 = scheduler .enterabs (now + 0.04 , 1 , fun , (0.04 ,))
80+ event5 = scheduler .enterabs (now + 0.05 , 1 , fun , (0.05 ,))
81+ t = threading .Thread (target = scheduler .run )
82+ t .start ()
83+ scheduler .cancel (event1 )
84+ scheduler .cancel (event5 )
85+ t .join ()
86+ self .assertEqual (l , [0.02 , 0.03 , 0.04 ])
87+
5388 def test_empty (self ):
5489 l = []
5590 fun = lambda x : l .append (x )
0 commit comments