You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by jc...@apache.org on 2026/07/28 13:17:10 UTC
(couchdb) 08/16: chore: Add some benchmarks for Mango selector matching
This is an automated email from the ASF dual-hosted git repository.
jcoglan pushed a commit to branch mango-match-failures
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 862f27dc9e838641fd80a9f5f18470f272ee2697
Author: James Coglan <ja...@neighbourhood.ie>
AuthorDate: Mon Jan 26 11:12:37 2026 +0000
chore: Add some benchmarks for Mango selector matching
---
src/mango/src/mango_selector.erl | 48 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/src/mango/src/mango_selector.erl b/src/mango/src/mango_selector.erl
index 3c58188cf..f47ee4acf 100644
--- a/src/mango/src/mango_selector.erl
+++ b/src/mango/src/mango_selector.erl
@@ -2668,4 +2668,52 @@ format_path_test() ->
?assertEqual([<<"a">>, <<"b">>, <<"c">>], format_path([<<"b.c">>, <<"a">>])),
?assertEqual([<<"a">>, 42, <<"b">>, <<"c">>], format_path([<<"b.c">>, 42, <<"a">>])).
+% The following benchmarks can be run by adding the following dependencies to
+% rebar.config.script:
+%
+% {argparse, {url, "https://github.com/max-au/argparse"}, "1.2.4"},
+% {erlperf, {url, "https://github.com/max-au/erlperf"}, "2.3.0"}
+%
+% and then uncommenting the following functions and running the unit tests for
+% this module via this command:
+%
+% make eunit apps=mango suites=mango_selector
+%
+% bench(Name, Selector, Doc) ->
+% Sel1 = normalize(Selector),
+% [Normal, Verbose] = erlperf:compare(
+% [
+% #{runner => fun() -> match_int(Sel1, Doc, V) end}
+% || V <- [false, true]
+% ],
+% #{}
+% ),
+% ?debugFmt("~nbench[~s: normal ] = ~p~n", [Name, Normal]),
+% ?debugFmt("~nbench[~s: verbose] = ~p~n", [Name, Verbose]).
+%
+% bench_and_test() ->
+% Sel =
+% {[
+% {<<"x">>,
+% {[
+% {<<"$and">>, [{[{<<"$gt">>, V}]} || V <- [100, 200, 300, 400, 500]]}
+% ]}}
+% ]},
+% Doc = {[{<<"x">>, 25}]},
+% bench("$and", Sel, Doc).
+%
+% bench_allmatch_test() ->
+% Sel =
+% {[
+% {<<"x">>,
+% {[
+% {<<"$allMatch">>, {[{<<"$gt">>, 10}]}}
+% ]}}
+% ]},
+% Doc =
+% {[
+% {<<"x">>, [0, 23, 45, 67, 89, 12, 34, 56, 78]}
+% ]},
+% bench("$allMatch", Sel, Doc).
+
-endif.