IN: temporary USING: arrays generic kernel math models namespaces sequences tools.test ; TUPLE: model-tester hit? ; : model-tester construct-empty ; M: model-tester model-changed t swap set-model-tester-hit? ; [ T{ model-tester f t } ] [ T{ model-tester f f } 3 2dup add-connection 5 swap set-model ] unit-test 3 "model-a" set 4 "model-b" set "model-a" get "model-b" get 2array "model-c" set "model-c" get activate-model [ { 3 4 } ] [ "model-c" get model-value ] unit-test "model-c" get deactivate-model T{ model-tester f f } "tester" set [ T{ model-tester f t } { 6 4 } ] [ "tester" get "model-c" get add-connection 6 "model-a" get set-model "tester" get "model-c" get model-value ] unit-test f "history" set "history" get add-history [ t ] [ "history" get history-back empty? ] unit-test [ t ] [ "history" get history-forward empty? ] unit-test "history" get add-history 3 "history" get set-model [ t ] [ "history" get history-back empty? ] unit-test [ t ] [ "history" get history-forward empty? ] unit-test "history" get add-history 4 "history" get set-model [ f ] [ "history" get history-back empty? ] unit-test [ t ] [ "history" get history-forward empty? ] unit-test "history" get go-back [ 3 ] [ "history" get model-value ] unit-test [ t ] [ "history" get history-back empty? ] unit-test [ f ] [ "history" get history-forward empty? ] unit-test "history" get go-forward [ 4 ] [ "history" get model-value ] unit-test [ f ] [ "history" get history-back empty? ] unit-test [ t ] [ "history" get history-forward empty? ] unit-test ! Test multiple filters 3 "x" set "x" get [ 2 * ] dup "z" set [ 1+ ] "y" set [ ] [ "y" get activate-model ] unit-test [ t ] [ "z" get "x" get model-connections memq? ] unit-test [ 7 ] [ "y" get model-value ] unit-test [ ] [ 4 "x" get set-model ] unit-test [ 9 ] [ "y" get model-value ] unit-test [ ] [ "y" get deactivate-model ] unit-test [ f ] [ "z" get "x" get model-connections memq? ] unit-test 3 "x" set "x" get [ sq ] "y" set 4 "x" get set-model "y" get activate-model [ 16 ] [ "y" get model-value ] unit-test "y" get deactivate-model ! Test compose [ ] [ 1 "a" set 2 "b" set "a" get "b" get 2array "c" set ] unit-test [ ] [ "c" get activate-model ] unit-test [ { 1 2 } ] [ "c" get model-value ] unit-test [ ] [ 3 "b" get set-model ] unit-test [ { 1 3 } ] [ "c" get model-value ] unit-test [ ] [ { 4 5 } "c" get set-model ] unit-test [ { 4 5 } ] [ "c" get model-value ] unit-test [ ] [ "c" get deactivate-model ] unit-test