1 ! Copyright (C) 2009 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
4 USING: brainfuck kernel io.streams.string math math.parser math.ranges
5 quotations sequences tools.test ;
9 [ "+" run-brainfuck ] must-infer
10 [ "+" get-brainfuck ] must-infer
14 [ "Hello World!\n" ] [ """++++++++++[>+++++++>++++++++++>+++>+<<<<-]
15 >++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
16 ------.--------.>+.>.""" get-brainfuck ] unit-test
18 ! Addition (single-digit)
20 [ "8" ] [ "35" [ ",>++++++[<-------->-],[<+>-]<."
21 get-brainfuck ] with-string-reader ] unit-test
23 ! Multiplication (single-digit)
25 [ "8\0" ] [ "24" [ """,>,>++++++++[<------<------>>-]
26 <<[>[>+>+<<-]>>[<<+>>-]<<<-]
27 >>>++++++[<++++++++>-],<.>."""
28 get-brainfuck ] with-string-reader ] unit-test
30 ! Division (single-digit, integer)
32 [ "3" ] [ "62" [ """,>,>++++++[-<--------<-------->>]
36 [>]>>>[<[>>>-<<<[-]]>>]<<]
40 >[-]>>>>[-<<<<<+>>>>>]
41 <<<<++++++[-<++++++++>]<."""
42 get-brainfuck ] with-string-reader ] unit-test
46 [ "A" ] [ "a\n" [ ",----------[----------------------.,----------]"
47 get-brainfuck ] with-string-reader ] unit-test
51 [ "ABC" ] [ "ABC\0" [ ",[.,]" get-brainfuck ] with-string-reader ] unit-test
53 ! Squares of numbers from 0 to 100
55 100 [0,b] [ dup * number>string ] map "\n" join "\n" append 1quotation
56 [ """++++[>+++++<-]>[<+++++>-]+<+[
57 >[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+
58 >>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]
59 <<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>
60 [-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]"""
61 get-brainfuck ] unit-test