From a72f5da857179d47d34ec07240392875f7c040c1 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sun, 7 Jun 2009 17:39:21 -0700 Subject: [PATCH] brainfuck: Require loops to be non-empty, add test case. --- extra/brainfuck/brainfuck-tests.factor | 13 ++++++++++++- extra/brainfuck/brainfuck.factor | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/extra/brainfuck/brainfuck-tests.factor b/extra/brainfuck/brainfuck-tests.factor index 4d35089832..2fa6b84a19 100644 --- a/extra/brainfuck/brainfuck-tests.factor +++ b/extra/brainfuck/brainfuck-tests.factor @@ -1,7 +1,8 @@ ! Copyright (C) 2009 John Benediktsson ! See http://factorcode.org/license.txt for BSD license -USING: brainfuck io.streams.string multiline tools.test ; +USING: brainfuck kernel io.streams.string math math.parser math.ranges +multiline quotations sequences tools.test ; [ "+" run-brainfuck ] must-infer @@ -48,4 +49,14 @@ USING: brainfuck io.streams.string multiline tools.test ; [ "ABC" ] [ "ABC\0" [ ",[.,]" get-brainfuck ] with-string-reader ] unit-test +! Squares of numbers from 0 to 100 + +100 [0,b] [ dup * number>string ] map "\n" join "\n" append 1quotation +[ <" ++++[>+++++<-]>[<+++++>-]+<+[ + >[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+ + >>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<] + <<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++> + [-[<->-]+[<<<]]<[>+<-]>]<<-]<<-] "> + get-brainfuck ] unit-test + diff --git a/extra/brainfuck/brainfuck.factor b/extra/brainfuck/brainfuck.factor index ca72e0b782..f29e7dc8ae 100644 --- a/extra/brainfuck/brainfuck.factor +++ b/extra/brainfuck/brainfuck.factor @@ -61,7 +61,7 @@ space = (" "|"\t"|"\r\n"|"\n")+ => [[ [ ] ]] unknown = (.) => [[ "Invalid input" throw ]] ops = inc-ptr|dec-ptr|inc-mem|dec-mem|output|input|debug|space -loop = "[" {loop|ops}* "]" => [[ second compose-all 1quotation [ [ (?) ] ] prepend [ while ] append ]] +loop = "[" {loop|ops}+ "]" => [[ second compose-all 1quotation [ [ (?) ] ] prepend [ while ] append ]] code = (loop|ops|unknown)* => [[ compose-all ]]