| 
									
										
										
										
											2016-03-30 21:43:14 -04:00
										 |  |  | USING: assocs classes classes.private compiler.units definitions | 
					
						
							|  |  |  | eval generic io.streams.string kernel math multiline namespaces | 
					
						
							|  |  |  | parser sequences sets sorting tools.test vocabs words ;
 | 
					
						
							| 
									
										
										
										
											2008-03-01 17:00:45 -05:00
										 |  |  | IN: classes.tests | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { t } [ 3 object instance? ] unit-test | 
					
						
							|  |  |  | { t } [ 3 fixnum instance? ] unit-test | 
					
						
							|  |  |  | { f } [ 3 float instance? ] unit-test | 
					
						
							|  |  |  | { t } [ 3 number instance? ] unit-test | 
					
						
							|  |  |  | { f } [ 3 null instance? ] unit-test | 
					
						
							| 
									
										
										
										
											2008-05-23 18:33:57 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Regression | 
					
						
							| 
									
										
										
										
											2008-06-08 16:32:55 -04:00
										 |  |  | GENERIC: method-forget-test ( obj -- obj )
 | 
					
						
							| 
									
										
										
										
											2008-05-23 18:33:57 -04:00
										 |  |  | TUPLE: method-forget-class ;
 | 
					
						
							|  |  |  | M: method-forget-class method-forget-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { f } [ \ method-forget-test "methods" word-prop assoc-empty? ] unit-test | 
					
						
							|  |  |  | { } [ [ \ method-forget-class forget ] with-compilation-unit ] unit-test | 
					
						
							|  |  |  | { t } [ \ method-forget-test "methods" word-prop assoc-empty? ] unit-test | 
					
						
							| 
									
										
										
										
											2008-06-12 06:49:46 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { { } { } } [ | 
					
						
							| 
									
										
										
										
											2008-06-12 06:49:46 -04:00
										 |  |  |     all-words [ class? ] filter
 | 
					
						
							|  |  |  |     implementors-map get keys
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:23:54 -04:00
										 |  |  |     [ natural-sort ] bi@
 | 
					
						
							|  |  |  |     [ diff ] [ swap diff ] 2bi
 | 
					
						
							| 
									
										
										
										
											2008-06-12 06:49:46 -04:00
										 |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-11-04 03:17:37 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-04 04:38:44 -05:00
										 |  |  | ! Long-standing problem | 
					
						
							|  |  |  | USE: multiline | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! So the user has some code... | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { } [ | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     "IN: classes.test.a | 
					
						
							| 
									
										
										
										
											2008-11-04 04:38:44 -05:00
										 |  |  |     GENERIC: g ( a -- b )
 | 
					
						
							|  |  |  |     TUPLE: x ;
 | 
					
						
							|  |  |  |     M: x g ;
 | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     TUPLE: z < x ;" <string-reader> | 
					
						
							| 
									
										
										
										
											2008-11-04 04:38:44 -05:00
										 |  |  |     "class-intersect-no-method-a" parse-stream drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Note that q inlines M: x g ; | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { } [ | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     "IN: classes.test.b | 
					
						
							| 
									
										
										
										
											2008-11-04 04:38:44 -05:00
										 |  |  |     USE: classes.test.a | 
					
						
							|  |  |  |     USE: kernel | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     : q ( -- b ) z new g ;" <string-reader> | 
					
						
							| 
									
										
										
										
											2008-11-04 04:38:44 -05:00
										 |  |  |     "class-intersect-no-method-b" parse-stream drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Now, the user removes the z class and adds a method, | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { } [ | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     "IN: classes.test.a | 
					
						
							| 
									
										
										
										
											2008-11-04 04:38:44 -05:00
										 |  |  |     GENERIC: g ( a -- b )
 | 
					
						
							|  |  |  |     TUPLE: x ;
 | 
					
						
							|  |  |  |     M: x g ;
 | 
					
						
							|  |  |  |     TUPLE: j ;
 | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     M: j g ;" <string-reader> | 
					
						
							| 
									
										
										
										
											2008-11-04 04:38:44 -05:00
										 |  |  |     "class-intersect-no-method-a" parse-stream drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! And changes the definition of q | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { } [ | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     "IN: classes.test.b | 
					
						
							| 
									
										
										
										
											2008-11-04 04:38:44 -05:00
										 |  |  |     USE: classes.test.a | 
					
						
							|  |  |  |     USE: kernel | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     : q ( -- b ) j new g ;" <string-reader> | 
					
						
							| 
									
										
										
										
											2008-11-04 04:38:44 -05:00
										 |  |  |     "class-intersect-no-method-b" parse-stream drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2008-11-05 19:32:02 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Similar problem, but with anonymous classes | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { } [ | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     "IN: classes.test.c | 
					
						
							| 
									
										
										
										
											2008-11-05 19:32:02 -05:00
										 |  |  |     USE: kernel | 
					
						
							|  |  |  |     GENERIC: g ( a -- b )
 | 
					
						
							|  |  |  |     M: object g ;
 | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     TUPLE: z ;" <string-reader> | 
					
						
							| 
									
										
										
										
											2008-11-05 19:32:02 -05:00
										 |  |  |     "class-intersect-no-method-c" parse-stream drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { } [ | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     "IN: classes.test.d | 
					
						
							| 
									
										
										
										
											2008-11-05 19:32:02 -05:00
										 |  |  |     USE: classes.test.c | 
					
						
							|  |  |  |     USE: kernel | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     : q ( a -- b ) dup z? [ g ] unless ;" <string-reader> | 
					
						
							| 
									
										
										
										
											2008-11-05 19:32:02 -05:00
										 |  |  |     "class-intersect-no-method-d" parse-stream drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Now, the user removes the z class and adds a method, | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { } [ | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     "IN: classes.test.c | 
					
						
							| 
									
										
										
										
											2008-11-05 19:32:02 -05:00
										 |  |  |     USE: kernel | 
					
						
							|  |  |  |     GENERIC: g ( a -- b )
 | 
					
						
							|  |  |  |     M: object g ;
 | 
					
						
							|  |  |  |     TUPLE: j ;
 | 
					
						
							| 
									
										
										
										
											2015-07-26 01:59:56 -04:00
										 |  |  |     M: j g ;" <string-reader> | 
					
						
							| 
									
										
										
										
											2008-11-05 19:32:02 -05:00
										 |  |  |     "class-intersect-no-method-c" parse-stream drop
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-18 18:20:17 -04:00
										 |  |  | ! Forget the above crap | 
					
						
							|  |  |  | [ | 
					
						
							|  |  |  |     { "classes.test.a" "classes.test.b" "classes.test.c" "classes.test.d" } | 
					
						
							|  |  |  |     [ forget-vocab ] each
 | 
					
						
							|  |  |  | ] with-compilation-unit | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-05 19:32:02 -05:00
										 |  |  | TUPLE: forgotten-predicate-test ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { } [ [ \ forgotten-predicate-test forget ] with-compilation-unit ] unit-test | 
					
						
							|  |  |  | { f } [ \ forgotten-predicate-test? predicate? ] unit-test | 
					
						
							| 
									
										
										
										
											2010-02-15 00:34:45 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | GENERIC: generic-predicate? ( a -- b )
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { } [ "IN: classes.tests TUPLE: generic-predicate ;" eval( -- ) ] unit-test | 
					
						
							| 
									
										
										
										
											2010-02-15 00:34:45 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 20:28:17 -04:00
										 |  |  | { f } [ \ generic-predicate? generic? ] unit-test | 
					
						
							| 
									
										
										
										
											2016-12-05 11:01:39 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! all-contained-classes | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     { maybe{ integer } integer fixnum bignum } | 
					
						
							|  |  |  | } [ | 
					
						
							|  |  |  |     { maybe{ integer } } all-contained-classes | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! contained-classes | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     { fixnum bignum } | 
					
						
							|  |  |  |     { integer } | 
					
						
							|  |  |  | } [ | 
					
						
							|  |  |  |     integer contained-classes | 
					
						
							|  |  |  |     maybe{ integer } contained-classes | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! make-class-props | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     H{ | 
					
						
							|  |  |  |         { "superclass" f } | 
					
						
							|  |  |  |         { "members" { fixnum } } | 
					
						
							|  |  |  |         { "metaclass" f } | 
					
						
							|  |  |  |         { "participants" { } } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } [ | 
					
						
							|  |  |  |     f { fixnum } { } f  make-class-props | 
					
						
							|  |  |  | ] unit-test |