| 
									
										
										
										
											2009-06-12 12:58:07 -04:00
										 |  |  | USING: accessors arrays assocs calendar classes classes.algebra | 
					
						
							|  |  |  | classes.private classes.tuple classes.tuple.private columns | 
					
						
							|  |  |  | compiler.errors compiler.units continuations definitions | 
					
						
							|  |  |  | effects eval generic generic.single generic.standard grouping | 
					
						
							|  |  |  | io.streams.string kernel kernel.private math math.constants | 
					
						
							|  |  |  | math.order namespaces parser parser.notes prettyprint | 
					
						
							|  |  |  | quotations random see sequences sequences.private slots | 
					
						
							|  |  |  | slots.private splitting strings summary threads tools.test | 
					
						
							| 
									
										
										
										
											2012-07-24 17:05:58 -04:00
										 |  |  | vectors vocabs words words.symbol fry literals memory | 
					
						
							|  |  |  | combinators.short-circuit ;
 | 
					
						
							| 
									
										
										
										
											2008-03-29 04:34:48 -04:00
										 |  |  | IN: classes.tuple.tests | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: rect x y w h ;
 | 
					
						
							| 
									
										
										
										
											2008-06-08 16:32:55 -04:00
										 |  |  | : <rect> ( x y w h -- rect ) rect boa ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | : move ( x rect -- rect )
 | 
					
						
							|  |  |  |     [ + ] change-x ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | [ f ] [ 10 20 30 40 <rect> dup clone 5 swap move = ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | [ t ] [ 10 20 30 40 <rect> dup clone 0 swap move = ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | ! Make sure we handle tuple class redefinition | 
					
						
							|  |  |  | TUPLE: redefinition-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | C: <redefinition-test> redefinition-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <redefinition-test> "redefinition-test" set
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ "redefinition-test" get redefinition-test? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | "IN: classes.tuple.tests TUPLE: redefinition-test ;" eval( -- ) | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ "redefinition-test" get redefinition-test? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! Make sure we handle changing shapes! | 
					
						
							|  |  |  | TUPLE: point x y ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ ] [ 100 200 point boa "p" set ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Use eval to sequence parsing explicitly | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: point x y z ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 100 ] [ "p" get x>> ] unit-test | 
					
						
							|  |  |  | [ 200 ] [ "p" get y>> ] unit-test | 
					
						
							| 
									
										
										
										
											2011-11-06 18:57:24 -05:00
										 |  |  | [ f ] [ "p" get "z>>" "accessors" lookup-word execute ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-06 18:57:24 -05:00
										 |  |  | [ ] [ "p" get 300 ">>z" "accessors" lookup-word execute drop ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 07:05:50 -04:00
										 |  |  | [ 3 ] [ "p" get tuple-size ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-06 18:57:24 -05:00
										 |  |  | [ 300 ] [ "p" get "z>>" "accessors" lookup-word execute ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: point z y ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 07:05:50 -04:00
										 |  |  | [ 2 ] [ "p" get tuple-size ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ "p" get x>> ] must-fail | 
					
						
							|  |  |  | [ 200 ] [ "p" get y>> ] unit-test | 
					
						
							| 
									
										
										
										
											2011-11-06 18:57:24 -05:00
										 |  |  | [ 300 ] [ "p" get "z>>" "accessors" lookup-word execute ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-22 16:48:25 -04:00
										 |  |  | TUPLE: slotty a b c ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ T{ slotty } ] [ H{ } slotty from-slots ] unit-test | 
					
						
							|  |  |  | [ T{ slotty f 1 2 f } ] [ H{ { "a" 1 } { "b" 2 } } slotty from-slots ] unit-test | 
					
						
							|  |  |  | [ H{ { "d" 0 } } slotty new set-slots ] must-fail | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | TUPLE: predicate-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | C: <predicate-test> predicate-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-22 21:16:31 -04:00
										 |  |  | : predicate-test ( a -- ? ) drop f ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ <predicate-test> predicate-test? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | PREDICATE: silly-pred < tuple | 
					
						
							| 
									
										
										
										
											2011-10-24 07:47:42 -04:00
										 |  |  |     class-of \ rect = ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-08 16:32:55 -04:00
										 |  |  | GENERIC: area ( obj -- n )
 | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | M: silly-pred area dup w>> swap h>> * ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: circle radius ;
 | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | M: circle area radius>> sq pi * ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 200 ] [ T{ rect f 0 0 10 20 } area ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Hashcode breakage | 
					
						
							|  |  |  | TUPLE: empty ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | C: <empty> empty | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ <empty> hashcode fixnum? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Compiler regression | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  | [ t length ] [ object>> t eq? ] must-fail-with | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ "<constructor-test>" ] | 
					
						
							| 
									
										
										
										
											2013-03-24 04:11:54 -04:00
										 |  |  | [ "IN: classes.tuple.test TUPLE: constructor-test ; C: <constructor-test> constructor-test" eval( -- ) last-word name>> ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: size-test a b c d ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							| 
									
										
										
										
											2008-03-26 17:38:31 -04:00
										 |  |  |     T{ size-test } tuple-size | 
					
						
							| 
									
										
										
										
											2008-11-05 23:20:29 -05:00
										 |  |  |     size-test tuple-layout second =
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-22 21:16:31 -04:00
										 |  |  | GENERIC: <yo-momma> ( a -- b )
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: yo-momma ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests C: <yo-momma> yo-momma" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ f ] [ \ <yo-momma> generic? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Test forget | 
					
						
							| 
									
										
										
										
											2007-12-24 17:32:41 -05:00
										 |  |  | [ | 
					
						
							|  |  |  |     [ t ] [ \ yo-momma class? ] unit-test | 
					
						
							|  |  |  |     [ ] [ \ yo-momma forget ] unit-test | 
					
						
							| 
									
										
										
										
											2008-06-11 18:40:33 -04:00
										 |  |  |     [ ] [ \ <yo-momma> forget ] unit-test | 
					
						
							| 
									
										
										
										
											2009-10-28 16:02:00 -04:00
										 |  |  |     [ f ] [ \ yo-momma update-map get values member-eq? ] unit-test | 
					
						
							| 
									
										
										
										
											2007-12-24 17:32:41 -05:00
										 |  |  | ] with-compilation-unit | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: loc-recording ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ f ] [ \ loc-recording where not ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! 'forget' wasn't robust enough | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: forget-robustness ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-22 21:16:31 -04:00
										 |  |  | GENERIC: forget-robustness-generic ( a -- b )
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: forget-robustness forget-robustness-generic ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: integer forget-robustness-generic ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-24 17:32:41 -05:00
										 |  |  | [ | 
					
						
							|  |  |  |     [ ] [ \ forget-robustness-generic forget ] unit-test | 
					
						
							|  |  |  |     [ ] [ \ forget-robustness forget ] unit-test | 
					
						
							| 
									
										
										
										
											2009-04-06 05:16:39 -04:00
										 |  |  |     [ ] [ M\ forget-robustness forget-robustness-generic forget ] unit-test | 
					
						
							| 
									
										
										
										
											2007-12-24 17:32:41 -05:00
										 |  |  | ] with-compilation-unit | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! rapido found this one | 
					
						
							|  |  |  | GENERIC# m1 0 ( s n -- n )
 | 
					
						
							|  |  |  | GENERIC# m2 1 ( s n -- v )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: t1 ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: t1 m1 drop ;
 | 
					
						
							|  |  |  | M: t1 m2 nip ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: t2 ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: t2 m1 drop ;
 | 
					
						
							|  |  |  | M: t2 m2 nip ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: t3 ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: t3 m1 drop ;
 | 
					
						
							|  |  |  | M: t3 m2 nip ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: t4 ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: t4 m1 drop ;
 | 
					
						
							|  |  |  | M: t4 m2 nip ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | C: <t4> t4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 ] [ 1 <t4> m1 ] unit-test | 
					
						
							|  |  |  | [ 1 ] [ <t4> 1 m2 ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! another combination issue | 
					
						
							| 
									
										
										
										
											2008-06-08 16:32:55 -04:00
										 |  |  | GENERIC: silly ( obj -- obj obj )
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | UNION: my-union slice repetition column array vector reversed ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: my-union silly "x" ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: array silly "y" ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: column silly "fdsfds" ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: repetition silly "zzz" ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: reversed silly "zz" ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: slice silly "tt" ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: string silly "t" ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: vector silly "z" ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ "zz" ] [ 123 <reversed> silly nip ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Typo | 
					
						
							|  |  |  | SYMBOL: not-a-tuple-class | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Missing check | 
					
						
							| 
									
										
										
										
											2008-04-13 16:06:09 -04:00
										 |  |  | [ not-a-tuple-class boa ] must-fail | 
					
						
							|  |  |  | [ not-a-tuple-class new ] must-fail | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-26 20:02:41 -05:00
										 |  |  | TUPLE: erg's-reshape-problem a b c d ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-24 19:40:09 -05:00
										 |  |  | C: <erg's-reshape-problem> erg's-reshape-problem | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | ! Inheritance | 
					
						
							|  |  |  | TUPLE: computer cpu ram ;
 | 
					
						
							| 
									
										
										
										
											2008-03-27 02:42:13 -04:00
										 |  |  | C: <computer> computer | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:37:28 -04:00
										 |  |  | [ "TUPLE: computer cpu ram ;" ] [ | 
					
						
							|  |  |  |     [ \ computer see ] with-string-writer string-lines second
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: laptop < computer battery ;
 | 
					
						
							|  |  |  | C: <laptop> laptop | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ laptop tuple-class? ] unit-test | 
					
						
							| 
									
										
										
										
											2008-05-02 03:51:38 -04:00
										 |  |  | [ t ] [ laptop tuple class<= ] unit-test | 
					
						
							|  |  |  | [ t ] [ laptop computer class<= ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | [ t ] [ laptop computer classes-intersect? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ "Pentium" 128 3 hours <laptop> "laptop" set ] unit-test | 
					
						
							|  |  |  | [ t ] [ "laptop" get laptop? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "laptop" get computer? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "laptop" get tuple? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-08 16:32:55 -04:00
										 |  |  | : test-laptop-slot-values ( -- )
 | 
					
						
							| 
									
										
										
										
											2011-10-24 07:47:42 -04:00
										 |  |  |     [ laptop ] [ "laptop" get class-of ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  |     [ "Pentium" ] [ "laptop" get cpu>> ] unit-test | 
					
						
							|  |  |  |     [ 128 ] [ "laptop" get ram>> ] unit-test | 
					
						
							|  |  |  |     [ t ] [ "laptop" get battery>> 3 hours = ] unit-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test-laptop-slot-values | 
					
						
							| 
									
										
										
										
											2008-03-27 02:42:13 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:37:28 -04:00
										 |  |  | [ "TUPLE: laptop < computer battery ;" ] [ | 
					
						
							|  |  |  |     [ \ laptop see ] with-string-writer string-lines second
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-27 02:42:13 -04:00
										 |  |  | [ { tuple computer laptop } ] [ laptop superclasses ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: server < computer rackmount ;
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | C: <server> server | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ server tuple-class? ] unit-test | 
					
						
							| 
									
										
										
										
											2008-05-02 03:51:38 -04:00
										 |  |  | [ t ] [ server tuple class<= ] unit-test | 
					
						
							|  |  |  | [ t ] [ server computer class<= ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | [ t ] [ server computer classes-intersect? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-27 02:42:13 -04:00
										 |  |  | [ ] [ "PowerPC" 64 "1U" <server> "server" set ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | [ t ] [ "server" get server? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "server" get computer? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "server" get tuple? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-08 16:32:55 -04:00
										 |  |  | : test-server-slot-values ( -- )
 | 
					
						
							| 
									
										
										
										
											2011-10-24 07:47:42 -04:00
										 |  |  |     [ server ] [ "server" get class-of ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  |     [ "PowerPC" ] [ "server" get cpu>> ] unit-test | 
					
						
							|  |  |  |     [ 64 ] [ "server" get ram>> ] unit-test | 
					
						
							|  |  |  |     [ "1U" ] [ "server" get rackmount>> ] unit-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test-server-slot-values | 
					
						
							| 
									
										
										
										
											2008-03-27 02:42:13 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | [ f ] [ "server" get laptop? ] unit-test | 
					
						
							|  |  |  | [ f ] [ "laptop" get server? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-02 03:51:38 -04:00
										 |  |  | [ f ] [ server laptop class<= ] unit-test | 
					
						
							|  |  |  | [ f ] [ laptop server class<= ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | [ f ] [ laptop server classes-intersect? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-27 02:42:13 -04:00
										 |  |  | [ f ] [ 1 2 <computer> laptop? ] unit-test | 
					
						
							|  |  |  | [ f ] [ \ + server? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ "TUPLE: server < computer rackmount ;" ] [ | 
					
						
							| 
									
										
										
										
											2008-03-26 19:37:28 -04:00
										 |  |  |     [ \ server see ] with-string-writer string-lines second
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ | 
					
						
							| 
									
										
										
										
											2010-02-22 22:35:52 -05:00
										 |  |  |     "IN: classes.tuple.tests TUPLE: invalid-superclass < word ;" eval( -- ) | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | ] must-fail | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  | ! Dynamically changing inheritance hierarchy | 
					
						
							| 
									
										
										
										
											2008-03-28 21:28:17 -04:00
										 |  |  | TUPLE: electronic-device ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 19:31:15 -04:00
										 |  |  | : computer?' ( a -- b ) computer? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ laptop new computer?' ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: computer < electronic-device cpu ram ; C: <computer> computer C: <laptop> laptop C: <server> server" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-28 21:28:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 19:31:15 -04:00
										 |  |  | [ t ] [ laptop new computer?' ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-02 03:51:38 -04:00
										 |  |  | [ f ] [ electronic-device laptop class<= ] unit-test | 
					
						
							|  |  |  | [ t ] [ server electronic-device class<= ] unit-test | 
					
						
							|  |  |  | [ t ] [ laptop server class-or electronic-device class<= ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-28 21:28:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ "laptop" get electronic-device? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "laptop" get computer? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "laptop" get laptop? ] unit-test | 
					
						
							|  |  |  | [ f ] [ "laptop" get server? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ "server" get electronic-device? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "server" get computer? ] unit-test | 
					
						
							|  |  |  | [ f ] [ "server" get laptop? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "server" get server? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: computer cpu ram ; C: <computer> computer C: <laptop> laptop C: <server> server" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-28 21:28:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ f ] [ "laptop" get electronic-device? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "laptop" get computer? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: computer < electronic-device cpu ram disk ; C: <computer> computer C: <laptop> laptop C: <server> server" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-laptop-slot-values | 
					
						
							|  |  |  | test-server-slot-values | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: electronic-device voltage ; C: <computer> computer C: <laptop> laptop C: <server> server" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-laptop-slot-values | 
					
						
							|  |  |  | test-server-slot-values | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: make-me-some-accessors voltage grounded? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ f ] [ "laptop" get voltage>> ] unit-test | 
					
						
							|  |  |  | [ f ] [ "server" get voltage>> ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ "laptop" get 220 >>voltage drop ] unit-test | 
					
						
							|  |  |  | [ ] [ "server" get 110 >>voltage drop ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: electronic-device voltage grounded? ; C: <computer> computer" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-laptop-slot-values | 
					
						
							|  |  |  | test-server-slot-values | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 220 ] [ "laptop" get voltage>> ] unit-test | 
					
						
							|  |  |  | [ 110 ] [ "server" get voltage>> ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: electronic-device grounded? voltage ; C: <computer> computer C: <laptop> laptop C: <server> server" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-laptop-slot-values | 
					
						
							|  |  |  | test-server-slot-values | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 220 ] [ "laptop" get voltage>> ] unit-test | 
					
						
							|  |  |  | [ 110 ] [ "server" get voltage>> ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Reshaping superclass and subclass simultaneously | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: electronic-device voltage ; TUPLE: computer < electronic-device cpu ram ; C: <computer> computer C: <laptop> laptop C: <server> server" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-laptop-slot-values | 
					
						
							|  |  |  | test-server-slot-values | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 220 ] [ "laptop" get voltage>> ] unit-test | 
					
						
							|  |  |  | [ 110 ] [ "server" get voltage>> ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Reshape crash | 
					
						
							|  |  |  | TUPLE: test1 a ; TUPLE: test2 < test1 b ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | "a" "b" test2 boa "test" set
 | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-08 16:32:55 -04:00
										 |  |  | : test-a/b ( -- )
 | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  |     [ "a" ] [ "test" get a>> ] unit-test | 
					
						
							|  |  |  |     [ "b" ] [ "test" get b>> ] unit-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test-a/b | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: test1 a x ; TUPLE: test2 < test1 b y ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-a/b | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: test1 a ; TUPLE: test2 < test1 b ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 02:19:34 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-a/b | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-31 02:26:09 -04:00
										 |  |  | ! Twice in the same compilation unit | 
					
						
							|  |  |  | [ | 
					
						
							|  |  |  |     test1 tuple { "a" "x" "y" } define-tuple-class | 
					
						
							|  |  |  |     test1 tuple { "a" "y" } define-tuple-class | 
					
						
							|  |  |  | ] with-compilation-unit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test-a/b | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  | ! Moving slots up and down | 
					
						
							|  |  |  | TUPLE: move-up-1 a b ;
 | 
					
						
							|  |  |  | TUPLE: move-up-2 < move-up-1 c ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | T{ move-up-2 f "a" "b" "c" } "move-up" set
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-08 16:32:55 -04:00
										 |  |  | : test-move-up ( -- )
 | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  |     [ "a" ] [ "move-up" get a>> ] unit-test | 
					
						
							|  |  |  |     [ "b" ] [ "move-up" get b>> ] unit-test | 
					
						
							|  |  |  |     [ "c" ] [ "move-up" get c>> ] unit-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test-move-up | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: move-up-1 a b c ; TUPLE: move-up-2 < move-up-1 ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-move-up | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: move-up-1 a c ; TUPLE: move-up-2 < move-up-1 b ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-move-up | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: move-up-1 c ; TUPLE: move-up-2 < move-up-1 b a ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | test-move-up | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: move-up-1 ; TUPLE: move-up-2 < move-up-1 a b c ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Constructors must be recompiled when changing superclass | 
					
						
							|  |  |  | TUPLE: constructor-update-1 xxx ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: constructor-update-2 < constructor-update-1 yyy zzz ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | : <constructor-update-2> ( a b c -- tuple ) constructor-update-2 boa ;
 | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | { 3 1 } [ <constructor-update-2> ] must-infer-as | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: constructor-update-1 xxx ttt www ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | { 3 1 } [ <constructor-update-2> ] must-infer-as | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 2 3 4 5 <constructor-update-2> ] [ not-compiled? ] must-fail-with | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ ] [ [ \ <constructor-update-2> forget ] with-compilation-unit ] unit-test | 
					
						
							| 
									
										
										
										
											2008-03-31 04:40:27 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-29 06:03:04 -04:00
										 |  |  | ! Redefinition problem | 
					
						
							|  |  |  | TUPLE: redefinition-problem ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | UNION: redefinition-problem' redefinition-problem integer ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ 3 redefinition-problem'? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: redefinition-problem-2 ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | "IN: classes.tuple.tests TUPLE: redefinition-problem < redefinition-problem-2 ;" eval( -- ) | 
					
						
							| 
									
										
										
										
											2008-03-29 06:03:04 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ 3 redefinition-problem'? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 18:07:50 -04:00
										 |  |  | ! Hardcore unit tests | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-13 22:06:50 -04:00
										 |  |  | \ thread "slots" word-prop "slots" set
 | 
					
						
							| 
									
										
										
										
											2008-03-26 18:07:50 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-07-13 22:06:50 -04:00
										 |  |  |         \ thread tuple { "xxx" } "slots" get append
 | 
					
						
							| 
									
										
										
										
											2008-03-26 18:07:50 -04:00
										 |  |  |         define-tuple-class | 
					
						
							|  |  |  |     ] with-compilation-unit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [ 1337 sleep ] "Test" spawn drop
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-07-13 22:06:50 -04:00
										 |  |  |         \ thread tuple "slots" get
 | 
					
						
							| 
									
										
										
										
											2008-03-26 18:07:50 -04:00
										 |  |  |         define-tuple-class | 
					
						
							|  |  |  |     ] with-compilation-unit | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-13 22:06:50 -04:00
										 |  |  | \ vocab "slots" word-prop "slots" set
 | 
					
						
							| 
									
										
										
										
											2008-03-26 18:07:50 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2010-01-27 02:24:33 -05:00
										 |  |  |         \ vocab identity-tuple { "xxx" } "slots" get append
 | 
					
						
							| 
									
										
										
										
											2008-03-26 18:07:50 -04:00
										 |  |  |         define-tuple-class | 
					
						
							|  |  |  |     ] with-compilation-unit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     all-words drop
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2010-01-27 02:24:33 -05:00
										 |  |  |         \ vocab identity-tuple "slots" get
 | 
					
						
							| 
									
										
										
										
											2008-03-26 18:07:50 -04:00
										 |  |  |         define-tuple-class | 
					
						
							|  |  |  |     ] with-compilation-unit | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-04-02 22:27:49 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ "USE: words T{ word }" eval( -- ) ] | 
					
						
							| 
									
										
										
										
											2008-09-03 07:05:50 -04:00
										 |  |  | [ error>> T{ no-method f word new } = ] | 
					
						
							| 
									
										
										
										
											2008-06-30 04:10:43 -04:00
										 |  |  | must-fail-with | 
					
						
							| 
									
										
										
										
											2008-04-02 22:27:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Accessors not being forgotten... | 
					
						
							|  |  |  | [ [ ] ] [ | 
					
						
							|  |  |  |     "IN: classes.tuple.tests TUPLE: forget-accessors-test x y z ;" | 
					
						
							|  |  |  |     <string-reader> | 
					
						
							|  |  |  |     "forget-accessors-test" parse-stream | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-06 18:57:24 -05:00
										 |  |  | [ t ] [ "forget-accessors-test" "classes.tuple.tests" lookup-word class? ] unit-test | 
					
						
							| 
									
										
										
										
											2008-04-02 22:27:49 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 13:45:57 -04:00
										 |  |  | : accessor-exists? ( name -- ? )
 | 
					
						
							| 
									
										
										
										
											2011-11-06 18:57:24 -05:00
										 |  |  |     [ "forget-accessors-test" "classes.tuple.tests" lookup-word ] dip
 | 
					
						
							|  |  |  |     ">>" append "accessors" lookup-word ?lookup-method >boolean ;
 | 
					
						
							| 
									
										
										
										
											2008-04-02 22:27:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ "x" accessor-exists? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "y" accessor-exists? ] unit-test | 
					
						
							|  |  |  | [ t ] [ "z" accessor-exists? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ [ ] ] [ | 
					
						
							| 
									
										
										
										
											2009-03-22 21:16:31 -04:00
										 |  |  |     "IN: classes.tuple.tests GENERIC: forget-accessors-test ( a -- b )" | 
					
						
							| 
									
										
										
										
											2008-04-02 22:27:49 -04:00
										 |  |  |     <string-reader> | 
					
						
							|  |  |  |     "forget-accessors-test" parse-stream | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-06 18:57:24 -05:00
										 |  |  | [ f ] [ "forget-accessors-test" "classes.tuple.tests" lookup-word class? ] unit-test | 
					
						
							| 
									
										
										
										
											2008-04-02 22:27:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ f ] [ "x" accessor-exists? ] unit-test | 
					
						
							|  |  |  | [ f ] [ "y" accessor-exists? ] unit-test | 
					
						
							|  |  |  | [ f ] [ "z" accessor-exists? ] unit-test | 
					
						
							| 
									
										
										
										
											2008-04-03 05:58:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: another-forget-accessors-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ [ ] ] [ | 
					
						
							| 
									
										
										
										
											2009-03-22 21:16:31 -04:00
										 |  |  |     "IN: classes.tuple.tests GENERIC: another-forget-accessors-test ( a -- b )" | 
					
						
							| 
									
										
										
										
											2008-04-03 05:58:37 -04:00
										 |  |  |     <string-reader> | 
					
						
							|  |  |  |     "another-forget-accessors-test" parse-stream | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ \ another-forget-accessors-test class? ] unit-test | 
					
						
							| 
									
										
										
										
											2008-04-07 21:44:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Shadowing test | 
					
						
							|  |  |  | [ f ] [ | 
					
						
							| 
									
										
										
										
											2011-09-07 05:59:35 -04:00
										 |  |  |     f parser-quiet? [ | 
					
						
							| 
									
										
										
										
											2008-04-07 21:44:43 -04:00
										 |  |  |         [ | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  |             "IN: classes.tuple.tests TUPLE: shadow-1 a b ; TUPLE: shadow-2 < shadow-1 a b ;" eval( -- ) | 
					
						
							| 
									
										
										
										
											2008-04-07 21:44:43 -04:00
										 |  |  |         ] with-string-writer empty?
 | 
					
						
							|  |  |  |     ] with-variable
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-04-14 04:54:02 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Missing error check | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ "IN: classes.tuple.tests USE: words TUPLE: wrong-superclass < word ;" eval( -- ) ] must-fail | 
					
						
							| 
									
										
										
										
											2008-05-06 10:01:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-26 21:47:36 -04:00
										 |  |  | ! Insufficient type checking | 
					
						
							|  |  |  | [ \ vocab tuple>array drop ] must-fail | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:58 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Check type declarations | 
					
						
							|  |  |  | TUPLE: declared-types { n fixnum } { m string } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ T{ declared-types f 0 "hi" } ] | 
					
						
							| 
									
										
										
										
											2008-09-03 07:05:50 -04:00
										 |  |  | [ { declared-types 0 "hi" } >tuple ] | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:58 -04:00
										 |  |  | unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 07:05:50 -04:00
										 |  |  | [ { declared-types "hi" 0 } >tuple ] | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:58 -04:00
										 |  |  | [ T{ bad-slot-value f "hi" fixnum } = ] | 
					
						
							|  |  |  | must-fail-with | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-16 01:29:19 -05:00
										 |  |  | ! Check fixnum coercer | 
					
						
							| 
									
										
										
										
											2012-08-03 17:59:59 -04:00
										 |  |  | [ 0.0 "hi" declared-types boa n>> ] [ T{ no-method f 0.0 integer>fixnum-strict } = ] must-fail-with | 
					
						
							| 
									
										
										
										
											2010-01-16 01:29:19 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-03 17:59:59 -04:00
										 |  |  | [ declared-types new 0.0 >>n n>> ] [ T{ no-method f 0.0 integer>fixnum-strict } = ] must-fail-with | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ T{ declared-types f 33333 "asdf" } ] | 
					
						
							|  |  |  | [ 33333 >bignum "asdf" declared-types boa ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 444444444444444444444444444444444444444444444444433333 >bignum "asdf" declared-types boa ] | 
					
						
							|  |  |  | [ | 
					
						
							| 
									
										
										
										
											2012-08-03 18:11:30 -04:00
										 |  |  |     T{ out-of-fixnum-range f 444444444444444444444444444444444444444444444444433333 } =
 | 
					
						
							| 
									
										
										
										
											2012-08-03 17:59:59 -04:00
										 |  |  | ] must-fail-with | 
					
						
							| 
									
										
										
										
											2010-01-16 01:29:19 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Check bignum coercer | 
					
						
							|  |  |  | TUPLE: bignum-coercer { n bignum initial: $[ 0 >bignum ] } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-24 07:47:42 -04:00
										 |  |  | [ 13 bignum ] [ 13.5 bignum-coercer boa n>> dup class-of ] unit-test | 
					
						
							| 
									
										
										
										
											2010-01-16 01:29:19 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-24 07:47:42 -04:00
										 |  |  | [ 13 bignum ] [ bignum-coercer new 13.5 >>n n>> dup class-of ] unit-test | 
					
						
							| 
									
										
										
										
											2010-01-16 01:29:19 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Check float coercer | 
					
						
							|  |  |  | TUPLE: float-coercer { n float } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-24 07:47:42 -04:00
										 |  |  | [ 13.0 float ] [ 13 float-coercer boa n>> dup class-of ] unit-test | 
					
						
							| 
									
										
										
										
											2010-01-16 01:29:19 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-24 07:47:42 -04:00
										 |  |  | [ 13.0 float ] [ float-coercer new 13 >>n n>> dup class-of ] unit-test | 
					
						
							| 
									
										
										
										
											2010-01-16 01:29:19 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Check integer coercer | 
					
						
							|  |  |  | TUPLE: integer-coercer { n integer } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-30 21:41:22 -04:00
										 |  |  | [ 13.5 integer-coercer boa n>> dup class-of ] [ T{ bad-slot-value f 13.5 integer } = ] must-fail-with | 
					
						
							| 
									
										
										
										
											2010-01-16 01:29:19 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-30 21:41:22 -04:00
										 |  |  | [ integer-coercer new 13.5 >>n n>> dup class-of ] [ T{ bad-slot-value f 13.5 integer } = ] must-fail-with | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:58 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : foo ( a b -- c ) declared-types boa ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-20 22:15:19 -04:00
										 |  |  | \ foo def>> must-infer | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:58 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-03 17:59:59 -04:00
										 |  |  | [ 0.0 "hi" foo ] [ T{ no-method f 0.0 integer>fixnum-strict } = ] must-fail-with | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:58 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ "hi" 0.0 declared-types boa ] | 
					
						
							| 
									
										
										
										
											2012-08-03 17:59:59 -04:00
										 |  |  | [ T{ no-method f "hi" integer>fixnum-strict } = ] | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:58 -04:00
										 |  |  | must-fail-with | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 { } declared-types boa ] | 
					
						
							|  |  |  | [ T{ bad-slot-value f { } string } = ] | 
					
						
							|  |  |  | must-fail-with | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ "hi" 0.0 foo ] | 
					
						
							| 
									
										
										
										
											2012-08-03 17:59:59 -04:00
										 |  |  | [ T{ no-method f "hi" integer>fixnum-strict } = ] | 
					
						
							| 
									
										
										
										
											2008-06-30 02:44:58 -04:00
										 |  |  | must-fail-with | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 0 { } foo ] | 
					
						
							|  |  |  | [ T{ bad-slot-value f { } string } = ] | 
					
						
							|  |  |  | must-fail-with | 
					
						
							| 
									
										
										
										
											2008-06-30 04:10:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ T{ declared-types f 0 "" } ] [ declared-types new ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : blah ( -- vec ) vector new ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:09:53 -04:00
										 |  |  | [ vector new ] must-infer | 
					
						
							| 
									
										
										
										
											2008-06-30 04:10:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ V{ } ] [ blah ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-01 17:16:02 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Test reshaping with type declarations and slot attributes | 
					
						
							|  |  |  | TUPLE: reshape-test x ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | T{ reshape-test f "hi" } "tuple" set
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: reshape-test { x read-only } ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-01 17:16:02 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-03 18:49:49 -04:00
										 |  |  | [ f ] [ \ reshape-test \ x<< ?lookup-method ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-01 17:16:02 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ "tuple" get 5 >>x ] must-fail | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ "hi" ] [ "tuple" get x>> ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests USE: math TUPLE: reshape-test { x integer read-only } ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-01 17:16:02 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ "tuple" get x>> ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests USE: math TUPLE: reshape-test { x fixnum initial: 4 read-only } ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-01 17:16:02 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ 0 ] [ "tuple" get x>> ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: boa-coercer-test { x array-capacity } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-24 07:47:42 -04:00
										 |  |  | [ fixnum ] [ 0 >bignum boa-coercer-test boa x>> class-of ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-03 03:47:29 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-05 21:37:28 -04:00
										 |  |  | [ T{ boa-coercer-test f 0 } ] [ T{ boa-coercer-test } ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-03 03:47:29 -04:00
										 |  |  | ! Test error classes | 
					
						
							|  |  |  | ERROR: error-class-test a b c ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ "( a b c -- * )" ] [ \ error-class-test stack-effect effect>string ] unit-test | 
					
						
							|  |  |  | [ f ] [ \ error-class-test "inline" word-prop ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ "IN: classes.tuple.tests ERROR: error-x ; : error-x 3 ;" eval( -- ) ] | 
					
						
							| 
									
										
										
										
											2008-07-03 03:47:29 -04:00
										 |  |  | [ error>> error>> redefine-error? ] must-fail-with | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEFER: error-y | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-03 03:50:45 -04:00
										 |  |  | [ ] [ [ \ error-y dup class? [ forget-class ] [ drop ] if ] with-compilation-unit ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-03 03:47:29 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests GENERIC: error-y ( a -- b )" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-03 03:47:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ f ] [ \ error-y tuple-class? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-25 20:12:32 -04:00
										 |  |  | [ f ] [ \ error-y error-class? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-03 03:47:29 -04:00
										 |  |  | [ t ] [ \ error-y generic? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests ERROR: error-y ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-03 03:47:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ \ error-y tuple-class? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-25 20:12:32 -04:00
										 |  |  | [ t ] [ \ error-y error-class? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-03 03:47:29 -04:00
										 |  |  | [ f ] [ \ error-y generic? ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-10 03:11:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							|  |  |  |     "IN: classes.tuple.tests TUPLE: forget-subclass-test ; TUPLE: forget-subclass-test' < forget-subclass-test ;" | 
					
						
							|  |  |  |     <string-reader> "forget-subclass-test" parse-stream | 
					
						
							|  |  |  |     drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-06 18:57:24 -05:00
										 |  |  | [ ] [ "forget-subclass-test'" "classes.tuple.tests" lookup-word new "bad-object" set ] unit-test | 
					
						
							| 
									
										
										
										
											2008-07-10 03:11:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							|  |  |  |     "IN: classes.tuple.tests TUPLE: forget-subclass-test a ;" | 
					
						
							|  |  |  |     <string-reader> "forget-subclass-test" parse-stream | 
					
						
							|  |  |  |     drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-08-18 17:40:50 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  |     "IN: sequences TUPLE: reversed { seq read-only } ;" eval( -- ) | 
					
						
							| 
									
										
										
										
											2008-08-18 17:40:50 -04:00
										 |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-09-02 03:02:05 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: bogus-hashcode-1 x ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: bogus-hashcode-2 x ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: bogus-hashcode-1 hashcode* 2drop 0 >bignum ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 07:05:50 -04:00
										 |  |  | [ ] [ T{ bogus-hashcode-2 f T{ bogus-hashcode-1 } } hashcode drop ] unit-test | 
					
						
							| 
									
										
										
										
											2009-03-06 21:02:31 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | DEFER: change-slot-test | 
					
						
							|  |  |  | SLOT: kex | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							|  |  |  |     "IN: classes.tuple.tests USING: kernel accessors ; TUPLE: change-slot-test ; SLOT: kex M: change-slot-test kex>> drop 3 ;" | 
					
						
							|  |  |  |     <string-reader> "change-slot-test" parse-stream | 
					
						
							|  |  |  |     drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-03 18:49:49 -04:00
										 |  |  | [ t ] [ \ change-slot-test \ kex>> ?lookup-method >boolean ] unit-test | 
					
						
							| 
									
										
										
										
											2009-03-06 21:02:31 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							|  |  |  |     "IN: classes.tuple.tests USING: kernel accessors ; TUPLE: change-slot-test kex ;" | 
					
						
							|  |  |  |     <string-reader> "change-slot-test" parse-stream | 
					
						
							|  |  |  |     drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-03 18:49:49 -04:00
										 |  |  | [ t ] [ \ change-slot-test \ kex>> ?lookup-method >boolean ] unit-test | 
					
						
							| 
									
										
										
										
											2009-03-06 21:02:31 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							|  |  |  |     "IN: classes.tuple.tests USING: kernel accessors ; TUPLE: change-slot-test ; SLOT: kex M: change-slot-test kex>> drop 3 ;" | 
					
						
							|  |  |  |     <string-reader> "change-slot-test" parse-stream | 
					
						
							|  |  |  |     drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-03 18:49:49 -04:00
										 |  |  | [ t ] [ \ change-slot-test \ kex>> ?lookup-method >boolean ] unit-test | 
					
						
							|  |  |  | [ f ] [ \ change-slot-test \ kex>> ?lookup-method "reading" word-prop ] unit-test | 
					
						
							| 
									
										
										
										
											2009-03-22 21:16:31 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | DEFER: redefine-tuple-twice | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: redefine-tuple-twice ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2009-03-22 21:16:31 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ \ redefine-tuple-twice symbol? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests DEFER: redefine-tuple-twice" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2009-03-22 21:16:31 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ \ redefine-tuple-twice deferred? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 16:49:21 -04:00
										 |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: redefine-tuple-twice ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2009-03-22 21:16:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-17 13:45:57 -04:00
										 |  |  | [ t ] [ \ redefine-tuple-twice symbol? ] unit-test | 
					
						
							| 
									
										
										
										
											2009-09-29 13:52:13 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ERROR: base-error x y ;
 | 
					
						
							|  |  |  | ERROR: derived-error < base-error z ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-18 16:18:42 -04:00
										 |  |  | [ ( x y z -- * ) ] [ \ derived-error stack-effect ] unit-test | 
					
						
							| 
									
										
										
										
											2009-11-16 03:01:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-27 00:42:31 -05:00
										 |  |  | ! Make sure that tuple reshaping updates code heap roots | 
					
						
							|  |  |  | TUPLE: code-heap-ref ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : code-heap-ref' ( -- a ) T{ code-heap-ref } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Push foo's literal to tenured space | 
					
						
							|  |  |  | [ ] [ gc ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Reshape! | 
					
						
							|  |  |  | [ ] [ "IN: classes.tuple.tests USE: math TUPLE: code-heap-ref { x integer initial: 5 } ;" eval( -- ) ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Code heap reference | 
					
						
							|  |  |  | [ t ] [ code-heap-ref' code-heap-ref? ] unit-test | 
					
						
							|  |  |  | [ 5 ] [ code-heap-ref' x>> ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Data heap reference | 
					
						
							|  |  |  | [ t ] [ \ code-heap-ref' def>> first code-heap-ref? ] unit-test | 
					
						
							|  |  |  | [ 5 ] [ \ code-heap-ref' def>> first x>> ] unit-test | 
					
						
							| 
									
										
										
										
											2010-01-31 08:48:39 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! If the metaclass of a superclass changes into something other | 
					
						
							|  |  |  | ! than a tuple class, the tuple needs to have its superclass reset | 
					
						
							|  |  |  | TUPLE: metaclass-change ;
 | 
					
						
							|  |  |  | TUPLE: metaclass-change-subclass < metaclass-change ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ metaclass-change ] [ metaclass-change-subclass superclass ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ "IN: classes.tuple.tests MIXIN: metaclass-change" eval( -- ) ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ metaclass-change-subclass tuple-class? ] unit-test | 
					
						
							|  |  |  | [ tuple ] [ metaclass-change-subclass superclass ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Reshaping bug related to the above | 
					
						
							|  |  |  | TUPLE: a-g ;
 | 
					
						
							|  |  |  | TUPLE: g < a-g ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ g new "g" set ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ "IN: classes.tuple.tests MIXIN: a-g TUPLE: g ;" eval( -- ) ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ g new layout-of "g" get layout-of eq? ] unit-test | 
					
						
							| 
									
										
										
										
											2010-02-11 08:50:59 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Joe Groff discovered this bug | 
					
						
							|  |  |  | DEFER: factor-crashes-anymore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							|  |  |  |     "IN: classes.tuple.tests | 
					
						
							|  |  |  |     TUPLE: unsafe-slot-access ;
 | 
					
						
							|  |  |  |     CONSTANT: unsafe-slot-access' T{ unsafe-slot-access }" eval( -- ) | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ | 
					
						
							|  |  |  |     "IN: classes.tuple.tests | 
					
						
							|  |  |  |     USE: accessors | 
					
						
							|  |  |  |     TUPLE: unsafe-slot-access { x read-only initial: 31337 } ;
 | 
					
						
							|  |  |  |     : factor-crashes-anymore ( -- x ) unsafe-slot-access' x>> ;" eval( -- ) | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 31337 ] [ factor-crashes-anymore ] unit-test | 
					
						
							| 
									
										
										
										
											2010-02-15 05:46:55 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | TUPLE: tuple-predicate-redefine-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: tuple-predicate-redefine-test ;" eval( -- ) ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ \ tuple-predicate-redefine-test? predicate? ] unit-test | 
					
						
							| 
									
										
										
										
											2010-02-17 08:19:57 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Final classes | 
					
						
							|  |  |  | TUPLE: final-superclass ;
 | 
					
						
							|  |  |  | TUPLE: final-subclass < final-superclass ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ final-superclass ] [ final-subclass superclass ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Making the superclass final should change the superclass of the subclass | 
					
						
							|  |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: final-superclass ; final" eval( -- ) ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ tuple ] [ final-subclass superclass ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-17 10:58:30 -05:00
										 |  |  | [ f ] [ \ final-subclass final-class? ] unit-test | 
					
						
							| 
									
										
										
										
											2010-02-17 08:19:57 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Subclassing a final class should fail | 
					
						
							|  |  |  | [ "IN: classes.tuple.tests TUPLE: final-subclass < final-superclass ;" eval( -- ) ] | 
					
						
							|  |  |  | [ error>> bad-superclass? ] must-fail-with | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Making a final class non-final should work | 
					
						
							|  |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: final-superclass ;" eval( -- ) ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: final-subclass < final-superclass ; final" eval( -- ) ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Changing a superclass should not change the final status of a subclass | 
					
						
							|  |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: final-superclass x ;" eval( -- ) ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-17 10:58:30 -05:00
										 |  |  | [ t ] [ \ final-subclass final-class? ] unit-test | 
					
						
							| 
									
										
										
										
											2011-10-04 13:40:48 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Test reset-class on tuples | 
					
						
							|  |  |  | ! Should forget all accessors on rclasstest | 
					
						
							|  |  |  | TUPLE: rclasstest a b ;
 | 
					
						
							|  |  |  | [ ] [ [ \ rclasstest reset-class ] with-compilation-unit ] unit-test | 
					
						
							|  |  |  | [ f ] [ \ rclasstest \ a>> ?lookup-method ] unit-test | 
					
						
							|  |  |  | [ f ] [ \ rclasstest \ a<< ?lookup-method ] unit-test | 
					
						
							|  |  |  | [ f ] [ \ rclasstest \ b>> ?lookup-method ] unit-test | 
					
						
							|  |  |  | [ f ] [ \ rclasstest \ b<< ?lookup-method ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-24 19:59:46 -04:00
										 |  |  | << \ rclasstest forget >> | 
					
						
							| 
									
										
										
										
											2011-11-12 17:48:00 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! initial: should type check | 
					
						
							|  |  |  | TUPLE: initial-class ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEFER: initial-slot | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ ] [ "IN: classes.tuple.tests TUPLE: initial-slot { x initial-class } ;" eval( -- ) ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ initial-slot new x>> initial-class? ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ "IN: classes.tuple.tests TUPLE: initial-slot { x initial-class initial: f } ;" eval( -- ) ] | 
					
						
							| 
									
										
										
										
											2011-11-22 21:49:18 -05:00
										 |  |  | [ error>> T{ bad-initial-value f "x" f initial-class } = ] must-fail-with | 
					
						
							| 
									
										
										
										
											2011-11-12 17:48:00 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ "IN: classes.tuple.tests TUPLE: initial-slot { x initial-class initial: 3 } ;" eval( -- ) ] | 
					
						
							| 
									
										
										
										
											2011-11-22 21:49:18 -05:00
										 |  |  | [ error>> T{ bad-initial-value f "x" 3 initial-class } = ] must-fail-with | 
					
						
							| 
									
										
										
										
											2012-06-01 19:46:45 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ "IN: classes.tuple.tests USE: math TUPLE: foo < foo ;" eval( -- ) ] [ error>> bad-superclass? ] must-fail-with | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ "IN: classes.tuple.tests USE: math TUPLE: foo < + ;" eval( -- ) ] [ error>> bad-superclass? ] must-fail-with | 
					
						
							| 
									
										
										
										
											2012-07-24 17:05:58 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Test no-slot error and get/set-slot-named | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: no-slot-tuple0 a b c ;
 | 
					
						
							|  |  |  | C: <no-slot-tuple0> no-slot-tuple0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 2 3 <no-slot-tuple0> "d" over get-slot-named ] | 
					
						
							|  |  |  | [ | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         [ no-slot? ] | 
					
						
							|  |  |  |         [ tuple>> no-slot-tuple0? ] | 
					
						
							|  |  |  |         [ name>> "d" = ] | 
					
						
							|  |  |  |     } 1&& | 
					
						
							|  |  |  | ] must-fail-with | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { 1 } | 
					
						
							|  |  |  | [ 1 2 3 <no-slot-tuple0> "a" swap get-slot-named ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { 2 } | 
					
						
							|  |  |  | [ 1 2 3 <no-slot-tuple0> "b" swap get-slot-named ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { 3 } | 
					
						
							|  |  |  | [ 1 2 3 <no-slot-tuple0> "c" swap get-slot-named ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { 4 } [ | 
					
						
							|  |  |  |     1 2 3 <no-slot-tuple0> 4 "a" pick set-slot-named | 
					
						
							|  |  |  |     "a" swap get-slot-named | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 1 2 3 <no-slot-tuple0> 4 "d" pick set-slot-named ] | 
					
						
							|  |  |  | [ | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         [ no-slot? ] | 
					
						
							|  |  |  |         [ tuple>> no-slot-tuple0? ] | 
					
						
							|  |  |  |         [ name>> "d" = ] | 
					
						
							|  |  |  |     } 1&& | 
					
						
							|  |  |  | ] must-fail-with |