WIP
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
(ns brainfuck-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[clojure.string :as s]
|
||||
[brainfuck :refer [execute-string]]))
|
||||
|
||||
(defn- ord->str [n] (str (char n)))
|
||||
|
||||
(deftest basic-program-tests
|
||||
(testing "output until inclusive 0"
|
||||
(let [in (-> (range 1 256) vec (conj 0)
|
||||
(->> (map char) (apply str)))]
|
||||
(= in (execute-string "+[,.]" in))))
|
||||
|
||||
(testing "output n exclamation marks"
|
||||
(let [pluses (s/join (repeat (int \!) \+))
|
||||
src (str ">" pluses "<,[>.<-]")
|
||||
! #(s/join (repeat % \!))]
|
||||
(are [n] (= (execute-string src (ord->str n))
|
||||
(! n))
|
||||
1 2 3 4 5 6 7 8 9 10)))
|
||||
|
||||
(testing "memory 0 initialized"
|
||||
(is (= (execute-string ".>." "")
|
||||
"\0\0")))
|
||||
|
||||
(testing "memory operations"
|
||||
(is (= (execute-string ".>.+.<." "")
|
||||
"\0\0\1\0")))
|
||||
|
||||
(testing "input output"
|
||||
(are [n] (= (execute-string ".,." (ord->str n))
|
||||
(str "\0" (char n)))
|
||||
11 12 13 14 15 16 17 18 19 20))
|
||||
|
||||
(testing "loops"
|
||||
(let [z #(s/join (repeat % "\0"))]
|
||||
(are [n] (= (execute-string "[>.<],[>.<-]" (ord->str n))
|
||||
(z n))
|
||||
21 22 23 24 25 26 27 28 29 30))))
|
||||
|
||||
(deftest error-handling-test
|
||||
(testing "insufficient input"
|
||||
(is (nil? (execute-string "," "")))))
|
||||
Reference in New Issue
Block a user