! try every value in a sequence with no sleeps
[
[ dup 2 = [ "not 2!" throw ] unless ]
- { 1 } <immediate> retries
+ <immediate> { 1 } retries
] [ retries-failed? ] must-fail-with
{ 2 } [
[ dup 2 = [ "not 2!" throw ] unless ]
- { 1 2 } <immediate> retries
+ <immediate> { 1 2 } retries
] unit-test
! try every value in a sequence with a random sleep
[
[ dup 2 = [ "not 2!" throw ] unless ]
- { 1 } 10 20 <random-wait> retries
+ 10 20 <random-wait> { 1 } retries
] [ retries-failed? ] must-fail-with
{ 2 } [
[ dup 2 = [ "not 2!" throw ] unless ]
- { 1 2 } 10 20 <random-wait> retries
+ 10 20 <random-wait> { 1 2 } retries
] unit-test
! try every value in a sequence with an exponentially increasing sleep
[
[ dup 2 = [ "not 2!" throw ] unless ]
- { 1 } 1.1 100 <exponential-wait> retries
+ 1.1 100 <exponential-wait> { 1 } retries
] [ retries-failed? ] must-fail-with
{ 2 } [
[ dup 2 = [ "not 2!" throw ] unless ]
- { 1 2 } 1.1 100 <exponential-wait> retries
+ 1.1 100 <exponential-wait> { 1 2 } retries
] unit-test
! try n times with no sleeps
[
[ 2 = [ "not 2!" throw ] unless ]
- 2 <immediate> retries
+ <immediate> 2 retries
] [ retries-failed? ] must-fail-with
{ } [
[ 2 = [ "not 2!" throw ] unless ]
- 3 <immediate> retries
+ <immediate> 3 retries
] unit-test
! try n times with a random sleep
[
[ 2 = [ "not 2!" throw ] unless ]
- 2 10 20 <random-wait> retries
+ 10 20 <random-wait> 2 retries
] [ retries-failed? ] must-fail-with
{ } [
[ 2 = [ "not 2!" throw ] unless ]
- 3 10 20 <random-wait> retries
+ 10 20 <random-wait> 3 retries
] unit-test
! try n times with an exponentially increasing sleep
[
[ 2 = [ "not 2!" throw ] unless ]
- 2 1.1 100 <exponential-wait> retries
+ 1.1 100 <exponential-wait> 2 retries
] [ retries-failed? ] must-fail-with
{ } [
[ 2 = [ "not 2!" throw ] unless ]
- 3 1.1 100 <exponential-wait> retries
+ 1.1 100 <exponential-wait> 3 retries
] unit-test
\ No newline at end of file
IN: retries
TUPLE: retries count time-strategy errors ;
-: new-retries ( time-strategy class -- obj )
+: new-retries ( class -- obj )
new
- swap >>time-strategy
0 >>count
V{ } clone >>errors ; inline
TUPLE: counted-retries < retries max-retries ;
-: <counted-retries> ( max time-strategy -- retries )
+: <counted-retries> ( time-strategy max-retries -- retries )
counted-retries new-retries
- swap >>max-retries ;
+ swap >>max-retries
+ swap >>time-strategy ; inline
TUPLE: sequence-retries < retries seq ;
-: <sequence-retries> ( seq time-strategy -- retries )
+: <sequence-retries> ( time-strategy seq -- retries )
sequence-retries new-retries
- swap >>seq ;
+ swap >>seq
+ swap >>time-strategy ; inline
-GENERIC#: retries* 1 ( seq/n time-strategy -- obj )
+GENERIC: retries* ( time-strategy seq/n -- obj )
M: integer retries* <counted-retries> ;
M: sequence retries* <sequence-retries> ;
] loop1
] with-variable ; inline
-: retries ( quot time-strategy -- result )
+: retries ( quot time-strategy n/seq -- result )
retries* swap with-retries ; inline