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