Merge branch 'master' of https://github.com/noprompt/frak
[frak.git] / test / frak_test.clj
CommitLineData
fef2a3db
JH
1(ns frak-test
2 (:use clojure.test
3 frak))
4
5(def trie-put #'frak/trie-put)
6(def build-trie #'frak/build-trie)
7
8(deftest trie-test
9 (is (= (-> (trie-put "a")
10 (trie-put "b"))
11 ^{:terminals '(\b \a)
12 :visitors '(\b \a)}
13 {\a nil
14 \b nil}))
15
16 (is (= (-> (trie-put "aaa")
17 (trie-put "ab"))
18 ^{:visitors '(\a\a)}
19 {\a
20 ^{:terminals '(\b)
21 :visitors '(\a \b)}
22 {\a
23 ^{:terminals '(\a)
24 :visitors '(\a)}
25 {\a nil}
26 \b nil}}))
27
28 (is (= (-> (trie-put "ab")
29 (trie-put "aaa"))
30 ^{:visitors '(\a\a)}
31 {\a
32 ^{:terminals '(\b)
33 :visitors '(\a \b)}
34 {\a
35 ^{:terminals '(\a)
36 :visitors '(\a)}
37 {\a nil}
38 \b nil}})))
39
40(deftest pattern-test
41 (let [strs1 ["foo" "bar" "baz"]
42 strs2 ["baz" "bar" "foo"]
43 pat1 (pattern strs1)
44 pat2 (pattern strs2)]
45 (is (every? #(re-matches pat1 %) strs1))
46
47 (is (every? #(re-matches pat2 %) strs1))
48
49 (is (every? #(re-matches pat1 %) strs2))
50
51 (is (every? #(re-matches pat2 %) strs2))
52
53 (is (not (or (re-matches pat1 "f")
54 (re-matches pat1 "b")
55 (re-matches pat1 "ba")
11fd73a8
JH
56 (re-matches pat1 "fo")))))
57
58 (let [pat1 (pattern ["foo" "foot"])
59 pat2 (pattern ["foo" "" "foot"])]
60 (is (= (str pat1)
14a44feb
JH
61 (str pat2))))
62
63 (is (= "ba[trz]"
64 (str (pattern ["bat" "bar" "baz"]))))
65
66 (is (= "b(?:i[pt]|at)"
67 (str (pattern ["bat" "bip" "bit"])))))