]> gitweb.factorcode.org Git - factor.git/blob - extra/brainfuck/brainfuck-tests.factor
431972416fd79d7ce9987724557816c7736e21de
[factor.git] / extra / brainfuck / brainfuck-tests.factor
1 ! Copyright (C) 2009 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3
4 USING: brainfuck io.streams.string kernel literals math
5 math.parser math.ranges sequences tools.test ;
6
7 IN: brainfuck
8
9
10 [ "+" run-brainfuck ] must-infer
11 [ "+" get-brainfuck ] must-infer
12
13 ! Hello World!
14
15 { "Hello World!\n" } [
16     """
17     ++++++++++[>+++++++>++++++++++>+++>+<<<<-]
18     >++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
19     ------.--------.>+.>.
20     """ get-brainfuck
21 ] unit-test
22
23 ! Addition (single-digit)
24
25 { "8" } [
26     "35" [
27         ",>++++++[<-------->-],[<+>-]<." get-brainfuck
28     ] with-string-reader
29 ] unit-test
30
31 ! Multiplication (single-digit)
32
33 { "8\0" } [
34     "24" [
35         """
36         ,>,>++++++++[<------<------>>-]
37         <<[>[>+>+<<-]>>[<<+>>-]<<<-]
38         >>>++++++[<++++++++>-],<.>.
39         """ get-brainfuck
40     ] with-string-reader
41 ] unit-test
42
43 ! Division (single-digit, integer)
44
45 { "3" } [
46     "62" [
47         """
48         ,>,>++++++[-<--------<-------->>]
49         <<[
50         >[->+>+<<]
51         >[-<<-
52         [>]>>>[<[>>>-<<<[-]]>>]<<]
53         >>>+
54         <<[-<<+>>]
55         <<<]
56         >[-]>>>>[-<<<<<+>>>>>]
57         <<<<++++++[-<++++++++>]<.
58         """ get-brainfuck
59     ] with-string-reader
60 ] unit-test
61
62 ! Uppercase
63
64 { "A" } [ "a\n" [ ",----------[----------------------.,----------]"
65           get-brainfuck ] with-string-reader ] unit-test 
66
67 ! cat
68
69 { "ABC" } [ "ABC\0" [ ",[.,]" get-brainfuck ] with-string-reader ] unit-test
70
71 ! Squares of numbers from 0 to 100
72
73 ${ 100 [0,b] [ dup * number>string ] map "\n" join "\n" append }
74 [
75     """
76     ++++[>+++++<-]>[<+++++>-]+<+[
77     >[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+
78     >>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]
79     <<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>
80     [-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]
81     """ get-brainfuck
82 ] unit-test
83
84 ! fun with numbers: 2 + 2 = 5
85
86 { "5" } [
87     """
88     +++++           +++++
89         +               +
90         +     +         +     +++++
91     +++++    +++    +++++
92     +         +     +         +++++
93     +               +
94     +++++           +++++.
95     """ get-brainfuck
96 ] unit-test