94 lines
2.2 KiB
Factor
94 lines
2.2 KiB
Factor
USING: accessors calendar combinators concurrency.count-downs
|
|
concurrency.promises fry kernel math math.order sequences
|
|
threads timers tools.test tools.time ;
|
|
|
|
{ } [
|
|
1 <count-down>
|
|
{ f } clone 2dup
|
|
[ first stop-timer count-down ] 2curry 1 seconds later
|
|
swap set-first
|
|
await
|
|
] unit-test
|
|
|
|
{ } [
|
|
self [ resume ] curry instant later drop
|
|
"test" suspend drop
|
|
] unit-test
|
|
|
|
{ t } [
|
|
[
|
|
<promise>
|
|
[ '[ t _ fulfill ] 2 seconds later drop ]
|
|
[ 5 seconds ?promise-timeout drop ] bi
|
|
] benchmark 1,500,000,000 2,500,000,000 between?
|
|
] unit-test
|
|
|
|
{ { 3 } } [
|
|
{ 3 } dup
|
|
'[ 4 _ set-first ] 2 seconds later
|
|
1/2 seconds sleep
|
|
stop-timer
|
|
] unit-test
|
|
|
|
{ { 1 } } [
|
|
{ 0 }
|
|
dup '[ 0 _ [ 1 + ] change-nth ] 3 seconds later
|
|
[ stop-timer ] [ start-timer ] bi
|
|
4 seconds sleep
|
|
] unit-test
|
|
|
|
{ { 0 } { 1 } } [
|
|
{ 0 }
|
|
dup '[ 3 seconds sleep 1 _ set-first ] 1 seconds later
|
|
2 seconds sleep stop-timer
|
|
1/2 seconds sleep [ clone ] keep
|
|
2 seconds sleep clone
|
|
] unit-test
|
|
|
|
{ { 0 } } [
|
|
{ 0 }
|
|
dup '[ 1 _ set-first ] 300 milliseconds later
|
|
150 milliseconds sleep
|
|
[ restart-timer ] [ 200 milliseconds sleep stop-timer ] bi
|
|
] unit-test
|
|
|
|
{ { 1 } } [
|
|
{ 0 }
|
|
dup '[ 0 _ [ 1 + ] change-nth ] 200 milliseconds later
|
|
100 milliseconds sleep restart-timer 300 milliseconds sleep
|
|
] unit-test
|
|
|
|
{ { 4 } } [
|
|
{ 0 }
|
|
dup '[ 0 _ [ 1 + ] change-nth ] 300 milliseconds 300 milliseconds
|
|
<timer> dup start-timer
|
|
700 milliseconds sleep dup restart-timer
|
|
700 milliseconds sleep stop-timer 500 milliseconds sleep
|
|
] unit-test
|
|
|
|
{ { 2 } } [
|
|
{ 0 }
|
|
dup '[ 0 _ [ 1 + ] change-nth ] 300 milliseconds f <timer>
|
|
dup restart-timer
|
|
700 milliseconds sleep
|
|
dup restart-timer drop
|
|
700 milliseconds sleep
|
|
] unit-test
|
|
|
|
|
|
{ { 1 } t t t t } [
|
|
{ 0 }
|
|
dup '[ 0 _ [ 1 + ] change-nth ] 300 milliseconds f <timer>
|
|
dup start-timer [ thread>> ] keep {
|
|
[ dup restart-timer thread>> eq? ]
|
|
[ dup restart-timer thread>> eq? ]
|
|
[ dup restart-timer thread>> eq? ]
|
|
[ dup restart-timer thread>> eq? ]
|
|
} 2cleave
|
|
700 milliseconds sleep
|
|
] unit-test
|
|
|
|
[
|
|
[ ] 1 seconds later start-timer
|
|
] [ timer-already-started? ] must-fail-with
|