You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.9 KiB
Clojure
49 lines
1.9 KiB
Clojure
(ns trie-test
|
|
(:require [clojure.test :refer [deftest is testing use-fixtures] :as t]
|
|
[com.owoga.trie :as trie]
|
|
[clojure.zip :as zip]
|
|
[clojure.main :as main]))
|
|
|
|
(deftest trie-tests
|
|
(let [empty-trie (trie/make-trie)
|
|
initialized-trie (trie/make-trie '(1 2) 12)]
|
|
(testing "assoc"
|
|
(is (= (assoc empty-trie '(1 2) 12)
|
|
initialized-trie)))
|
|
(testing "dissoc"
|
|
(let [expected (-> (trie/make-trie)
|
|
(assoc '(1) 1))
|
|
trie (-> (trie/make-trie)
|
|
(assoc '(1) 1)
|
|
(assoc '(1 3) 13))]
|
|
(is (= expected (dissoc trie '(1 3))))))
|
|
(testing "ILookup"
|
|
(is (= 12 (get initialized-trie '(1 2))))
|
|
(is (= :not-found (get initialized-trie '(1 3) :not-found)))
|
|
(is (nil? (get initialized-trie '(1 3)))))
|
|
(testing "IPersistentCollection"
|
|
(is (empty? empty-trie))
|
|
(is (= (conj empty-trie ['(1 2) 12])
|
|
initialized-trie)))
|
|
(testing "Counted"
|
|
(is (zero? (count empty-trie)))
|
|
(is (= 2 (count initialized-trie))))
|
|
(testing "Seqable"
|
|
(is (= '([[1 2] 12] [[1] nil])
|
|
(seq initialized-trie)))
|
|
(is (= '([[1 2] 12] [[1] 1])
|
|
(seq (assoc initialized-trie '(1) 1)))))))
|
|
|
|
(deftest children-at-depth-tests
|
|
(let [initialized-trie (->> (trie/make-trie '(1) 1 '(1 2 3) 123 '(1 2 1) 121 '(1 2 2) 122 '(1 3 1) 131
|
|
'(1 2 3 4) 1234
|
|
'(1 2 3 4 5 6) 123456))]
|
|
(testing "children at depth"
|
|
(is (= '([(1) 1])
|
|
(trie/children-at-depth initialized-trie 0)))
|
|
(is (= '([(1 2 3 4 5 6) 123456]
|
|
[(1 2 3 4) 1234])
|
|
(trie/children-at-depth initialized-trie 4 6)))
|
|
(is (= nil (trie/children-at-depth initialized-trie -1)))
|
|
(is (= nil (trie/children-at-depth initialized-trie 5 4))))))
|