summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-05-10 06:59:53 -0700
committerKaz Kylheku <kaz@kylheku.com>2021-05-10 06:59:53 -0700
commit326d267efb40ae2f8c750fede3343f68e732e1d3 (patch)
tree27e606c073c069ee9bd816988068d9b445b1d54c
parent7e98059bb196082fc649daee698ddddda025499a (diff)
downloadtxr-326d267efb40ae2f8c750fede3343f68e732e1d3.tar.gz
txr-326d267efb40ae2f8c750fede3343f68e732e1d3.tar.bz2
txr-326d267efb40ae2f8c750fede3343f68e732e1d3.zip
diff/isec: reset hash/tree iter instead making new.
* lib.c (seq_iter_rewind): Use hash_reset and tree_reset to rewind the existing iterator rather than allocating a new one. * tests/010/hash.tl: New file, covering uni, diff and isec for hash tables. * tests/010/tree.tl: New tests.
-rw-r--r--lib.c4
-rw-r--r--tests/010/hash.tl6
-rw-r--r--tests/010/tree.tl5
3 files changed, 13 insertions, 2 deletions
diff --git a/lib.c b/lib.c
index 6145c4f3..5419494e 100644
--- a/lib.c
+++ b/lib.c
@@ -740,10 +740,10 @@ static void seq_iter_rewind(seq_iter_t *it, val self)
it->ui.index = 0;
break;
case SEQ_HASHLIKE:
- it->ui.iter = hash_begin(it->inf.obj);
+ it->ui.iter = hash_reset(it->ui.iter, it->inf.obj);
break;
case SEQ_TREELIKE:
- it->ui.iter = tree_begin(it->inf.obj);
+ it->ui.iter = tree_reset(it->ui.iter, it->inf.obj);
break;
default:
break;
diff --git a/tests/010/hash.tl b/tests/010/hash.tl
new file mode 100644
index 00000000..b8c386e2
--- /dev/null
+++ b/tests/010/hash.tl
@@ -0,0 +1,6 @@
+(load "../common")
+
+(mtest
+ (uni #H(() ("a") ("b")) #H(() ("b") ("c"))) (("a") ("b") ("c"))
+ (diff #H(() ("a") ("b")) #H(() ("b") ("c"))) (("a"))
+ (isec #H(() ("a") ("b")) #H(() ("b") ("c"))) (("b")))
diff --git a/tests/010/tree.tl b/tests/010/tree.tl
index 86a21167..c2fe5382 100644
--- a/tests/010/tree.tl
+++ b/tests/010/tree.tl
@@ -127,3 +127,8 @@
tr #T((identity < =) 1 2 3)
(copy-search-tree tr) #T((identity < =) 1 2 3)
(make-similar-tree tr) #T((identity < =))))
+
+(mtest
+ (uni #T(() "a" "b") #T(() "b" "c")) ("a" "b" "c")
+ (diff #T(() "a" "b") #T(() "b" "c")) ("a")
+ (isec #T(() "a" "b") #T(() "b" "c")) ("b"))