| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 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
 |