diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2020-09-16 14:23:51 -0500 |
---|---|---|
committer | Paul J. Davis <paul.joseph.davis@gmail.com> | 2020-09-16 16:37:57 -0500 |
commit | e0d31f0a32654b10fb74bdfd8bc61edc5923aa50 (patch) | |
tree | 2996ecccbbb8e138e9e5fd4f4533c8c25ac7d9dd | |
parent | ad93d1378048ab1049dcd5d6066e947afb614e67 (diff) | |
download | couchdb-e0d31f0a32654b10fb74bdfd8bc61edc5923aa50.tar.gz |
Fix bug in ebtree:umerge_members/4fix-ebtree-umerge-members
Caught during Elixir tests. I've added a unit test to `ebtree.erl` to
ensure we don't regress in the future.
-rw-r--r-- | src/ebtree/src/ebtree.erl | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/ebtree/src/ebtree.erl b/src/ebtree/src/ebtree.erl index 3cfb82030..97a820304 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. |