1;;;; test brainfuck compilation -*- scheme -*-
2;;;;
3;;;; This library is free software; you can redistribute it and/or
4;;;; modify it under the terms of the GNU Lesser General Public
5;;;; License as published by the Free Software Foundation; either
6;;;; version 3 of the License, or (at your option) any later version.
7;;;;
8;;;; This library is distributed in the hope that it will be useful,
9;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
10;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11;;;; Lesser General Public License for more details.
12;;;;
13;;;; You should have received a copy of the GNU Lesser General Public
14;;;; License along with this library; if not, write to the Free Software
15;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
17(define-module (tests brainfuck)
18  #:use-module (test-suite lib)
19  #:use-module (system base compile))
20
21;; This program taken from Wikipedia's brainfuck introduction page.
22(define prog "
23   +++ +++ +++ +           initialize counter (cell #0) to 10
24   [                       use loop to set the next four cells to 70/100/30/10
25       > +++ +++ +             add  7 to cell #1
26       > +++ +++ +++ +         add 10 to cell #2
27       > +++                   add  3 to cell #3
28       > +                     add  1 to cell #4
29       <<< < -                 decrement counter (cell #0)
30   ]
31   >++ .                   print 'H'
32   >+.                     print 'e'
33   +++ +++ +.              print 'l'
34   .                       print 'l'
35   +++ .                   print 'o'
36   >++ .                   print ' '
37   <<+ +++ +++ +++ +++ ++. print 'W'
38   >.                      print 'o'
39   +++ .                   print 'r'
40   --- --- .               print 'l'
41   --- --- --.             print 'd'
42   >+.                     print '!'")
43
44(pass-if
45 (equal? (with-output-to-string
46          (lambda ()
47            (call-with-input-string
48             prog
49             (lambda (port)
50               (read-and-compile port #:from 'brainfuck #:to 'value)))))
51         "Hello World!"))
52