factor/basis/functors/functors-tests.factor

154 lines
2.3 KiB
Factor
Raw Normal View History

2008-11-14 21:18:16 -05:00
IN: functors.tests
USING: functors tools.test math words kernel multiline parser
io.streams.string generic ;
2008-11-14 21:18:16 -05:00
<<
FUNCTOR: define-box ( T -- )
B DEFINES-CLASS ${T}-box
2008-11-14 21:18:16 -05:00
<B> DEFINES <${B}>
WHERE
TUPLE: B { value T } ;
C: <B> B ( T -- B )
2008-11-14 21:18:16 -05:00
;FUNCTOR
\ float define-box
>>
{ 1 0 } [ define-box ] must-infer-as
[ T{ float-box f 5.0 } ] [ 5.0 <float-box> ] unit-test
: twice ( word -- )
[ execute ] [ execute ] bi ; inline
<<
FUNCTOR: wrapper-test ( W -- )
WW DEFINES ${W}${W}
WHERE
: WW ( a -- b ) \ W twice ; inline
2008-11-14 21:18:16 -05:00
;FUNCTOR
\ sq wrapper-test
>>
[ 16 ] [ 2 sqsq ] unit-test
2009-01-28 18:07:31 -05:00
<<
FUNCTOR: wrapper-test-2 ( W -- )
W DEFINES ${W}
WHERE
: W ( a b -- c ) \ + execute ;
;FUNCTOR
"blah" wrapper-test-2
>>
[ 4 ] [ 1 3 blah ] unit-test
2009-04-27 15:02:14 -04:00
<<
FUNCTOR: symbol-test ( W -- )
W DEFINES ${W}
WHERE
SYMBOL: W
;FUNCTOR
"blorgh" symbol-test
>>
[ blorgh ] [ blorgh ] unit-test
2009-05-01 17:16:40 -04:00
<<
FUNCTOR: generic-test ( W -- )
W DEFINES ${W}
WHERE
GENERIC: W ( a -- b )
M: object W ;
M: integer W 1 + ;
;FUNCTOR
"snurv" generic-test
>>
[ 2 ] [ 1 snurv ] unit-test
[ 3.0 ] [ 3.0 snurv ] unit-test
! Does replacing an ordinary word with a functor-generated one work?
[ [ ] ] [
<" IN: functors.tests
TUPLE: some-tuple ;
: some-word ( -- ) ;
2009-05-01 17:16:40 -04:00
GENERIC: some-generic ( a -- b )
M: some-tuple some-generic ;
2009-04-27 15:02:14 -04:00
SYMBOL: some-symbol
"> <string-reader> "functors-test" parse-stream
] unit-test
: test-redefinition ( -- )
[ t ] [ "some-word" "functors.tests" lookup >boolean ] unit-test
[ t ] [ "some-tuple" "functors.tests" lookup >boolean ] unit-test
2009-05-01 17:16:40 -04:00
[ t ] [ "some-generic" "functors.tests" lookup >boolean ] unit-test
[ t ] [
"some-tuple" "functors.tests" lookup
"some-generic" "functors.tests" lookup method >boolean
] unit-test ;
2009-04-27 15:02:14 -04:00
[ t ] [ "some-symbol" "functors.tests" lookup >boolean ] unit-test
test-redefinition
FUNCTOR: redefine-test ( W -- )
W-word DEFINES ${W}-word
W-tuple DEFINES-CLASS ${W}-tuple
2009-05-01 17:16:40 -04:00
W-generic DEFINES ${W}-generic
2009-04-27 15:02:14 -04:00
W-symbol DEFINES ${W}-symbol
WHERE
TUPLE: W-tuple ;
: W-word ( -- ) ;
2009-05-01 17:16:40 -04:00
GENERIC: W-generic ( a -- b )
M: W-tuple W-generic ;
2009-04-27 15:02:14 -04:00
SYMBOL: W-symbol
;FUNCTOR
[ [ ] ] [
<" IN: functors.tests
<< "some" redefine-test >>
"> <string-reader> "functors-test" parse-stream
] unit-test
2009-04-27 15:02:14 -04:00
test-redefinition