From 1df34203e62859fe67d0b5abd79ca7e0ef7ffc1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Thu, 16 Jun 2016 23:41:17 +0200 Subject: [PATCH] 24-game: fixing invalid operator input handling in get-operator --- extra/24-game/24-game-tests.factor | 12 +++++++++--- extra/24-game/24-game.factor | 11 ++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) 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 ]