Fix bug where empty strings could break tries
authorJoel Holdbrooks <cjholdbrooks@gmail.com>
Mon, 29 Jul 2013 21:38:56 +0000 (14:38 -0700)
committerJoel Holdbrooks <cjholdbrooks@gmail.com>
Mon, 29 Jul 2013 21:38:56 +0000 (14:38 -0700)
src/frak.clj
test/frak_test.clj

index 035a09ce8c0c99c4a5caa6595c32b0f01a586e84..d26bc0248d9976feea77071a2935ba46677a027e 100644 (file)
       (visit trie))))
 
 (defn- trie-put
-  ([s]
-     {:pre [(string? s)]}
-     (trie-put {} s))
+  ([s] (trie-put {} s))
   ([trie s]
      {:pre [(map? trie) (string? s)]}
      (if-not (seq s)
-       {}
+       trie
        (loop [t trie, ps (prefixes s)]
          (if-let [cs (and (next ps) (first ps))]
            (recur (grow t cs false) (next ps))
index 4f7b36543f901b03e8907b9ec1dcecd977dbfce1..c3bae69b785e4bb2e6af61b1cbc1fb35ea92a539 100644 (file)
@@ -53,4 +53,9 @@
     (is (not (or (re-matches pat1 "f")
                  (re-matches pat1 "b")
                  (re-matches pat1 "ba")
-                 (re-matches pat1 "fo"))))))
+                 (re-matches pat1 "fo")))))
+
+  (let [pat1 (pattern ["foo" "foot"])
+        pat2 (pattern ["foo" "" "foot"])]
+    (is (= (str pat1)
+           (str pat2)))))