2008-04-26 00:12:44 -04:00
|
|
|
USING: math.intervals kernel sequences words math math.order
|
2008-07-22 22:04:22 -04:00
|
|
|
arrays prettyprint tools.test random vocabs combinators
|
2009-08-11 17:49:28 -04:00
|
|
|
accessors math.constants fry ;
|
2008-03-01 17:00:45 -05:00
|
|
|
IN: math.intervals.tests
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ empty-interval ] [ 2 2 (a,b) ] unit-test
|
|
|
|
|
2009-08-09 04:07:33 -04:00
|
|
|
[ empty-interval ] [ 2 2.0 (a,b) ] unit-test
|
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ empty-interval ] [ 2 2 [a,b) ] unit-test
|
|
|
|
|
|
|
|
[ empty-interval ] [ 2 2 (a,b] ] unit-test
|
|
|
|
|
|
|
|
[ empty-interval ] [ 3 2 [a,b] ] unit-test
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
[ T{ interval f { 1 t } { 2 t } } ] [ 1 2 [a,b] ] unit-test
|
|
|
|
|
|
|
|
[ T{ interval f { 1 t } { 2 f } } ] [ 1 2 [a,b) ] unit-test
|
|
|
|
|
|
|
|
[ T{ interval f { 1 f } { 2 f } } ] [ 1 2 (a,b) ] unit-test
|
|
|
|
|
|
|
|
[ T{ interval f { 1 f } { 2 t } } ] [ 1 2 (a,b] ] unit-test
|
|
|
|
|
|
|
|
[ T{ interval f { 1 t } { 1 t } } ] [ 1 [a,a] ] unit-test
|
|
|
|
|
2009-08-22 18:15:10 -04:00
|
|
|
[ 1 0/0. [a,b] ] must-fail
|
|
|
|
[ 0/0. 1 [a,b] ] must-fail
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
[ t ] [ { 3 t } { 3 f } endpoint< ] unit-test
|
|
|
|
[ t ] [ { 2 f } { 3 f } endpoint< ] unit-test
|
|
|
|
[ f ] [ { 3 f } { 3 t } endpoint< ] unit-test
|
|
|
|
[ t ] [ { 4 f } { 3 t } endpoint> ] unit-test
|
|
|
|
[ f ] [ { 3 f } { 3 t } endpoint> ] unit-test
|
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ empty-interval ] [ 1 2 [a,b] empty-interval interval+ ] unit-test
|
|
|
|
|
|
|
|
[ empty-interval ] [ empty-interval 1 2 [a,b] interval+ ] unit-test
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
[ t ] [
|
|
|
|
1 2 [a,b] -3 3 [a,b] interval+ -2 5 [a,b] =
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
1 2 [a,b] -3 3 (a,b) interval+ -2 5 (a,b) =
|
|
|
|
] unit-test
|
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ empty-interval ] [ 1 2 [a,b] empty-interval interval- ] unit-test
|
|
|
|
|
|
|
|
[ empty-interval ] [ empty-interval 1 2 [a,b] interval- ] unit-test
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
[ t ] [
|
|
|
|
1 2 [a,b] 0 1 [a,b] interval- 0 2 [a,b] =
|
|
|
|
] unit-test
|
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ empty-interval ] [ 1 2 [a,b] empty-interval interval* ] unit-test
|
|
|
|
|
|
|
|
[ empty-interval ] [ empty-interval 1 2 [a,b] interval* ] unit-test
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
[ t ] [
|
|
|
|
1 2 [a,b] 0 4 [a,b] interval* 0 8 [a,b] =
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
1 2 [a,b] -4 4 [a,b] interval* -8 8 [a,b] =
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
2008-09-02 03:02:05 -04:00
|
|
|
1 2 [a,b] -0.5 0.5 [a,b] interval* -1.0 1.0 [a,b] =
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
2008-09-02 03:02:05 -04:00
|
|
|
1 2 [a,b] -0.5 0.5 (a,b] interval* -1.0 1.0 (a,b] =
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
-1 1 [a,b] -1 1 (a,b] interval* -1 1 [a,b] =
|
|
|
|
] unit-test
|
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ t ] [ 1 2 [a,b] dup empty-interval interval-union = ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ empty-interval 1 2 [a,b] tuck interval-union = ] unit-test
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
[ t ] [
|
|
|
|
0 1 (a,b) 0 1 [a,b] interval-union 0 1 [a,b] =
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
0 1 (a,b) 1 2 [a,b] interval-union 0 2 (a,b] =
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
0 1 (a,b) 0 1 [a,b] interval-intersect 0 1 (a,b) =
|
|
|
|
] unit-test
|
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ empty-interval ] [ 0 5 [a,b] -1 [a,a] interval-intersect ] unit-test
|
|
|
|
|
|
|
|
[ empty-interval ] [ 0 5 (a,b] 0 [a,a] interval-intersect ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ empty-interval ] [ empty-interval -1 [a,a] interval-intersect ] unit-test
|
|
|
|
|
|
|
|
[ empty-interval ] [ 0 5 (a,b] empty-interval interval-intersect ] unit-test
|
|
|
|
|
2008-11-11 09:30:14 -05:00
|
|
|
[ t ] [
|
|
|
|
0 1 (a,b) full-interval interval-intersect 0 1 (a,b) =
|
|
|
|
] unit-test
|
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ t ] [
|
|
|
|
empty-interval empty-interval interval-subset?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
empty-interval 0 1 [a,b] interval-subset?
|
|
|
|
] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
0 1 (a,b) 0 1 [a,b] interval-subset?
|
|
|
|
] unit-test
|
|
|
|
|
2009-08-12 04:25:53 -04:00
|
|
|
[ t ] [
|
|
|
|
full-interval -1/0. 1/0. [a,b] interval-subset?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
-1/0. 1/0. [a,b] full-interval interval-subset?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ f ] [
|
|
|
|
full-interval 0 1/0. [a,b] interval-subset?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
0 1/0. [a,b] full-interval interval-subset?
|
|
|
|
] unit-test
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
[ f ] [
|
|
|
|
0 0 1 (a,b) interval-contains?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
2007-10-14 20:38:23 -04:00
|
|
|
0.5 0 1 (a,b) interval-contains?
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ f ] [
|
|
|
|
1 0 1 (a,b) interval-contains?
|
|
|
|
] unit-test
|
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ empty-interval ] [ -1 1 (a,b) empty-interval interval/ ] unit-test
|
|
|
|
|
2008-08-26 01:19:40 -04:00
|
|
|
[ t ] [ 0 0 331 [a,b) -1775 -953 (a,b) interval/ interval-contains? ] unit-test
|
|
|
|
|
2008-07-22 02:27:39 -04:00
|
|
|
[ t ] [ -1 1 (a,b) -1 1 (a,b) interval/ [-inf,inf] = ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-22 02:27:39 -04:00
|
|
|
[ t ] [ -1 1 (a,b) 0 1 (a,b) interval/ [-inf,inf] = ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-10-14 21:13:42 -04:00
|
|
|
"math.ratios.private" vocab [
|
|
|
|
[ t ] [
|
2008-09-02 03:02:05 -04:00
|
|
|
-1 1 (a,b) 0.5 1 (a,b) interval/ -2.0 2.0 (a,b) =
|
2007-10-14 21:13:42 -04:00
|
|
|
] unit-test
|
|
|
|
] when
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ f ] [ empty-interval interval-singleton? ] unit-test
|
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ t ] [ 1 [a,a] interval-singleton? ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ f ] [ 1 1 [a,b) interval-singleton? ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ f ] [ 1 3 [a,b) interval-singleton? ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ f ] [ 1 1 (a,b) interval-singleton? ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ 2 ] [ 1 3 [a,b) interval-length ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ 0 ] [ empty-interval interval-length ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ t ] [ 0 5 [a,b] 5 [a,a] interval<= ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ incomparable ] [ empty-interval 5 [a,a] interval< ] unit-test
|
|
|
|
|
|
|
|
[ incomparable ] [ 5 [a,a] empty-interval interval< ] unit-test
|
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ incomparable ] [ 0 5 [a,b] 5 [a,a] interval< ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ t ] [ 0 5 [a,b) 5 [a,a] interval< ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ f ] [ 0 5 [a,b] -1 [a,a] interval< ] unit-test
|
|
|
|
|
|
|
|
[ incomparable ] [ 0 5 [a,b] 1 [a,a] interval< ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -1 1 (a,b) -1 [a,a] interval> ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -1 1 (a,b) -1 [a,a] interval>= ] unit-test
|
|
|
|
|
|
|
|
[ f ] [ -1 1 (a,b) -1 [a,a] interval< ] unit-test
|
|
|
|
|
|
|
|
[ f ] [ -1 1 (a,b) -1 [a,a] interval<= ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -1 1 (a,b] 1 [a,a] interval<= ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -1 1 (a,b] 1 2 [a,b] interval<= ] unit-test
|
|
|
|
|
2008-07-22 22:04:22 -04:00
|
|
|
[ incomparable ] [ -1 1 (a,b] empty-interval interval>= ] unit-test
|
|
|
|
|
|
|
|
[ incomparable ] [ empty-interval -1 1 (a,b] interval>= ] unit-test
|
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ incomparable ] [ -1 1 (a,b] 1 2 [a,b] interval>= ] unit-test
|
|
|
|
|
|
|
|
[ incomparable ] [ -1 1 (a,b] 1 2 [a,b] interval> ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -1 1 (a,b] 1 2 (a,b] interval<= ] unit-test
|
|
|
|
|
|
|
|
[ f ] [ 0 10 [a,b] 0 [a,a] interval< ] unit-test
|
|
|
|
|
2009-08-09 04:07:33 -04:00
|
|
|
[ f ] [ 0 10 [a,b] 0.0 [a,a] interval< ] unit-test
|
|
|
|
|
|
|
|
[ f ] [ 0.0 10 [a,b] 0 [a,a] interval< ] unit-test
|
|
|
|
|
2008-03-07 22:27:00 -05:00
|
|
|
[ f ] [ 0 10 [a,b] 10 [a,a] interval> ] unit-test
|
|
|
|
|
|
|
|
[ incomparable ] [ 0 [a,a] 0 10 [a,b] interval< ] unit-test
|
|
|
|
|
|
|
|
[ incomparable ] [ 10 [a,a] 0 10 [a,b] interval> ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ 0 [a,a] 0 10 [a,b] interval<= ] unit-test
|
|
|
|
|
|
|
|
[ incomparable ] [ 0 [a,a] 0 10 [a,b] interval>= ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ 0 10 [a,b] 0 [a,a] interval>= ] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
418
|
|
|
|
418 423 [a,b)
|
|
|
|
79 893 (a,b]
|
|
|
|
interval-max
|
|
|
|
interval-contains?
|
|
|
|
] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-22 02:27:39 -04:00
|
|
|
[ t ] [ 1 100 [a,b] -1 1 [a,b] interval/i [-inf,inf] = ] unit-test
|
2008-03-08 03:51:26 -05:00
|
|
|
|
2009-08-08 23:01:12 -04:00
|
|
|
! Accuracy of interval-mod
|
|
|
|
[ t ] [ full-interval 40 40 [a,b] interval-mod -40 40 (a,b) interval-subset?
|
|
|
|
] unit-test
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
! Interval random tester
|
|
|
|
: random-element ( interval -- n )
|
2008-11-11 09:30:14 -05:00
|
|
|
dup full-interval eq? [
|
|
|
|
drop 32 random-bits 31 2^ -
|
2008-03-07 22:27:00 -05:00
|
|
|
] [
|
2008-11-11 09:30:14 -05:00
|
|
|
dup to>> first over from>> first tuck - random +
|
|
|
|
2dup swap interval-contains? [
|
|
|
|
nip
|
|
|
|
] [
|
|
|
|
drop random-element
|
|
|
|
] if
|
2008-03-07 22:27:00 -05:00
|
|
|
] if ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: random-interval ( -- interval )
|
2008-11-11 09:30:14 -05:00
|
|
|
10 random 0 = [ full-interval ] [
|
|
|
|
2000 random 1000 - dup 2 1000 random + +
|
|
|
|
1 random zero? [ [ neg ] bi@ swap ] when
|
|
|
|
4 random {
|
|
|
|
{ 0 [ [a,b] ] }
|
|
|
|
{ 1 [ [a,b) ] }
|
|
|
|
{ 2 [ (a,b) ] }
|
|
|
|
{ 3 [ (a,b] ] }
|
|
|
|
} case
|
|
|
|
] if ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
: unary-ops ( -- alist )
|
2008-07-22 02:27:39 -04:00
|
|
|
{
|
|
|
|
{ bitnot interval-bitnot }
|
|
|
|
{ abs interval-abs }
|
|
|
|
{ 2/ interval-2/ }
|
|
|
|
{ neg interval-neg }
|
|
|
|
}
|
|
|
|
"math.ratios.private" vocab [
|
|
|
|
{ recip interval-recip } suffix
|
2009-08-11 17:49:28 -04:00
|
|
|
] when ;
|
2008-07-22 02:27:39 -04:00
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
: unary-test ( op -- ? )
|
|
|
|
[ random-interval ] dip
|
2008-07-22 02:27:39 -04:00
|
|
|
0 pick interval-contains? over first \ recip eq? and [
|
|
|
|
2drop t
|
|
|
|
] [
|
2009-04-17 15:44:08 -04:00
|
|
|
[ [ random-element ] dip first execute( a -- b ) ] 2keep
|
|
|
|
second execute( a -- b ) interval-contains?
|
2008-07-22 02:27:39 -04:00
|
|
|
] if ;
|
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
unary-ops [
|
|
|
|
[ [ t ] ] dip '[ 8000 iota [ drop _ unary-test ] all? ] unit-test
|
|
|
|
] each
|
2008-07-22 02:27:39 -04:00
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
: binary-ops ( -- alist )
|
2007-09-20 18:09:08 -04:00
|
|
|
{
|
|
|
|
{ + interval+ }
|
|
|
|
{ - interval- }
|
|
|
|
{ * interval* }
|
|
|
|
{ /i interval/i }
|
2008-07-22 02:27:39 -04:00
|
|
|
{ mod interval-mod }
|
|
|
|
{ rem interval-rem }
|
|
|
|
{ bitand interval-bitand }
|
|
|
|
{ bitor interval-bitor }
|
|
|
|
{ bitxor interval-bitxor }
|
2007-09-20 18:09:08 -04:00
|
|
|
{ min interval-min }
|
|
|
|
{ max interval-max }
|
2007-10-14 20:38:23 -04:00
|
|
|
}
|
|
|
|
"math.ratios.private" vocab [
|
2008-03-31 21:24:48 -04:00
|
|
|
{ / interval/ } suffix
|
2009-08-11 17:49:28 -04:00
|
|
|
] when ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
: binary-test ( op -- ? )
|
|
|
|
[ random-interval random-interval ] dip
|
2008-07-23 21:11:43 -04:00
|
|
|
0 pick interval-contains? over first { / /i mod rem } member? and [
|
2007-09-20 18:09:08 -04:00
|
|
|
3drop t
|
|
|
|
] [
|
2009-04-17 15:44:08 -04:00
|
|
|
[ [ [ random-element ] bi@ ] dip first execute( a b -- c ) ] 3keep
|
|
|
|
second execute( a b -- c ) interval-contains?
|
2007-09-20 18:09:08 -04:00
|
|
|
] if ;
|
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
binary-ops [
|
|
|
|
[ [ t ] ] dip '[ 8000 iota [ drop _ binary-test ] all? ] unit-test
|
|
|
|
] each
|
2008-03-07 22:27:00 -05:00
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
: comparison-ops ( -- alist )
|
2008-03-07 22:27:00 -05:00
|
|
|
{
|
|
|
|
{ < interval< }
|
|
|
|
{ <= interval<= }
|
|
|
|
{ > interval> }
|
|
|
|
{ >= interval>= }
|
2009-08-11 17:49:28 -04:00
|
|
|
} ;
|
2008-03-07 22:27:00 -05:00
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
: comparison-test ( op -- ? )
|
|
|
|
[ random-interval random-interval ] dip
|
2009-04-22 08:05:00 -04:00
|
|
|
[ [ [ random-element ] bi@ ] dip first execute( a b -- ? ) ] 3keep
|
|
|
|
second execute( a b -- ? ) dup incomparable eq? [ 2drop t ] [ = ] if ;
|
2008-03-07 22:27:00 -05:00
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
comparison-ops [
|
|
|
|
[ [ t ] ] dip '[ 8000 iota [ drop _ comparison-test ] all? ] unit-test
|
|
|
|
] each
|
2008-07-04 19:18:00 -04:00
|
|
|
|
|
|
|
[ t ] [ -10 10 [a,b] 0 100 [a,b] assume> 0 10 (a,b] = ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -10 10 [a,b] 0 100 [a,b] assume>= 0 10 [a,b] = ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -10 10 [a,b] 0 100 [a,b] assume< -10 10 [a,b] = ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -10 10 [a,b] -100 0 [a,b] assume< -10 0 [a,b) = ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -10 10 [a,b] -100 0 [a,b] assume<= -10 0 [a,b] = ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ -10 10 [a,b] 0 100 [a,b] assume<= -10 10 [a,b] = ] unit-test
|
2008-07-23 21:11:43 -04:00
|
|
|
|
|
|
|
[ t ] [ -10 10 [a,b] interval-abs 0 10 [a,b] = ] unit-test
|
|
|
|
|
2009-08-19 03:32:18 -04:00
|
|
|
[ t ] [ full-interval interval-abs [0,inf] = ] unit-test
|
|
|
|
|
2009-08-22 18:15:10 -04:00
|
|
|
[ t ] [ [0,inf] interval-abs [0,inf] = ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ empty-interval interval-abs empty-interval = ] unit-test
|
|
|
|
|
2009-08-19 03:32:18 -04:00
|
|
|
[ t ] [ [0,inf] interval-sq [0,inf] = ] unit-test
|
|
|
|
|
2008-07-23 21:11:43 -04:00
|
|
|
! Test that commutative interval ops really are
|
2009-04-17 15:44:08 -04:00
|
|
|
: random-interval-or-empty ( -- obj )
|
2008-07-23 21:11:43 -04:00
|
|
|
10 random 0 = [ empty-interval ] [ random-interval ] if ;
|
|
|
|
|
2009-08-11 17:49:28 -04:00
|
|
|
: commutative-ops ( -- seq )
|
2008-07-23 21:11:43 -04:00
|
|
|
{
|
|
|
|
interval+ interval*
|
|
|
|
interval-bitor interval-bitand interval-bitxor
|
|
|
|
interval-max interval-min
|
2009-08-11 17:49:28 -04:00
|
|
|
} ;
|
|
|
|
|
|
|
|
commutative-ops [
|
|
|
|
[ [ t ] ] dip '[
|
|
|
|
8000 iota [
|
|
|
|
drop
|
|
|
|
random-interval-or-empty random-interval-or-empty _
|
|
|
|
[ execute ] [ swapd execute ] 3bi =
|
|
|
|
] all?
|
|
|
|
] unit-test
|
|
|
|
] each
|