28 lines
1.2 KiB
Clojure
28 lines
1.2 KiB
Clojure
(ns jasentaa.parser.combinators-test
|
|
(:require
|
|
#?(:clj [clojure.test :refer :all]
|
|
:cljs [cljs.test :refer-macros [deftest is testing]])
|
|
[jasentaa.monad :as m]
|
|
[jasentaa.test-helpers :as th]
|
|
[jasentaa.parser.basic :as pb]
|
|
[jasentaa.parser.combinators :as pc]))
|
|
|
|
(deftest check-and-then
|
|
(let [parser (pc/and-then (pb/match "a") (pb/match "b"))]
|
|
(is (= [[[\a \b] "el"]] (th/test-harness parser "abel")))
|
|
(is (= (m/failure) (th/test-harness parser "apple")))
|
|
(is (= (m/failure) (th/test-harness parser "")))))
|
|
|
|
(deftest check-or-else
|
|
(let [parser (pc/or-else (pb/match "a") (pb/match "b"))]
|
|
(is (= [[\a "pple"]] (th/test-harness parser "apple")))
|
|
(is (= [[\b "anana"]] (th/test-harness parser "banana")))
|
|
(is (= (m/failure) (th/test-harness parser "orange")))))
|
|
|
|
(deftest check-many
|
|
(let [parser (pc/many (pb/match "a"))]
|
|
(is (= [[\a] ""] (first (th/test-harness parser "a"))))
|
|
(is (= [[\a \a \a] "bbb"] (first (th/test-harness parser "aaabbb"))))
|
|
(is (= [[] nil] (first (th/test-harness parser ""))))
|
|
(is (= [[\a] "pple"] (first (th/test-harness parser "apple"))))
|
|
(is (= [[] "orange"] (first (th/test-harness parser "orange"))))))
|