Skip to content

Commit c7b038d

Browse files
authored
Merge pull request #4770 from vgteam/missing-transitions
Add back in missing transitions
2 parents aa8171c + 3459d74 commit c7b038d

File tree

3 files changed

+375
-174
lines changed

3 files changed

+375
-174
lines changed

src/unittest/zip_code_tree.cpp

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,13 +1137,13 @@ namespace unittest {
11371137

11381138
SECTION("Traverse 3 backwards") {
11391139
// [1+0 3 {2 inf 0 inf 12 inf inf 9 inf inf inf 2 inf
1140-
// 2 inf inf 8 inf 8 5 0 inf [4+0][3-1rev 1 3-0rev]} 0 5+0]
1140+
// 2 inf inf 8 inf 8 5 0 inf [4+0][3-1rev 1 3-0rev]} 1 5+1]
11411141
vector<pos_t> positions;
11421142
positions.emplace_back(1, false, 0);
11431143
positions.emplace_back(4, false, 0);
11441144
positions.emplace_back(3, true, 0);
11451145
positions.emplace_back(3, true, 1);
1146-
positions.emplace_back(5, false, 0);
1146+
positions.emplace_back(5, false, 1);
11471147

11481148
ZipCodeForest zip_forest = make_and_validate_forest(positions, distance_index);
11491149
REQUIRE(zip_forest.trees.size() == 1);
@@ -1201,35 +1201,41 @@ namespace unittest {
12011201
REQUIRE(reverse_views[{1, true}][1].seed == 3);
12021202
REQUIRE(reverse_views[{1, true}][1].distance == 3);
12031203
REQUIRE(reverse_views[{1, true}][1].is_reversed == true);
1204-
// Edge to 5+0rev (yes, rev - we're going L->R here)
1204+
// Edge to 5+1rev (yes, rev - we're going L->R here)
12051205
REQUIRE(reverse_views[{1, true}][2].seed == 4);
1206-
REQUIRE(reverse_views[{1, true}][2].distance == 8);
1206+
REQUIRE(reverse_views[{1, true}][2].distance == 9);
12071207
REQUIRE(reverse_views[{1, true}][2].is_reversed == true);
12081208

1209-
// 3-1 can see the rest of its chain
1209+
// 3-1 can see the rest of its chain,
1210+
// and should also exit the snarl to 1+0
12101211
// Not rev since we're going L->R
12111212
REQUIRE(reverse_views.count({3, false}));
1212-
REQUIRE(reverse_views[{3, false}].size() == 1);
1213+
REQUIRE(reverse_views[{3, false}].size() == 2);
12131214
// Edge to 3-0
12141215
REQUIRE(reverse_views[{3, false}][0].seed == 2);
12151216
REQUIRE(reverse_views[{3, false}][0].distance == 1);
12161217
REQUIRE(reverse_views[{3, false}][0].is_reversed == false);
1218+
// Edge to 1+0
1219+
REQUIRE(reverse_views[{3, false}][1].seed == 0);
1220+
REQUIRE(reverse_views[{3, false}][1].distance == 6);
1221+
REQUIRE(reverse_views[{3, false}][1].is_reversed == false);
12171222

1218-
// 5+0 can see the seeds on 3 & 1
1219-
REQUIRE(reverse_views.count({4, false}));
1220-
REQUIRE(reverse_views[{4, false}].size() == 3);
1221-
// Edge to 3-1 (not rev since going L->R)
1222-
REQUIRE(reverse_views[{4, false}][0].seed == 3);
1223-
REQUIRE(reverse_views[{4, false}][0].distance == 5);
1224-
REQUIRE(reverse_views[{4, false}][0].is_reversed == false);
1223+
// 3-1rev can see 5+1rev by exiting backwards
1224+
REQUIRE(reverse_views.count({3, true}));
1225+
REQUIRE(reverse_views[{3, true}].size() == 1);
12251226
// Edge to 3-0
1226-
REQUIRE(reverse_views[{4, false}][1].seed == 2);
1227-
REQUIRE(reverse_views[{4, false}][1].distance == 6);
1228-
REQUIRE(reverse_views[{4, false}][1].is_reversed == false);
1227+
REQUIRE(reverse_views[{3, true}][0].seed == 4);
1228+
REQUIRE(reverse_views[{3, true}][0].distance == 6);
1229+
REQUIRE(reverse_views[{3, true}][0].is_reversed == true);
1230+
1231+
// 5+1 can see only see the seed on 1
1232+
// (it skips over the cyclic snarl)
1233+
REQUIRE(reverse_views.count({4, false}));
1234+
REQUIRE(reverse_views[{4, false}].size() == 1);
12291235
// Edge to 1+0
1230-
REQUIRE(reverse_views[{4, false}][2].seed == 0);
1231-
REQUIRE(reverse_views[{4, false}][2].distance == 11);
1232-
REQUIRE(reverse_views[{4, false}][2].is_reversed == false);
1236+
REQUIRE(reverse_views[{4, false}][0].seed == 0);
1237+
REQUIRE(reverse_views[{4, false}][0].distance == 12);
1238+
REQUIRE(reverse_views[{4, false}][0].is_reversed == false);
12331239
} else {
12341240
cerr << "Not testing reverse views since I didn't bother writing it" << endl;
12351241
}
@@ -1821,6 +1827,25 @@ namespace unittest {
18211827
REQUIRE(dag_non_dag_count.first == 0);
18221828
REQUIRE(dag_non_dag_count.second == 2);
18231829
}
1830+
1831+
SECTION("Check iterator") {
1832+
// For each seed, what seeds and distances do we see in reverse from it?
1833+
auto reverse_views = get_reverse_views(zip_forest);
1834+
// All seven seeds go R->L,
1835+
// and the four in the cyclic snarl also go L->R
1836+
REQUIRE(reverse_views.size() == 11);
1837+
// 3+0 R->L can see 2+0 inside & 1+0 outside
1838+
REQUIRE(reverse_views.count({2, false}));
1839+
REQUIRE(reverse_views[{2, false}].size() == 2);
1840+
// Edge to 1+0
1841+
REQUIRE(reverse_views[{2, false}][0].seed == 0);
1842+
REQUIRE(reverse_views[{2, false}][0].distance == 6);
1843+
REQUIRE(reverse_views[{2, false}][0].is_reversed == false);
1844+
// Edge to 2+0
1845+
REQUIRE(reverse_views[{2, false}][1].seed == 1);
1846+
REQUIRE(reverse_views[{2, false}][1].distance == 3);
1847+
REQUIRE(reverse_views[{2, false}][1].is_reversed == false);
1848+
}
18241849
}
18251850
SECTION("Reverse both inversions") {
18261851
// [1+0 3 {1 inf 0 inf 3 inf inf 9 0 3 inf [4-0 3

0 commit comments

Comments
 (0)