2 USING: functors tools.test math words kernel multiline parser
3 io.streams.string generic ;
7 FUNCTOR: define-box ( T -- )
9 B DEFINES-CLASS ${T}-box
14 TUPLE: B { value T } ;
24 { 1 0 } [ define-box ] must-infer-as
26 [ T{ float-box f 5.0 } ] [ 5.0 <float-box> ] unit-test
29 [ execute ] [ execute ] bi ; inline
32 FUNCTOR: wrapper-test ( W -- )
38 : WW ( a -- b ) \ W twice ; inline
46 [ 16 ] [ 2 sqsq ] unit-test
50 FUNCTOR: wrapper-test-2 ( W -- )
56 : W ( a b -- c ) \ + execute ;
64 [ 4 ] [ 1 3 blah ] unit-test
68 FUNCTOR: symbol-test ( W -- )
82 [ blorgh ] [ blorgh ] unit-test
86 FUNCTOR: generic-test ( W -- )
102 [ 2 ] [ 1 snurv ] unit-test
103 [ 3.0 ] [ 3.0 snurv ] unit-test
105 ! Does replacing an ordinary word with a functor-generated one work?
107 <" IN: functors.tests
111 GENERIC: some-generic ( a -- b )
112 M: some-tuple some-generic ;
114 "> <string-reader> "functors-test" parse-stream
117 : test-redefinition ( -- )
118 [ t ] [ "some-word" "functors.tests" lookup >boolean ] unit-test
119 [ t ] [ "some-tuple" "functors.tests" lookup >boolean ] unit-test
120 [ t ] [ "some-generic" "functors.tests" lookup >boolean ] unit-test
122 "some-tuple" "functors.tests" lookup
123 "some-generic" "functors.tests" lookup method >boolean
125 [ t ] [ "some-symbol" "functors.tests" lookup >boolean ] unit-test
129 FUNCTOR: redefine-test ( W -- )
131 W-word DEFINES ${W}-word
132 W-tuple DEFINES-CLASS ${W}-tuple
133 W-generic DEFINES ${W}-generic
134 W-symbol DEFINES ${W}-symbol
140 GENERIC: W-generic ( a -- b )
141 M: W-tuple W-generic ;
147 <" IN: functors.tests
148 << "some" redefine-test >>
149 "> <string-reader> "functors-test" parse-stream