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