From 5d2ef0c1daf3d44db1acea0d201712a7b45875ea Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 27 Jun 2021 12:24:24 -0700 Subject: regex-from-trie: correctly handle empty trie. * filter.c (regex_from_trie): An empty trie matches nothing, so we must return the t regex syntax (match nothing), not nil (match empty string). A hash-based trie matches nothing if it is empty; but if it has user data, then it matches the empty string. * tests/015/trie.tl: Test cases added. --- filter.c | 4 ++-- tests/015/trie.tl | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/filter.c b/filter.c index a8f0b787..348a697c 100644 --- a/filter.c +++ b/filter.c @@ -121,7 +121,7 @@ static val regex_from_trie(val trie) { switch (type(trie)) { case NIL: - return nil; + return t; case CONS: { val a = car(trie); @@ -145,7 +145,7 @@ static val regex_from_trie(val trie) case COBJ: if (trie->co.cls == hash_s) { if (zerop(hash_count(trie))) { - return nil; + return tnil(!get_hash_userdata(trie)); } else { val out = nil; val cell; diff --git a/tests/015/trie.tl b/tests/015/trie.tl index de88a797..c145c060 100644 --- a/tests/015/trie.tl +++ b/tests/015/trie.tl @@ -52,3 +52,7 @@ (mvtest (build (each ((d dat)) (add [rx1 d]))) dat (build (each ((n ndt)) (add [rx1 n]))) (repeat '(nil) (len dat))) + +(mtest + (regex-from-trie (make-trie)) t + (regex-from-trie (trie-compress (make-trie))) t) -- cgit v1.2.3