You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2020/09/17 18:54:06 UTC

[couchdb] branch main updated: Fix bug in ebtree:umerge_members/4

This is an automated email from the ASF dual-hosted git repository.

davisp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git


The following commit(s) were added to refs/heads/main by this push:
     new 39aa742  Fix bug in ebtree:umerge_members/4
39aa742 is described below

commit 39aa7423b2e79d9859f8626b1678636dba738c9f
Author: Paul J. Davis <pa...@gmail.com>
AuthorDate: Wed Sep 16 14:23:51 2020 -0500

    Fix bug in ebtree:umerge_members/4
    
    Caught during Elixir tests. I've added a unit test to `ebtree.erl` to
    ensure we don't regress in the future.
---
 src/ebtree/src/ebtree.erl | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/ebtree/src/ebtree.erl b/src/ebtree/src/ebtree.erl
index 3cfb820..97a8203 100644
--- a/src/ebtree/src/ebtree.erl
+++ b/src/ebtree/src/ebtree.erl
@@ -1187,7 +1187,7 @@ umerge_members_int(_Collate, List1, [], Acc) ->
 umerge_members_int(Collate, [H1 | T1], [H2 | T2], Acc) ->
     case Collate(H1, H2) of
         lt -> umerge_members_int(Collate, T1, [H2 | T2], [H1 | Acc]);
-        eq -> umerge_members_int(Collate, T1, [H2 | T2], [H1 | Acc]);
+        eq -> umerge_members_int(Collate, T1, T2, [H1 | Acc]);
         gt -> umerge_members_int(Collate, [H1 | T1], T2, [H2 | Acc])
     end.
 
@@ -1800,4 +1800,20 @@ cache_test_() ->
         ?assertEqual(3, length(NodeCache))
     end]}.
 
+
+umerge_members_test() ->
+    Tree = #tree{collate_fun = fun collate_raw/2},
+    NewList = fun() ->
+        Raw = [{rand:uniform(100), rand:uniform()} || _ <- lists:seq(1, 100)],
+        lists:ukeysort(1, Raw)
+    end,
+    lists:foreach(fun(_) ->
+        A = NewList(),
+        B = NewList(),
+        Stdlib = lists:ukeymerge(1, A, B),
+        Custom = umerge_members(Tree, 0, A, B),
+        ?assertEqual(Stdlib, Custom)
+    end, lists:seq(1, 100)).
+
+
 -endif.