robotwar/test/hs_robotwar/core_test.clj
2013-07-11 15:05:38 -04:00

60 lines
1.6 KiB
Clojure

(ns hs-robotwar.core-test
(:require [clojure.test :refer :all]
[hs-robotwar.core :refer :all]))
(deftest digit?-negative
(testing "not a digit"
(is (not (digit? \f)))))
(deftest digit?-char-positive
(testing "digit char"
(is (digit? "6"))))
(deftest digit?-str-positive
(testing "digit str"
(is (digit? \6))))
(def line1 "IF DAMAGE # D GOTO MOVE")
(def line2 "AIM-17 TO AIM")
(def line3 "IF X<-5 GOTO SCAN")
(def tokens1 [{:token "IF", :pos 0}
{:token "DAMAGE", :pos 3}
{:token "#", :pos 10}
{:token "D", :pos 12}
{:token "GOTO", :pos 14}
{:token "MOVE", :pos 19}])
(def tokens2 [{:token "AIM", :pos 0}
{:token "-", :pos 3}
{:token "17", :pos 4}
{:token "TO", :pos 7}
{:token "AIM", :pos 10}])
(def tokens3 [{:token "IF", :pos 0}
{:token "X", :pos 3}
{:token "<", :pos 4}
{:token "-5", :pos 5}
{:token "GOTO", :pos 8}
{:token "SCAN", :pos 13}])
(deftest lex-simple
(testing "lexing of simple line"
(is (= (lex-line line1)
tokens1))))
(deftest lex-scrunched-chars
(testing "lexing with no whitespace between operators and operands"
(is (= (lex-line line2)
tokens2))))
(deftest lex-negative-numbers
(testing "lexing with unary negative operator"
(is (= (lex-line line3)
tokens3))))
(deftest lex-multi-line
(testing "lexing multiple lines"
(is (= (lex (clojure.string/join "\n" [line1 line2 line3]))
(concat tokens1 tokens2 tokens3)))))