USING: delegate kernel arrays tools.test words math definitions compiler.units parser generic prettyprint io.streams.string accessors ; IN: delegate.tests TUPLE: hello this that ; C: hello TUPLE: goodbye these those ; C: goodbye GENERIC: foo ( x -- y ) GENERIC: bar ( a -- b ) GENERIC# whoa 1 ( s t -- w ) PROTOCOL: baz foo { bar 0 } { whoa 1 } ; : hello-test ( hello/goodbye -- array ) [ hello? ] [ hello-this ] [ hello-that ] tri 3array ; CONSULT: baz goodbye these>> ; M: hello foo this>> ; M: hello bar hello-test ; M: hello whoa >r this>> r> + ; GENERIC: bing ( c -- d ) PROTOCOL: bee bing ; CONSULT: hello goodbye those>> ; M: hello bing hello-test ; [ 1 { t 1 0 } ] [ 1 0 [ foo ] [ bar ] bi ] unit-test [ { t 1 0 } ] [ 1 0 bing ] unit-test [ 1 ] [ 1 0 f foo ] unit-test [ { t 1 0 } ] [ 1 0 f bar ] unit-test [ 3 ] [ 1 0 2 whoa ] unit-test [ 3 ] [ 1 0 f 2 whoa ] unit-test [ ] [ 3 [ "USE: delegate IN: delegate.tests CONSULT: baz goodbye goodbye-these ;" eval ] times ] unit-test [ H{ { goodbye [ goodbye-these ] } } ] [ baz protocol-consult ] unit-test [ H{ } ] [ bee protocol-consult ] unit-test [ "USING: delegate ;\nIN: delegate.tests\nPROTOCOL: baz foo bar { whoa 1 } ;\n" ] [ [ baz see ] with-string-writer ] unit-test GENERIC: one M: integer one ; GENERIC: two M: integer two ; GENERIC: three M: integer three ; GENERIC: four M: integer four ; PROTOCOL: alpha one two ; PROTOCOL: beta three ; TUPLE: hey value ; C: hey CONSULT: alpha hey value>> 1+ ; CONSULT: beta hey value>> 1- ; [ 2 ] [ 1 one ] unit-test [ 2 ] [ 1 two ] unit-test [ 0 ] [ 1 three ] unit-test [ { hey } ] [ alpha protocol-users ] unit-test [ { hey } ] [ beta protocol-users ] unit-test [ ] [ "USE: delegate IN: delegate.tests PROTOCOL: alpha one ;" eval ] unit-test [ f ] [ hey \ two method ] unit-test [ f ] [ hey \ four method ] unit-test [ ] [ "USE: delegate IN: delegate.tests PROTOCOL: beta two three four ;" eval ] unit-test [ { hey } ] [ alpha protocol-users ] unit-test [ { hey } ] [ beta protocol-users ] unit-test [ 2 ] [ 1 one ] unit-test [ 0 ] [ 1 two ] unit-test [ 0 ] [ 1 three ] unit-test [ 0 ] [ 1 four ] unit-test [ ] [ "USING: math accessors delegate ; IN: delegate.tests CONSULT: beta hey value>> 2 - ;" eval ] unit-test [ 2 ] [ 1 one ] unit-test [ -1 ] [ 1 two ] unit-test [ -1 ] [ 1 three ] unit-test [ -1 ] [ 1 four ] unit-test [ ] [ "IN: delegate.tests FORGET: alpha" eval ] unit-test [ f ] [ hey \ one method ] unit-test