68 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Factor
		
	
	
USING: timers timers.private calendar concurrency.count-downs
 | 
						|
concurrency.promises fry kernel math math.order sequences
 | 
						|
threads tools.test tools.time ;
 | 
						|
IN: timers.tests
 | 
						|
 | 
						|
[ ] [
 | 
						|
    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 } ] [
 | 
						|
    { 0 }
 | 
						|
    dup '[ 3 seconds sleep 1 _ set-first ] 1 seconds later
 | 
						|
    2 seconds sleep stop-timer
 | 
						|
    1/2 seconds sleep
 | 
						|
] 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
 |