diff --git a/extra/24-game/24-game-tests.factor b/extra/24-game/24-game-tests.factor index daa93cb225..d68b389698 100644 --- a/extra/24-game/24-game-tests.factor +++ b/extra/24-game/24-game-tests.factor @@ -1,6 +1,12 @@ - -USING: 24-game sequences tools.test ; - +USING: 24-game io.streams.string kernel math sequences tools.test ; IN: 24-game.tests { t } [ make-24 first4 makes-24? ] unit-test + +{ f } [ (operators) "hello" find-operator ] unit-test + +{ + } [ "+" [ (operators) get-operator ] with-string-reader ] unit-test + +{ swap } [ + "bad\ninput\nswap" [ (operators) get-operator ] with-string-reader +] unit-test diff --git a/extra/24-game/24-game.factor b/extra/24-game/24-game.factor index 1e204630a4..fa13438081 100644 --- a/extra/24-game/24-game.factor +++ b/extra/24-game/24-game.factor @@ -1,6 +1,6 @@ ! Copyright © 2008 Reginald Keith Ford II ! 24, the Factor game! -USING: accessors backtrack combinators continuations formatting io +USING: accessors backtrack combinators continuations formatting fry io kernel math prettyprint quotations random sequences shuffle ; IN: 24-game @@ -38,13 +38,14 @@ CONSTANT: (operators) { + - * / rot swap q } : operators ( array -- operators ) length 3 < [ \ rot (operators) remove ] [ (operators) ] if ; -: find-operator ( string operators -- word/f ) - [ name>> = ] with find nip ; +: find-operator ( operators string -- word/f ) + '[ name>> _ = ] find nip ; : get-operator ( operators -- word ) dup "Operators: %u\n" printf flush - readln over find-operator dup - [ "Operator not found..." print get-operator ] unless nip ; + dup readln find-operator [ ] [ + "Operator not found..." print get-operator + ] ?if ; : try-operator ( array -- array ) [ pprint nl ]