(import /src/calc) (import /src/parser) (import /src/operations :prefix "o/") (import /src/adverbs :prefix "a/") (use testament) (deftest brackets (let [[parsed] (parser/parse "[]")] (is (== [0] (parsed :shape))) (is (== [] (parsed :data))))) (deftest num (let [[int] (parser/parse "5") [float] (parser/parse "5.0") [neg] (parser/parse "-5") [underscored] (parser/parse "5_000")] (is (= 5 (int :value))) (is (calc/Int? int)) (is (= 5 (float :value))) (is (calc/Float? float)) (is (= -5 (neg :value))) (is (calc/Int? neg)) (is (= 5000 (underscored :value))) (is (calc/Int? underscored)))) (deftest word (let [[add dist] (parser/parse "+ /")] (is (= add o/add)) (is (calc/Operation? add)) (is (= dist a/distribute-dyad)) (is (calc/Adverb? dist)))) (deftest pushable (let [s (:new calc/Stack) parsed (parser/parse "4 5 +")] (calc/push-all s parsed) (is (= 1 (length (s :data)))) (def res (first (s :data))) (is (= 9 (res :value))) (is (calc/Float? res)))) (deftest push-adverb (let [s (:new calc/Stack) parsed (parser/parse "0 [1 2 3] [+] /")] (calc/push-all s parsed) (is (= 1 (length (s :data)))) (def res (first (s :data))) (is (= 6 (res :value))) (is (calc/Float? res)))) (run-tests!)