USING: boxes kernel namespaces refs tools.test ; IN: refs.tests ! assoc-refs [ 3 ] [ H{ { "a" 3 } } "a" get-ref ] unit-test [ 4 ] [ 4 H{ { "a" 3 } } clone "a" [ set-ref ] keep get-ref ] unit-test [ "a" ] [ H{ { "a" 3 } } "a" get-ref ] unit-test [ H{ { "b" 3 } } ] [ "b" H{ { "a" 3 } } clone [ "a" set-ref ] keep ] unit-test SYMBOLS: lion giraffe elephant rabbit ; ! obj-refs [ rabbit ] [ rabbit get-ref ] unit-test [ rabbit ] [ f rabbit set-ref* get-ref ] unit-test [ rabbit ] [ rabbit take ] unit-test [ rabbit f ] [ rabbit [ take ] keep get-ref ] unit-test [ lion ] [ rabbit dup [ drop lion ] change-ref get-ref ] unit-test ! var-refs [ giraffe ] [ [ giraffe rabbit set rabbit get-ref ] with-scope ] unit-test [ rabbit ] [ [ lion rabbit set [ rabbit rabbit set rabbit get-ref ] with-scope ] with-scope ] unit-test [ rabbit ] [ rabbit [ lion rabbit set [ rabbit rabbit set get-ref ] with-scope ] with-scope ] unit-test [ elephant ] [ rabbit [ elephant rabbit set [ rabbit rabbit set ] with-scope get-ref ] with-scope ] unit-test [ rabbit ] [ rabbit [ elephant set-ref* [ rabbit set-ref* get-ref ] with-scope ] with-scope ] unit-test [ elephant ] [ rabbit [ elephant set-ref* [ rabbit set-ref* ] with-scope get-ref ] with-scope ] unit-test ! Top Hats [ lion ] [ lion rabbit set-global rabbit get-ref ] unit-test [ giraffe ] [ rabbit giraffe set-ref* get-ref ] unit-test ! Tuple refs TUPLE: foo bar ; C: foo : test-tuple ( -- tuple ) rabbit ; : test-slot-ref ( -- slot-ref ) test-tuple 2 ; ! hack! [ rabbit ] [ test-slot-ref get-ref ] unit-test [ lion ] [ test-slot-ref lion set-ref* get-ref ] unit-test ! Boxes as refs [ rabbit ] [ rabbit set-ref* get-ref ] unit-test [ rabbit set-ref* lion set-ref* ] must-fail [ get-ref ] must-fail