1 USING: math.intervals kernel sequences words math arrays
2 prettyprint tools.test random ;
5 [ T{ interval f { 1 t } { 2 t } } ] [ 1 2 [a,b] ] unit-test
7 [ T{ interval f { 1 t } { 2 f } } ] [ 1 2 [a,b) ] unit-test
9 [ T{ interval f { 1 f } { 2 f } } ] [ 1 2 (a,b) ] unit-test
11 [ T{ interval f { 1 f } { 2 t } } ] [ 1 2 (a,b] ] unit-test
13 [ T{ interval f { 1 t } { 1 t } } ] [ 1 [a,a] ] unit-test
15 [ t ] [ { 3 t } { 3 f } endpoint< ] unit-test
16 [ t ] [ { 2 f } { 3 f } endpoint< ] unit-test
17 [ f ] [ { 3 f } { 3 t } endpoint< ] unit-test
18 [ t ] [ { 4 f } { 3 t } endpoint> ] unit-test
19 [ f ] [ { 3 f } { 3 t } endpoint> ] unit-test
22 1 2 [a,b] -3 3 [a,b] interval+ -2 5 [a,b] =
26 1 2 [a,b] -3 3 (a,b) interval+ -2 5 (a,b) =
30 1 2 [a,b] 0 1 [a,b] interval- 0 2 [a,b] =
34 1 2 [a,b] 0 4 [a,b] interval* 0 8 [a,b] =
38 1 2 [a,b] -4 4 [a,b] interval* -8 8 [a,b] =
42 1 2 [a,b] -1/2 1/2 [a,b] interval* -1 1 [a,b] =
46 1 2 [a,b] -1/2 1/2 (a,b] interval* -1 1 (a,b] =
50 -1 1 [a,b] -1 1 (a,b] interval* -1 1 [a,b] =
54 0 1 (a,b) 0 1 [a,b] interval-union 0 1 [a,b] =
58 0 1 (a,b) 1 2 [a,b] interval-union 0 2 (a,b] =
61 [ f ] [ 0 1 (a,b) f interval-union ] unit-test
64 0 1 (a,b) 0 1 [a,b] interval-intersect 0 1 (a,b) =
67 [ f ] [ 0 5 [a,b] -1 [a,a] interval-intersect ] unit-test
69 [ f ] [ 0 5 (a,b] 0 [a,a] interval-intersect ] unit-test
72 0 1 (a,b) 0 1 [a,b] interval-subset?
76 0 0 1 (a,b) interval-contains?
80 1/2 0 1 (a,b) interval-contains?
84 1 0 1 (a,b) interval-contains?
87 [ f ] [ -1 1 (a,b) -1 1 (a,b) interval/ ] unit-test
89 [ f ] [ -1 1 (a,b) 0 1 (a,b) interval/ ] unit-test
92 -1 1 (a,b) 1/2 1 (a,b) interval/ -2 2 (a,b) =
95 [ t ] [ 0 5 [a,b] 5 interval<= ] unit-test
97 [ incomparable ] [ 0 5 [a,b] 5 interval< ] unit-test
99 [ t ] [ 0 5 [a,b) 5 interval< ] unit-test
101 [ f ] [ 0 5 [a,b] -1 interval< ] unit-test
103 [ incomparable ] [ 0 5 [a,b] 1 interval< ] unit-test
105 [ t ] [ -1 1 (a,b) -1 interval> ] unit-test
107 [ t ] [ -1 1 (a,b) -1 interval>= ] unit-test
109 [ f ] [ -1 1 (a,b) -1 interval< ] unit-test
111 [ f ] [ -1 1 (a,b) -1 interval<= ] unit-test
113 [ t ] [ -1 1 (a,b] 1 interval<= ] unit-test
115 ! Interval random tester
116 : random-element ( interval -- n )
117 dup interval-to first swap interval-from first tuck -
120 : random-interval ( -- interval )
121 1000 random dup 1 1000 random + + [a,b] ;
130 { shift interval-shift }
136 random-interval random-interval random-op
137 0 pick interval-contains? over first { / /i } member? and [
140 [ >r [ random-element ] 2apply r> first execute ] 3keep
141 second execute interval-contains?
144 [ t ] [ 1000 [ drop interval-test ] all? ] unit-test