1 USING: accessors calendar combinators concurrency.count-downs
2 concurrency.promises fry kernel math math.order sequences
3 threads timers tools.test tools.time ;
8 [ first stop-timer count-down ] 2curry 1 seconds later
14 self [ resume ] curry instant later drop
21 [ '[ t _ fulfill ] 2 seconds later drop ]
22 [ 5 seconds ?promise-timeout drop ] bi
23 ] benchmark 1,500,000,000 2,500,000,000 between?
28 '[ 4 _ set-first ] 2 seconds later
35 dup '[ 0 _ [ 1 + ] change-nth ] 3 seconds later
36 [ stop-timer ] [ start-timer ] bi
42 dup '[ 3 seconds sleep 1 _ set-first ] 1 seconds later
43 2 seconds sleep stop-timer
44 1/2 seconds sleep [ clone ] keep
50 dup '[ 1 _ set-first ] 300 milliseconds later
51 150 milliseconds sleep
52 [ restart-timer ] [ 200 milliseconds sleep stop-timer ] bi
57 dup '[ 0 _ [ 1 + ] change-nth ] 200 milliseconds later
58 100 milliseconds sleep restart-timer 300 milliseconds sleep
63 dup '[ 0 _ [ 1 + ] change-nth ] 300 milliseconds 300 milliseconds
64 <timer> dup start-timer
65 700 milliseconds sleep dup restart-timer
66 700 milliseconds sleep stop-timer 500 milliseconds sleep
71 dup '[ 0 _ [ 1 + ] change-nth ] 300 milliseconds f <timer>
73 700 milliseconds sleep
74 dup restart-timer drop
75 700 milliseconds sleep
81 dup '[ 0 _ [ 1 + ] change-nth ] 300 milliseconds f <timer>
82 dup start-timer [ thread>> ] keep {
83 [ dup restart-timer thread>> eq? ]
84 [ dup restart-timer thread>> eq? ]
85 [ dup restart-timer thread>> eq? ]
86 [ dup restart-timer thread>> eq? ]
88 700 milliseconds sleep
92 [ ] 1 seconds later start-timer
93 ] [ timer-already-started? ] must-fail-with