You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by kx...@apache.org on 2014/06/03 17:54:48 UTC
[10/36] couchdb commit: updated refs/heads/1963-eunit to 85f2750
Port 06[0-5]-kt-*.t etap test suites to eunit
All merged into single suite since they're test the same module.
Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/5f6a0b66
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/5f6a0b66
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/5f6a0b66
Branch: refs/heads/1963-eunit
Commit: 5f6a0b6699437512ccd980edf91235856c7bb989
Parents: 11e4507
Author: Alexander Shorin <kx...@apache.org>
Authored: Sun May 18 14:53:03 2014 +0400
Committer: Alexander Shorin <kx...@apache.org>
Committed: Tue Jun 3 15:14:25 2014 +0400
----------------------------------------------------------------------
test/couchdb/Makefile.am | 1 +
test/couchdb/couch_key_tree_tests.erl | 381 +++++++++++++++++++++++++++++
test/etap/060-kt-merging.t | 176 -------------
test/etap/061-kt-missing-leaves.t | 65 -----
test/etap/062-kt-remove-leaves.t | 69 ------
test/etap/063-kt-get-leaves.t | 98 --------
test/etap/064-kt-counting.t | 46 ----
test/etap/065-kt-stemming.t | 42 ----
test/etap/Makefile.am | 6 -
9 files changed, 382 insertions(+), 502 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb/blob/5f6a0b66/test/couchdb/Makefile.am
----------------------------------------------------------------------
diff --git a/test/couchdb/Makefile.am b/test/couchdb/Makefile.am
index 948ba7c..396a36b 100644
--- a/test/couchdb/Makefile.am
+++ b/test/couchdb/Makefile.am
@@ -25,6 +25,7 @@ eunit_files = \
couch_uuids_tests.erl \
couch_work_queue_tests.erl \
couch_stream_tests.erl \
+ couch_key_tree_tests.erl \
couchdb_tests.hrl
EXTRA_DIST = \
http://git-wip-us.apache.org/repos/asf/couchdb/blob/5f6a0b66/test/couchdb/couch_key_tree_tests.erl
----------------------------------------------------------------------
diff --git a/test/couchdb/couch_key_tree_tests.erl b/test/couchdb/couch_key_tree_tests.erl
new file mode 100644
index 0000000..7429f53
--- /dev/null
+++ b/test/couchdb/couch_key_tree_tests.erl
@@ -0,0 +1,381 @@
+% Licensed under the Apache License, Version 2.0 (the "License"); you may not
+% use this file except in compliance with the License. You may obtain a copy of
+% the License at
+%
+% http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+% License for the specific language governing permissions and limitations under
+% the License.
+
+-module(couch_key_tree_tests).
+
+-include_lib("couchdb_tests.hrl").
+
+-define(DEPTH, 10).
+
+
+key_tree_merge_test_()->
+ {
+ "Key tree merge",
+ [
+ should_merge_with_empty_tree(),
+ should_merge_reflexive(),
+ should_merge_prefix_of_a_tree_with_tree(),
+ should_produce_conflict_on_merge_with_unrelated_branch(),
+ should_merge_reflexive_for_child_nodes(),
+ should_merge_tree_to_itself(),
+ should_merge_tree_of_odd_length(),
+ should_merge_tree_with_stem(),
+ should_merge_with_stem_at_deeper_level(),
+ should_merge_with_stem_at_deeper_level_with_deeper_paths(),
+ should_merge_single_tree_with_deeper_stem(),
+ should_merge_tree_with_large_stem(),
+ should_merge_stems(),
+ should_create_conflicts_on_merge(),
+ should_create_no_conflicts_on_merge(),
+ should_ignore_conflicting_branch()
+ ]
+ }.
+
+key_tree_missing_leaves_test_()->
+ {
+ "Missing tree leaves",
+ [
+ should_not_find_missing_leaves(),
+ should_find_missing_leaves()
+ ]
+ }.
+
+key_tree_remove_leaves_test_()->
+ {
+ "Remove tree leaves",
+ [
+ should_have_no_effect_on_removing_no_leaves(),
+ should_have_no_effect_on_removing_non_existant_branch(),
+ should_remove_leaf(),
+ should_produce_empty_tree_on_removing_all_leaves(),
+ should_have_no_effect_on_removing_non_existant_node(),
+ should_produce_empty_tree_on_removing_last_leaf()
+ ]
+ }.
+
+key_tree_get_leaves_test_()->
+ {
+ "Leaves retrieving",
+ [
+ should_extract_subtree(),
+ should_extract_subsubtree(),
+ should_gather_non_existant_leaf(),
+ should_gather_leaf(),
+ shoul_gather_multiple_leaves(),
+ should_retrieve_full_key_path(),
+ should_retrieve_full_key_path_for_node(),
+ should_retrieve_leaves_with_parent_node(),
+ should_retrieve_all_leaves()
+ ]
+ }.
+
+key_tree_leaf_counting_test_()->
+ {
+ "Leaf counting",
+ [
+ should_have_no_leaves_for_empty_tree(),
+ should_have_single_leaf_for_tree_with_single_node(),
+ should_have_two_leaves_for_tree_with_chindler_siblings(),
+ should_not_affect_on_leaf_counting_for_stemmed_tree()
+ ]
+ }.
+
+key_tree_stemming_test_()->
+ {
+ "Stemming",
+ [
+ should_have_no_effect_for_stemming_more_levels_than_exists(),
+ should_return_one_deepest_node(),
+ should_return_two_deepest_nodes()
+ ]
+ }.
+
+
+should_merge_with_empty_tree()->
+ One = {1, {"1","foo",[]}},
+ ?_assertMatch({[One], no_conflicts},
+ couch_key_tree:merge([], One, ?DEPTH)).
+
+should_merge_reflexive()->
+ One = {1, {"1","foo",[]}},
+ ?_assertMatch({[One], no_conflicts},
+ couch_key_tree:merge([One], One, ?DEPTH)).
+
+should_merge_prefix_of_a_tree_with_tree()->
+ One = {1, {"1","foo",[]}},
+ TwoSibs = [{1, {"1","foo",[]}},
+ {1, {"2","foo",[]}}],
+ ?_assertMatch({TwoSibs, no_conflicts},
+ couch_key_tree:merge(TwoSibs, One, ?DEPTH)).
+
+should_produce_conflict_on_merge_with_unrelated_branch()->
+ TwoSibs = [{1, {"1","foo",[]}},
+ {1, {"2","foo",[]}}],
+ Three = {1, {"3","foo",[]}},
+ ThreeSibs = [{1, {"1","foo",[]}},
+ {1, {"2","foo",[]}},
+ {1, {"3","foo",[]}}],
+ ?_assertMatch({ThreeSibs, conflicts},
+ couch_key_tree:merge(TwoSibs, Three, ?DEPTH)).
+
+should_merge_reflexive_for_child_nodes()->
+ TwoChild = {1, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}},
+ ?_assertMatch({[TwoChild], no_conflicts},
+ couch_key_tree:merge([TwoChild], TwoChild, ?DEPTH)).
+
+should_merge_tree_to_itself()->
+ TwoChildSibs = {1, {"1","foo", [{"1a", "bar", []},
+ {"1b", "bar", []}]}},
+ ?_assertMatch({[TwoChildSibs], no_conflicts},
+ couch_key_tree:merge([TwoChildSibs], TwoChildSibs, ?DEPTH)).
+
+should_merge_tree_of_odd_length()->
+ TwoChild = {1, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}},
+ TwoChildSibs = {1, {"1","foo", [{"1a", "bar", []},
+ {"1b", "bar", []}]}},
+ TwoChildPlusSibs = {1, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]},
+ {"1b", "bar", []}]}},
+
+ ?_assertMatch({[TwoChildPlusSibs], no_conflicts},
+ couch_key_tree:merge([TwoChild], TwoChildSibs, ?DEPTH)).
+
+should_merge_tree_with_stem()->
+ Stemmed = {2, {"1a", "bar", []}},
+ TwoChildSibs = {1, {"1","foo", [{"1a", "bar", []},
+ {"1b", "bar", []}]}},
+
+ ?_assertMatch({[TwoChildSibs], no_conflicts},
+ couch_key_tree:merge([TwoChildSibs], Stemmed, ?DEPTH)).
+
+should_merge_with_stem_at_deeper_level()->
+ Stemmed = {3, {"1bb", "boo", []}},
+ TwoChildSibs = {1, {"1","foo", [{"1a", "bar", []},
+ {"1b", "bar", [{"1bb", "boo", []}]}]}},
+ ?_assertMatch({[TwoChildSibs], no_conflicts},
+ couch_key_tree:merge([TwoChildSibs], Stemmed, ?DEPTH)).
+
+should_merge_with_stem_at_deeper_level_with_deeper_paths()->
+ Stemmed = {3, {"1bb", "boo", []}},
+ StemmedTwoChildSibs = [{2,{"1a", "bar", []}},
+ {2,{"1b", "bar", [{"1bb", "boo", []}]}}],
+ ?_assertMatch({StemmedTwoChildSibs, no_conflicts},
+ couch_key_tree:merge(StemmedTwoChildSibs, Stemmed, ?DEPTH)).
+
+should_merge_single_tree_with_deeper_stem()->
+ Stemmed = {3, {"1aa", "bar", []}},
+ TwoChild = {1, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}},
+ ?_assertMatch({[TwoChild], no_conflicts},
+ couch_key_tree:merge([TwoChild], Stemmed, ?DEPTH)).
+
+should_merge_tree_with_large_stem()->
+ Stemmed = {2, {"1a", "bar", [{"1aa", "bar", []}]}},
+ TwoChild = {1, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}},
+ ?_assertMatch({[TwoChild], no_conflicts},
+ couch_key_tree:merge([TwoChild], Stemmed, ?DEPTH)).
+
+should_merge_stems()->
+ StemmedA = {2, {"1a", "bar", [{"1aa", "bar", []}]}},
+ StemmedB = {3, {"1aa", "bar", []}},
+ ?_assertMatch({[StemmedA], no_conflicts},
+ couch_key_tree:merge([StemmedA], StemmedB, ?DEPTH)).
+
+should_create_conflicts_on_merge()->
+ OneChild = {1, {"1","foo",[{"1a", "bar", []}]}},
+ Stemmed = {3, {"1aa", "bar", []}},
+ ?_assertMatch({[OneChild, Stemmed], conflicts},
+ couch_key_tree:merge([OneChild], Stemmed, ?DEPTH)).
+
+should_create_no_conflicts_on_merge()->
+ OneChild = {1, {"1","foo",[{"1a", "bar", []}]}},
+ Stemmed = {3, {"1aa", "bar", []}},
+ TwoChild = {1, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}},
+ ?_assertMatch({[TwoChild], no_conflicts},
+ couch_key_tree:merge([OneChild, Stemmed], TwoChild, ?DEPTH)).
+
+should_ignore_conflicting_branch()->
+ %% this test is based on couch-902-test-case2.py
+ %% foo has conflicts from replication at depth two
+ %% foo3 is the current value
+ Foo = {1, {"foo",
+ "val1",
+ [{"foo2","val2",[]},
+ {"foo3", "val3", []}
+ ]}},
+ %% foo now has an attachment added, which leads to foo4 and val4
+ %% off foo3
+ Bar = {1, {"foo",
+ [],
+ [{"foo3",
+ [],
+ [{"foo4","val4",[]}
+ ]}]}},
+ %% this is what the merge returns
+ %% note that it ignore the conflicting branch as there's no match
+ FooBar = {1, {"foo",
+ "val1",
+ [{"foo2","val2",[]},
+ {"foo3", "val3", [{"foo4","val4",[]}]}
+ ]}},
+ {
+ "COUCHDB-902",
+ ?_assertMatch({[FooBar], no_conflicts},
+ couch_key_tree:merge([Foo], Bar, ?DEPTH))
+ }.
+
+should_not_find_missing_leaves()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch([],
+ couch_key_tree:find_missing(TwoChildSibs,
+ [{0,"1"}, {1,"1a"}])).
+
+should_find_missing_leaves()->
+ Stemmed1 = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
+ Stemmed2 = [{2, {"1aa", "bar", []}}],
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ [
+ ?_assertMatch(
+ [{0, "10"}, {100, "x"}],
+ couch_key_tree:find_missing(
+ TwoChildSibs,
+ [{0,"1"}, {0, "10"}, {1,"1a"}, {100, "x"}])),
+ ?_assertMatch(
+ [{0, "1"}, {100, "x"}],
+ couch_key_tree:find_missing(
+ Stemmed1,
+ [{0,"1"}, {1,"1a"}, {100, "x"}])),
+ ?_assertMatch(
+ [{0, "1"}, {1,"1a"}, {100, "x"}],
+ couch_key_tree:find_missing(
+ Stemmed2,
+ [{0,"1"}, {1,"1a"}, {100, "x"}]))
+ ].
+
+should_have_no_effect_on_removing_no_leaves()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({TwoChildSibs, []},
+ couch_key_tree:remove_leafs(TwoChildSibs,
+ [])).
+
+should_have_no_effect_on_removing_non_existant_branch()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({TwoChildSibs, []},
+ couch_key_tree:remove_leafs(TwoChildSibs,
+ [{0, "1"}])).
+
+should_remove_leaf()->
+ OneChild = [{0, {"1","foo",[{"1a", "bar", []}]}}],
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({OneChild, [{1, "1b"}]},
+ couch_key_tree:remove_leafs(TwoChildSibs,
+ [{1, "1b"}])).
+
+should_produce_empty_tree_on_removing_all_leaves()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({[], [{1, "1b"}, {1, "1a"}]},
+ couch_key_tree:remove_leafs(TwoChildSibs,
+ [{1, "1b"}, {1, "1a"}])).
+
+should_have_no_effect_on_removing_non_existant_node()->
+ Stemmed = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
+ ?_assertMatch({Stemmed, []},
+ couch_key_tree:remove_leafs(Stemmed,
+ [{1, "1a"}])).
+
+should_produce_empty_tree_on_removing_last_leaf()->
+ Stemmed = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
+ ?_assertMatch({[], [{2, "1aa"}]},
+ couch_key_tree:remove_leafs(Stemmed,
+ [{2, "1aa"}])).
+
+should_extract_subtree()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({[{"foo", {0, ["1"]}}],[]},
+ couch_key_tree:get(TwoChildSibs, [{0, "1"}])).
+
+should_extract_subsubtree()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({[{"bar", {1, ["1a", "1"]}}],[]},
+ couch_key_tree:get(TwoChildSibs, [{1, "1a"}])).
+
+should_gather_non_existant_leaf()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({[],[{0, "x"}]},
+ couch_key_tree:get_key_leafs(TwoChildSibs, [{0, "x"}])).
+
+should_gather_leaf()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({[{"bar", {1, ["1a","1"]}}],[]},
+ couch_key_tree:get_key_leafs(TwoChildSibs, [{1, "1a"}])).
+
+shoul_gather_multiple_leaves()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({[{"bar", {1, ["1a","1"]}},{"bar",{1, ["1b","1"]}}],[]},
+ couch_key_tree:get_key_leafs(TwoChildSibs, [{0, "1"}])).
+
+should_retrieve_full_key_path()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({[{0,[{"1", "foo"}]}],[]},
+ couch_key_tree:get_full_key_paths(TwoChildSibs, [{0, "1"}])).
+
+should_retrieve_full_key_path_for_node()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertMatch({[{1,[{"1a", "bar"},{"1", "foo"}]}],[]},
+ couch_key_tree:get_full_key_paths(TwoChildSibs, [{1, "1a"}])).
+
+should_retrieve_leaves_with_parent_node()->
+ Stemmed = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ [
+ ?_assertMatch([{2, [{"1aa", "bar"},{"1a", "bar"}]}],
+ couch_key_tree:get_all_leafs_full(Stemmed)),
+ ?_assertMatch([{1, [{"1a", "bar"},{"1", "foo"}]},
+ {1, [{"1b", "bar"},{"1", "foo"}]}],
+ couch_key_tree:get_all_leafs_full(TwoChildSibs))
+ ].
+
+should_retrieve_all_leaves()->
+ Stemmed = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ [
+ ?_assertMatch([{"bar", {2, ["1aa","1a"]}}],
+ couch_key_tree:get_all_leafs(Stemmed)),
+ ?_assertMatch([{"bar", {1, ["1a", "1"]}}, {"bar", {1, ["1b","1"]}}],
+ couch_key_tree:get_all_leafs(TwoChildSibs))
+ ].
+
+should_have_no_leaves_for_empty_tree()->
+ ?_assertEqual(0, couch_key_tree:count_leafs([])).
+
+should_have_single_leaf_for_tree_with_single_node()->
+ ?_assertEqual(1, couch_key_tree:count_leafs([{0, {"1","foo",[]}}])).
+
+should_have_two_leaves_for_tree_with_chindler_siblings()->
+ TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
+ ?_assertEqual(2, couch_key_tree:count_leafs(TwoChildSibs)).
+
+should_not_affect_on_leaf_counting_for_stemmed_tree()->
+ ?_assertEqual(1, couch_key_tree:count_leafs([{2, {"1bb", "boo", []}}])).
+
+should_have_no_effect_for_stemming_more_levels_than_exists()->
+ TwoChild = [{0, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}}],
+ ?_assertMatch(TwoChild, couch_key_tree:stem(TwoChild, 3)).
+
+should_return_one_deepest_node()->
+ TwoChild = [{0, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}}],
+ Stemmed = [{2, {"1aa", "bar", []}}],
+ ?_assertMatch(Stemmed, couch_key_tree:stem(TwoChild, 1)).
+
+should_return_two_deepest_nodes()->
+ TwoChild = [{0, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}}],
+ Stemmed = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
+ ?_assertMatch(Stemmed, couch_key_tree:stem(TwoChild, 2)).
+
http://git-wip-us.apache.org/repos/asf/couchdb/blob/5f6a0b66/test/etap/060-kt-merging.t
----------------------------------------------------------------------
diff --git a/test/etap/060-kt-merging.t b/test/etap/060-kt-merging.t
deleted file mode 100755
index efbdbf6..0000000
--- a/test/etap/060-kt-merging.t
+++ /dev/null
@@ -1,176 +0,0 @@
-#!/usr/bin/env escript
-%% -*- erlang -*-
-
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
-main(_) ->
- test_util:init_code_path(),
- etap:plan(16),
- case (catch test()) of
- ok ->
- etap:end_tests();
- Other ->
- etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
- etap:bail(Other)
- end,
- ok.
-
-test() ->
- One = {1, {"1","foo",[]}},
-
- etap:is(
- {[One], no_conflicts},
- couch_key_tree:merge([], One, 10),
- "The empty tree is the identity for merge."
- ),
- etap:is(
- {[One], no_conflicts},
- couch_key_tree:merge([One], One, 10),
- "Merging is reflexive."
- ),
-
- TwoSibs = [{1, {"1","foo",[]}},
- {1, {"2","foo",[]}}],
-
- etap:is(
- {TwoSibs, no_conflicts},
- couch_key_tree:merge(TwoSibs, One, 10),
- "Merging a prefix of a tree with the tree yields the tree."
- ),
-
- Three = {1, {"3","foo",[]}},
- ThreeSibs = [{1, {"1","foo",[]}},
- {1, {"2","foo",[]}},
- {1, {"3","foo",[]}}],
-
- etap:is(
- {ThreeSibs, conflicts},
- couch_key_tree:merge(TwoSibs, Three, 10),
- "Merging a third unrelated branch leads to a conflict."
- ),
-
-
- TwoChild = {1, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}},
-
- etap:is(
- {[TwoChild], no_conflicts},
- couch_key_tree:merge([TwoChild], TwoChild, 10),
- "Merging two children is still reflexive."
- ),
-
- TwoChildSibs = {1, {"1","foo", [{"1a", "bar", []},
- {"1b", "bar", []}]}},
- etap:is(
- {[TwoChildSibs], no_conflicts},
- couch_key_tree:merge([TwoChildSibs], TwoChildSibs, 10),
- "Merging a tree to itself is itself."),
-
- TwoChildPlusSibs =
- {1, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]},
- {"1b", "bar", []}]}},
-
- etap:is(
- {[TwoChildPlusSibs], no_conflicts},
- couch_key_tree:merge([TwoChild], TwoChildSibs, 10),
- "Merging tree of uneven length at node 2."),
-
- Stemmed1b = {2, {"1a", "bar", []}},
- etap:is(
- {[TwoChildSibs], no_conflicts},
- couch_key_tree:merge([TwoChildSibs], Stemmed1b, 10),
- "Merging a tree with a stem."
- ),
-
- TwoChildSibs2 = {1, {"1","foo", [{"1a", "bar", []},
- {"1b", "bar", [{"1bb", "boo", []}]}]}},
- Stemmed1bb = {3, {"1bb", "boo", []}},
- etap:is(
- {[TwoChildSibs2], no_conflicts},
- couch_key_tree:merge([TwoChildSibs2], Stemmed1bb, 10),
- "Merging a stem at a deeper level."
- ),
-
- StemmedTwoChildSibs2 = [{2,{"1a", "bar", []}},
- {2,{"1b", "bar", [{"1bb", "boo", []}]}}],
-
- etap:is(
- {StemmedTwoChildSibs2, no_conflicts},
- couch_key_tree:merge(StemmedTwoChildSibs2, Stemmed1bb, 10),
- "Merging a stem at a deeper level against paths at deeper levels."
- ),
-
- Stemmed1aa = {3, {"1aa", "bar", []}},
- etap:is(
- {[TwoChild], no_conflicts},
- couch_key_tree:merge([TwoChild], Stemmed1aa, 10),
- "Merging a single tree with a deeper stem."
- ),
-
- Stemmed1a = {2, {"1a", "bar", [{"1aa", "bar", []}]}},
- etap:is(
- {[TwoChild], no_conflicts},
- couch_key_tree:merge([TwoChild], Stemmed1a, 10),
- "Merging a larger stem."
- ),
-
- etap:is(
- {[Stemmed1a], no_conflicts},
- couch_key_tree:merge([Stemmed1a], Stemmed1aa, 10),
- "More merging."
- ),
-
- OneChild = {1, {"1","foo",[{"1a", "bar", []}]}},
- Expect1 = [OneChild, Stemmed1aa],
- etap:is(
- {Expect1, conflicts},
- couch_key_tree:merge([OneChild], Stemmed1aa, 10),
- "Merging should create conflicts."
- ),
-
- etap:is(
- {[TwoChild], no_conflicts},
- couch_key_tree:merge(Expect1, TwoChild, 10),
- "Merge should have no conflicts."
- ),
-
- %% this test is based on couch-902-test-case2.py
- %% foo has conflicts from replication at depth two
- %% foo3 is the current value
- Foo = {1, {"foo",
- "val1",
- [{"foo2","val2",[]},
- {"foo3", "val3", []}
- ]}},
- %% foo now has an attachment added, which leads to foo4 and val4
- %% off foo3
- Bar = {1, {"foo",
- [],
- [{"foo3",
- [],
- [{"foo4","val4",[]}
- ]}]}},
- %% this is what the merge returns
- %% note that it ignore the conflicting branch as there's no match
- FooBar = {1, {"foo",
- "val1",
- [{"foo2","val2",[]},
- {"foo3", "val3", [{"foo4","val4",[]}]}
- ]}},
-
- etap:is(
- {[FooBar], no_conflicts},
- couch_key_tree:merge([Foo],Bar,10),
- "Merging trees with conflicts ought to behave."
- ),
-
- ok.
http://git-wip-us.apache.org/repos/asf/couchdb/blob/5f6a0b66/test/etap/061-kt-missing-leaves.t
----------------------------------------------------------------------
diff --git a/test/etap/061-kt-missing-leaves.t b/test/etap/061-kt-missing-leaves.t
deleted file mode 100755
index d60b4db..0000000
--- a/test/etap/061-kt-missing-leaves.t
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env escript
-%% -*- erlang -*-
-
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
-main(_) ->
- test_util:init_code_path(),
- etap:plan(4),
- case (catch test()) of
- ok ->
- etap:end_tests();
- Other ->
- etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
- etap:bail(Other)
- end,
- ok.
-
-test() ->
- TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
- Stemmed1 = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
- Stemmed2 = [{2, {"1aa", "bar", []}}],
-
- etap:is(
- [],
- couch_key_tree:find_missing(TwoChildSibs, [{0,"1"}, {1,"1a"}]),
- "Look for missing keys."
- ),
-
- etap:is(
- [{0, "10"}, {100, "x"}],
- couch_key_tree:find_missing(
- TwoChildSibs,
- [{0,"1"}, {0, "10"}, {1,"1a"}, {100, "x"}]
- ),
- "Look for missing keys."
- ),
-
- etap:is(
- [{0, "1"}, {100, "x"}],
- couch_key_tree:find_missing(
- Stemmed1,
- [{0,"1"}, {1,"1a"}, {100, "x"}]
- ),
- "Look for missing keys."
- ),
- etap:is(
- [{0, "1"}, {1,"1a"}, {100, "x"}],
- couch_key_tree:find_missing(
- Stemmed2,
- [{0,"1"}, {1,"1a"}, {100, "x"}]
- ),
- "Look for missing keys."
- ),
-
- ok.
http://git-wip-us.apache.org/repos/asf/couchdb/blob/5f6a0b66/test/etap/062-kt-remove-leaves.t
----------------------------------------------------------------------
diff --git a/test/etap/062-kt-remove-leaves.t b/test/etap/062-kt-remove-leaves.t
deleted file mode 100755
index 745a00b..0000000
--- a/test/etap/062-kt-remove-leaves.t
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env escript
-%% -*- erlang -*-
-
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
-main(_) ->
- test_util:init_code_path(),
- etap:plan(6),
- case (catch test()) of
- ok ->
- etap:end_tests();
- Other ->
- etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
- etap:bail(Other)
- end,
- ok.
-
-test() ->
- OneChild = [{0, {"1","foo",[{"1a", "bar", []}]}}],
- TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
- Stemmed = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
-
- etap:is(
- {TwoChildSibs, []},
- couch_key_tree:remove_leafs(TwoChildSibs, []),
- "Removing no leaves has no effect on the tree."
- ),
-
- etap:is(
- {TwoChildSibs, []},
- couch_key_tree:remove_leafs(TwoChildSibs, [{0, "1"}]),
- "Removing a non-existant branch has no effect."
- ),
-
- etap:is(
- {OneChild, [{1, "1b"}]},
- couch_key_tree:remove_leafs(TwoChildSibs, [{1, "1b"}]),
- "Removing a leaf removes the leaf."
- ),
-
- etap:is(
- {[], [{1, "1b"},{1, "1a"}]},
- couch_key_tree:remove_leafs(TwoChildSibs, [{1, "1a"}, {1, "1b"}]),
- "Removing all leaves returns an empty tree."
- ),
-
- etap:is(
- {Stemmed, []},
- couch_key_tree:remove_leafs(Stemmed, [{1, "1a"}]),
- "Removing a non-existant node has no effect."
- ),
-
- etap:is(
- {[], [{2, "1aa"}]},
- couch_key_tree:remove_leafs(Stemmed, [{2, "1aa"}]),
- "Removing the last leaf returns an empty tree."
- ),
-
- ok.
http://git-wip-us.apache.org/repos/asf/couchdb/blob/5f6a0b66/test/etap/063-kt-get-leaves.t
----------------------------------------------------------------------
diff --git a/test/etap/063-kt-get-leaves.t b/test/etap/063-kt-get-leaves.t
deleted file mode 100755
index 6d4e800..0000000
--- a/test/etap/063-kt-get-leaves.t
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env escript
-%% -*- erlang -*-
-
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
-main(_) ->
- test_util:init_code_path(),
- etap:plan(11),
- case (catch test()) of
- ok ->
- etap:end_tests();
- Other ->
- etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
- etap:bail(Other)
- end,
- ok.
-
-test() ->
- TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
- Stemmed = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
-
- etap:is(
- {[{"foo", {0, ["1"]}}],[]},
- couch_key_tree:get(TwoChildSibs, [{0, "1"}]),
- "extract a subtree."
- ),
-
- etap:is(
- {[{"bar", {1, ["1a", "1"]}}],[]},
- couch_key_tree:get(TwoChildSibs, [{1, "1a"}]),
- "extract a subtree."
- ),
-
- etap:is(
- {[],[{0,"x"}]},
- couch_key_tree:get_key_leafs(TwoChildSibs, [{0, "x"}]),
- "gather up the leaves."
- ),
-
- etap:is(
- {[{"bar", {1, ["1a","1"]}}],[]},
- couch_key_tree:get_key_leafs(TwoChildSibs, [{1, "1a"}]),
- "gather up the leaves."
- ),
-
- etap:is(
- {[{"bar", {1, ["1a","1"]}},{"bar",{1, ["1b","1"]}}],[]},
- couch_key_tree:get_key_leafs(TwoChildSibs, [{0, "1"}]),
- "gather up the leaves."
- ),
-
- etap:is(
- {[{0,[{"1", "foo"}]}],[]},
- couch_key_tree:get_full_key_paths(TwoChildSibs, [{0, "1"}]),
- "retrieve full key paths."
- ),
-
- etap:is(
- {[{1,[{"1a", "bar"},{"1", "foo"}]}],[]},
- couch_key_tree:get_full_key_paths(TwoChildSibs, [{1, "1a"}]),
- "retrieve full key paths."
- ),
-
- etap:is(
- [{2, [{"1aa", "bar"},{"1a", "bar"}]}],
- couch_key_tree:get_all_leafs_full(Stemmed),
- "retrieve all leaves."
- ),
-
- etap:is(
- [{1, [{"1a", "bar"},{"1", "foo"}]}, {1, [{"1b", "bar"},{"1", "foo"}]}],
- couch_key_tree:get_all_leafs_full(TwoChildSibs),
- "retrieve all the leaves."
- ),
-
- etap:is(
- [{"bar", {2, ["1aa","1a"]}}],
- couch_key_tree:get_all_leafs(Stemmed),
- "retrieve all leaves."
- ),
-
- etap:is(
- [{"bar", {1, ["1a", "1"]}}, {"bar", {1, ["1b","1"]}}],
- couch_key_tree:get_all_leafs(TwoChildSibs),
- "retrieve all the leaves."
- ),
-
- ok.
http://git-wip-us.apache.org/repos/asf/couchdb/blob/5f6a0b66/test/etap/064-kt-counting.t
----------------------------------------------------------------------
diff --git a/test/etap/064-kt-counting.t b/test/etap/064-kt-counting.t
deleted file mode 100755
index f182d28..0000000
--- a/test/etap/064-kt-counting.t
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env escript
-%% -*- erlang -*-
-
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
-main(_) ->
- test_util:init_code_path(),
- etap:plan(4),
- case (catch test()) of
- ok ->
- etap:end_tests();
- Other ->
- etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
- etap:bail(Other)
- end,
- ok.
-
-test() ->
- EmptyTree = [],
- One = [{0, {"1","foo",[]}}],
- TwoChildSibs = [{0, {"1","foo", [{"1a", "bar", []}, {"1b", "bar", []}]}}],
- Stemmed = [{2, {"1bb", "boo", []}}],
-
- etap:is(0, couch_key_tree:count_leafs(EmptyTree),
- "Empty trees have no leaves."),
-
- etap:is(1, couch_key_tree:count_leafs(One),
- "Single node trees have a single leaf."),
-
- etap:is(2, couch_key_tree:count_leafs(TwoChildSibs),
- "Two children siblings counted as two leaves."),
-
- etap:is(1, couch_key_tree:count_leafs(Stemmed),
- "Stemming does not affect leaf counting."),
-
- ok.
http://git-wip-us.apache.org/repos/asf/couchdb/blob/5f6a0b66/test/etap/065-kt-stemming.t
----------------------------------------------------------------------
diff --git a/test/etap/065-kt-stemming.t b/test/etap/065-kt-stemming.t
deleted file mode 100755
index 6e781c1..0000000
--- a/test/etap/065-kt-stemming.t
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env escript
-%% -*- erlang -*-
-
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
-main(_) ->
- test_util:init_code_path(),
- etap:plan(3),
- case (catch test()) of
- ok ->
- etap:end_tests();
- Other ->
- etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
- etap:bail(Other)
- end,
- ok.
-
-test() ->
- TwoChild = [{0, {"1","foo", [{"1a", "bar", [{"1aa", "bar", []}]}]}}],
- Stemmed1 = [{1, {"1a", "bar", [{"1aa", "bar", []}]}}],
- Stemmed2 = [{2, {"1aa", "bar", []}}],
-
- etap:is(TwoChild, couch_key_tree:stem(TwoChild, 3),
- "Stemming more levels than what exists does nothing."),
-
- etap:is(Stemmed1, couch_key_tree:stem(TwoChild, 2),
- "Stemming with a depth of two returns the deepest two nodes."),
-
- etap:is(Stemmed2, couch_key_tree:stem(TwoChild, 1),
- "Stemming to a depth of one returns the deepest node."),
-
- ok.
http://git-wip-us.apache.org/repos/asf/couchdb/blob/5f6a0b66/test/etap/Makefile.am
----------------------------------------------------------------------
diff --git a/test/etap/Makefile.am b/test/etap/Makefile.am
index b6ec287..fe50da3 100644
--- a/test/etap/Makefile.am
+++ b/test/etap/Makefile.am
@@ -36,12 +36,6 @@ fixture_files = \
fixtures/test.couch
tap_files = \
- 060-kt-merging.t \
- 061-kt-missing-leaves.t \
- 062-kt-remove-leaves.t \
- 063-kt-get-leaves.t \
- 064-kt-counting.t \
- 065-kt-stemming.t \
070-couch-db.t \
072-cleanup.t \
073-changes.t \