1 USING: alien arrays generic assocs hashtables io
2 io.streams.string kernel math namespaces parser prettyprint
3 sequences strings tools.test vectors words quotations classes
4 classes.private classes.union classes.mixin classes.predicate
5 classes.algebra definitions source-files compiler.units
6 kernel.private sorting vocabs memory eval accessors sets ;
9 [ t ] [ 3 object instance? ] unit-test
10 [ t ] [ 3 fixnum instance? ] unit-test
11 [ f ] [ 3 float instance? ] unit-test
12 [ t ] [ 3 number instance? ] unit-test
13 [ f ] [ 3 null instance? ] unit-test
16 GENERIC: method-forget-test ( obj -- obj )
17 TUPLE: method-forget-class ;
18 M: method-forget-class method-forget-test ;
20 [ f ] [ \ method-forget-test "methods" word-prop assoc-empty? ] unit-test
21 [ ] [ [ \ method-forget-class forget ] with-compilation-unit ] unit-test
22 [ t ] [ \ method-forget-test "methods" word-prop assoc-empty? ] unit-test
25 all-words [ class? ] filter
26 implementors-map get keys
28 [ diff ] [ swap diff ] 2bi
31 ! Long-standing problem
34 ! So the user has some code...
40 TUPLE: z < x ;""" <string-reader>
41 "class-intersect-no-method-a" parse-stream drop
44 ! Note that q inlines M: x g ;
49 : q ( -- b ) z new g ;""" <string-reader>
50 "class-intersect-no-method-b" parse-stream drop
53 ! Now, the user removes the z class and adds a method,
60 M: j g ;""" <string-reader>
61 "class-intersect-no-method-a" parse-stream drop
64 ! And changes the definition of q
69 : q ( -- b ) j new g ;""" <string-reader>
70 "class-intersect-no-method-b" parse-stream drop
73 ! Similar problem, but with anonymous classes
79 TUPLE: z ;""" <string-reader>
80 "class-intersect-no-method-c" parse-stream drop
87 : q ( a -- b ) dup z? [ g ] unless ;""" <string-reader>
88 "class-intersect-no-method-d" parse-stream drop
91 ! Now, the user removes the z class and adds a method,
98 M: j g ;""" <string-reader>
99 "class-intersect-no-method-c" parse-stream drop
102 ! Forget the above crap
104 { "classes.test.a" "classes.test.b" "classes.test.c" "classes.test.d" }
105 [ forget-vocab ] each
106 ] with-compilation-unit
108 TUPLE: forgotten-predicate-test ;
110 [ ] [ [ \ forgotten-predicate-test forget ] with-compilation-unit ] unit-test
111 [ f ] [ \ forgotten-predicate-test? predicate? ] unit-test
113 GENERIC: generic-predicate? ( a -- b )
115 [ ] [ "IN: classes.tests TUPLE: generic-predicate ;" eval( -- ) ] unit-test
117 [ f ] [ \ generic-predicate? generic? ] unit-test