summaryrefslogtreecommitdiff
path: root/src/couch_pse_tests/src/cpse_test_fold_docs.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/couch_pse_tests/src/cpse_test_fold_docs.erl')
-rw-r--r--src/couch_pse_tests/src/cpse_test_fold_docs.erl252
1 files changed, 133 insertions, 119 deletions
diff --git a/src/couch_pse_tests/src/cpse_test_fold_docs.erl b/src/couch_pse_tests/src/cpse_test_fold_docs.erl
index d43930c4a..2d6eb7a9d 100644
--- a/src/couch_pse_tests/src/cpse_test_fold_docs.erl
+++ b/src/couch_pse_tests/src/cpse_test_fold_docs.erl
@@ -14,70 +14,53 @@
-compile(export_all).
-compile(nowarn_export_all).
-
-include_lib("eunit/include/eunit.hrl").
-include_lib("couch/include/couch_db.hrl").
-
-define(NUM_DOCS, 100).
-
setup_each() ->
cpse_util:dbname().
-
teardown_each(DbName) ->
ok = couch_server:delete(DbName, []).
-
cpse_fold_all(DbName) ->
fold_all(DbName, fold_docs, fun docid/1).
-
cpse_fold_all_local(DbName) ->
fold_all(DbName, fold_local_docs, fun local_docid/1).
-
cpse_fold_start_key(DbName) ->
fold_start_key(DbName, fold_docs, fun docid/1).
-
cpse_fold_start_key_local(DbName) ->
fold_start_key(DbName, fold_local_docs, fun local_docid/1).
-
cpse_fold_end_key(DbName) ->
fold_end_key(DbName, fold_docs, fun docid/1).
-
cpse_fold_end_key_local(DbName) ->
fold_end_key(DbName, fold_local_docs, fun local_docid/1).
-
cpse_fold_end_key_gt(DbName) ->
fold_end_key_gt(DbName, fold_docs, fun docid/1).
-
cpse_fold_end_key_gt_local(DbName) ->
fold_end_key_gt(DbName, fold_local_docs, fun local_docid/1).
-
cpse_fold_range(DbName) ->
fold_range(DbName, fold_docs, fun docid/1).
-
cpse_fold_range_local(DbName) ->
fold_range(DbName, fold_local_docs, fun local_docid/1).
-
cpse_fold_stop(DbName) ->
fold_user_fun_stop(DbName, fold_docs, fun docid/1).
-
cpse_fold_stop_local(DbName) ->
fold_user_fun_stop(DbName, fold_local_docs, fun local_docid/1).
-
% This is a loose test but we have to have this until
% I figure out what to do about the total_rows/offset
% meta data included in _all_docs
@@ -89,7 +72,6 @@ cpse_fold_include_reductions(DbName) ->
?assert(is_integer(Count)),
?assert(Count >= 0).
-
fold_all(DbName, FoldFun, DocIdFun) ->
DocIds = [DocIdFun(I) || I <- lists:seq(1, ?NUM_DOCS)],
{ok, Db} = init_db(DbName, DocIdFun),
@@ -103,7 +85,6 @@ fold_all(DbName, FoldFun, DocIdFun) ->
?assertEqual(?NUM_DOCS, length(DocIdAccRev)),
?assertEqual(DocIds, DocIdAccRev).
-
fold_start_key(DbName, FoldFun, DocIdFun) ->
{ok, Db} = init_db(DbName, DocIdFun),
@@ -114,138 +95,153 @@ fold_start_key(DbName, FoldFun, DocIdFun) ->
DocIdsFwd = [DocIdFun(I) || I <- lists:seq(StartKeyNum, ?NUM_DOCS)],
DocIdsRev = [DocIdFun(I) || I <- lists:seq(1, StartKeyNum)],
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
{start_key, <<255>>}
- ])),
+ ])
+ ),
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
{dir, rev},
{start_key, <<"">>}
- ])),
+ ])
+ ),
{ok, AllDocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {start_key, <<"">>}
- ]),
+ {start_key, <<"">>}
+ ]),
?assertEqual(length(AllDocIds), length(AllDocIdAccFwd)),
?assertEqual(AllDocIds, lists:reverse(AllDocIdAccFwd)),
{ok, AllDocIdAccRev} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {dir, rev},
- {start_key, <<255>>}
- ]),
+ {dir, rev},
+ {start_key, <<255>>}
+ ]),
?assertEqual(length(AllDocIds), length(AllDocIdAccRev)),
?assertEqual(AllDocIds, AllDocIdAccRev),
{ok, DocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {start_key, StartKey}
- ]),
+ {start_key, StartKey}
+ ]),
?assertEqual(length(DocIdsFwd), length(DocIdAccFwd)),
?assertEqual(DocIdsFwd, lists:reverse(DocIdAccFwd)),
{ok, DocIdAccRev} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {dir, rev},
- {start_key, StartKey}
- ]),
+ {dir, rev},
+ {start_key, StartKey}
+ ]),
?assertEqual(length(DocIdsRev), length(DocIdAccRev)),
?assertEqual(DocIdsRev, DocIdAccRev).
-
fold_end_key(DbName, FoldFun, DocIdFun) ->
{ok, Db} = init_db(DbName, DocIdFun),
EndKeyNum = ?NUM_DOCS div 4,
EndKey = DocIdFun(EndKeyNum),
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
{end_key, <<"">>}
- ])),
+ ])
+ ),
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
{dir, rev},
{end_key, <<255>>}
- ])),
+ ])
+ ),
AllDocIds = [DocIdFun(I) || I <- lists:seq(1, ?NUM_DOCS)],
{ok, AllDocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {end_key, <<255>>}
- ]),
+ {end_key, <<255>>}
+ ]),
?assertEqual(length(AllDocIds), length(AllDocIdAccFwd)),
?assertEqual(AllDocIds, lists:reverse(AllDocIdAccFwd)),
{ok, AllDocIdAccRev} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {dir, rev},
- {end_key, <<"">>}
- ]),
+ {dir, rev},
+ {end_key, <<"">>}
+ ]),
?assertEqual(length(AllDocIds), length(AllDocIdAccFwd)),
?assertEqual(AllDocIds, AllDocIdAccRev),
DocIdsFwd = [DocIdFun(I) || I <- lists:seq(1, EndKeyNum)],
{ok, DocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {end_key, EndKey}
- ]),
+ {end_key, EndKey}
+ ]),
?assertEqual(length(DocIdsFwd), length(DocIdAccFwd)),
?assertEqual(DocIdsFwd, lists:reverse(DocIdAccFwd)),
DocIdsRev = [DocIdFun(I) || I <- lists:seq(EndKeyNum, ?NUM_DOCS)],
{ok, DocIdAccRev} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {dir, rev},
- {end_key, EndKey}
- ]),
+ {dir, rev},
+ {end_key, EndKey}
+ ]),
?assertEqual(length(DocIdsRev), length(DocIdAccRev)),
?assertEqual(DocIdsRev, DocIdAccRev).
-
fold_end_key_gt(DbName, FoldFun, DocIdFun) ->
{ok, Db} = init_db(DbName, DocIdFun),
EndKeyNum = ?NUM_DOCS div 4,
EndKey = DocIdFun(EndKeyNum),
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
{end_key_gt, <<"">>}
- ])),
+ ])
+ ),
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
{dir, rev},
{end_key_gt, <<255>>}
- ])),
+ ])
+ ),
AllDocIds = [DocIdFun(I) || I <- lists:seq(1, ?NUM_DOCS)],
{ok, AllDocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {end_key_gt, <<255>>}
- ]),
+ {end_key_gt, <<255>>}
+ ]),
?assertEqual(length(AllDocIds), length(AllDocIdAccFwd)),
?assertEqual(AllDocIds, lists:reverse(AllDocIdAccFwd)),
{ok, AllDocIdAccRev} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {dir, rev},
- {end_key_gt, <<"">>}
- ]),
+ {dir, rev},
+ {end_key_gt, <<"">>}
+ ]),
?assertEqual(length(AllDocIds), length(AllDocIdAccFwd)),
?assertEqual(AllDocIds, AllDocIdAccRev),
DocIdsFwd = [DocIdFun(I) || I <- lists:seq(1, EndKeyNum - 1)],
{ok, DocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {end_key_gt, EndKey}
- ]),
+ {end_key_gt, EndKey}
+ ]),
?assertEqual(length(DocIdsFwd), length(DocIdAccFwd)),
?assertEqual(DocIdsFwd, lists:reverse(DocIdAccFwd)),
DocIdsRev = [DocIdFun(I) || I <- lists:seq(EndKeyNum + 1, ?NUM_DOCS)],
{ok, DocIdAccRev} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {dir, rev},
- {end_key_gt, EndKey}
- ]),
+ {dir, rev},
+ {end_key_gt, EndKey}
+ ]),
?assertEqual(length(DocIdsRev), length(DocIdAccRev)),
?assertEqual(DocIdsRev, DocIdAccRev).
-
fold_range(DbName, FoldFun, DocIdFun) ->
{ok, Db} = init_db(DbName, DocIdFun),
@@ -255,133 +251,153 @@ fold_range(DbName, FoldFun, DocIdFun) ->
StartKey = DocIdFun(StartKeyNum),
EndKey = DocIdFun(EndKeyNum),
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
{start_key, <<"">>},
{end_key, <<"">>}
- ])),
+ ])
+ ),
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
{dir, rev},
{start_key, <<"">>},
{end_key, <<255>>}
- ])),
+ ])
+ ),
AllDocIds = [DocIdFun(I) || I <- lists:seq(1, ?NUM_DOCS)],
{ok, AllDocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {start_key, <<"">>},
- {end_key, <<255>>}
- ]),
+ {start_key, <<"">>},
+ {end_key, <<255>>}
+ ]),
?assertEqual(length(AllDocIds), length(AllDocIdAccFwd)),
?assertEqual(AllDocIds, lists:reverse(AllDocIdAccFwd)),
{ok, AllDocIdAccRev} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {dir, rev},
- {start_key, <<255>>},
- {end_key_gt, <<"">>}
- ]),
+ {dir, rev},
+ {start_key, <<255>>},
+ {end_key_gt, <<"">>}
+ ]),
?assertEqual(length(AllDocIds), length(AllDocIdAccFwd)),
?assertEqual(AllDocIds, AllDocIdAccRev),
DocIdsFwd = [DocIdFun(I) || I <- lists:seq(StartKeyNum, EndKeyNum)],
{ok, DocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {start_key, StartKey},
- {end_key, EndKey}
- ]),
+ {start_key, StartKey},
+ {end_key, EndKey}
+ ]),
?assertEqual(length(DocIdsFwd), length(DocIdAccFwd)),
?assertEqual(DocIdsFwd, lists:reverse(DocIdAccFwd)),
DocIdsRev = [DocIdFun(I) || I <- lists:seq(StartKeyNum, EndKeyNum)],
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
{dir, rev},
{start_key, StartKey},
{end_key, EndKey}
- ])),
+ ])
+ ),
{ok, DocIdAccRev} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], [
- {dir, rev},
- {start_key, EndKey},
- {end_key, StartKey}
- ]),
+ {dir, rev},
+ {start_key, EndKey},
+ {end_key, StartKey}
+ ]),
?assertEqual(length(DocIdsRev), length(DocIdAccRev)),
?assertEqual(DocIdsRev, DocIdAccRev).
-
fold_user_fun_stop(DbName, FoldFun, DocIdFun) ->
{ok, Db} = init_db(DbName, DocIdFun),
StartKeyNum = ?NUM_DOCS div 4,
StartKey = DocIdFun(StartKeyNum),
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_stop/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_stop/2, [], [
{start_key, <<255>>}
- ])),
+ ])
+ ),
- ?assertEqual({ok, []}, couch_db_engine:FoldFun(Db, fun fold_stop/2, [], [
+ ?assertEqual(
+ {ok, []},
+ couch_db_engine:FoldFun(Db, fun fold_stop/2, [], [
{dir, rev},
{start_key, <<"">>}
- ])),
+ ])
+ ),
SuffixDocIds = [DocIdFun(I) || I <- lists:seq(?NUM_DOCS - 3, ?NUM_DOCS)],
{ok, SuffixDocIdAcc} = couch_db_engine:FoldFun(Db, fun fold_stop/2, [], [
- {start_key, DocIdFun(?NUM_DOCS - 3)}
- ]),
+ {start_key, DocIdFun(?NUM_DOCS - 3)}
+ ]),
?assertEqual(length(SuffixDocIds), length(SuffixDocIdAcc)),
?assertEqual(SuffixDocIds, lists:reverse(SuffixDocIdAcc)),
PrefixDocIds = [DocIdFun(I) || I <- lists:seq(1, 3)],
{ok, PrefixDocIdAcc} = couch_db_engine:FoldFun(Db, fun fold_stop/2, [], [
- {dir, rev},
- {start_key, DocIdFun(3)}
- ]),
+ {dir, rev},
+ {start_key, DocIdFun(3)}
+ ]),
?assertEqual(3, length(PrefixDocIdAcc)),
?assertEqual(PrefixDocIds, PrefixDocIdAcc),
- FiveDocIdsFwd = [DocIdFun(I)
- || I <- lists:seq(StartKeyNum, StartKeyNum + 5)],
+ FiveDocIdsFwd = [
+ DocIdFun(I)
+ || I <- lists:seq(StartKeyNum, StartKeyNum + 5)
+ ],
{ok, FiveDocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_stop/2, [], [
- {start_key, StartKey}
- ]),
+ {start_key, StartKey}
+ ]),
?assertEqual(length(FiveDocIdsFwd), length(FiveDocIdAccFwd)),
?assertEqual(FiveDocIdsFwd, lists:reverse(FiveDocIdAccFwd)),
- FiveDocIdsRev = [DocIdFun(I)
- || I <- lists:seq(StartKeyNum - 5, StartKeyNum)],
+ FiveDocIdsRev = [
+ DocIdFun(I)
+ || I <- lists:seq(StartKeyNum - 5, StartKeyNum)
+ ],
{ok, FiveDocIdAccRev} = couch_db_engine:FoldFun(Db, fun fold_stop/2, [], [
- {dir, rev},
- {start_key, StartKey}
- ]),
+ {dir, rev},
+ {start_key, StartKey}
+ ]),
?assertEqual(length(FiveDocIdsRev), length(FiveDocIdAccRev)),
?assertEqual(FiveDocIdsRev, FiveDocIdAccRev).
-
init_db(DbName, DocIdFun) ->
{ok, Db1} = cpse_util:create_db(DbName),
- Actions = lists:map(fun(Id) ->
- {create, {DocIdFun(Id), {[{<<"int">>, Id}]}}}
- end, lists:seq(1, ?NUM_DOCS)),
+ Actions = lists:map(
+ fun(Id) ->
+ {create, {DocIdFun(Id), {[{<<"int">>, Id}]}}}
+ end,
+ lists:seq(1, ?NUM_DOCS)
+ ),
cpse_util:apply_actions(Db1, [{batch, Actions}]).
-
fold_fun(Doc, Acc) ->
- Id = case Doc of
- #doc{id = Id0} -> Id0;
- #full_doc_info{id = Id0} -> Id0
- end,
+ Id =
+ case Doc of
+ #doc{id = Id0} -> Id0;
+ #full_doc_info{id = Id0} -> Id0
+ end,
{ok, [Id | Acc]}.
-
fold_stop(Doc, Acc) ->
- Id = case Doc of
- #doc{id = Id0} -> Id0;
- #full_doc_info{id = Id0} -> Id0
- end,
+ Id =
+ case Doc of
+ #doc{id = Id0} -> Id0;
+ #full_doc_info{id = Id0} -> Id0
+ end,
case length(Acc) of
N when N =< 4 ->
{ok, [Id | Acc]};
@@ -389,12 +405,10 @@ fold_stop(Doc, Acc) ->
{stop, [Id | Acc]}
end.
-
docid(I) ->
Str = io_lib:format("~4..0b", [I]),
iolist_to_binary(Str).
-
local_docid(I) ->
Str = io_lib:format("_local/~4..0b", [I]),
iolist_to_binary(Str).