1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/language/content/browser/ulp_language_code_locator/s2langquadtree.h"
#include <string>
#include <vector>
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/s2cellid/src/s2/s2cellid.h"
namespace {
template <size_t numbits>
S2LangQuadTreeNode GetTree(const std::vector<std::string>& languages,
std::bitset<numbits> tree) {
const BitsetSerializedLanguageTree<numbits> serialized_langtree(languages,
tree);
return S2LangQuadTreeNode::Deserialize(&serialized_langtree);
}
} // namespace
namespace language {
TEST(S2LangQuadTreeTest, RootIsEmptyLeaf) {
S2LangQuadTreeNode root;
const S2CellId cell = S2CellId::FromFace(0);
int level;
const std::string language = root.Get(cell, &level);
EXPECT_TRUE(language.empty());
EXPECT_EQ(level, 0);
}
TEST(S2LangQuadTreeTest, RootIsLeaf_FaceIsPresent) {
const std::vector<std::string> languages{"fr"};
const std::bitset<2> tree("11"); // String is in reverse order.
const S2LangQuadTreeNode root = GetTree(languages, tree);
const S2CellId cell = S2CellId::FromFace(0);
int level;
const std::string language = root.Get(cell, &level);
EXPECT_EQ(language, "fr");
EXPECT_EQ(level, 0);
}
TEST(S2LangQuadTreeTest, RootIsLeaf_FaceChildGetsFaceLanguage) {
const std::vector<std::string> languages{"fr"};
const std::bitset<2> tree("11"); // String is in reverse order.
const S2LangQuadTreeNode root = GetTree(languages, tree);
const S2CellId cell = S2CellId::FromFace(0).child(0);
int level;
const std::string language = root.Get(cell, &level);
EXPECT_EQ(language, "fr");
EXPECT_EQ(level, 0);
}
TEST(S2LangQuadTreeTest, RootThenSingleLeaf_LeafIsPresent) {
const std::vector<std::string> languages{"fr"};
const std::bitset<9> tree("110101010"); // String is in reverse order.
const S2LangQuadTreeNode root = GetTree(languages, tree);
const S2CellId cell = S2CellId::FromFace(0).child(3);
int level;
const std::string language = root.Get(cell, &level);
EXPECT_EQ(language, "fr");
EXPECT_EQ(level, 1);
}
TEST(S2LangQuadTreeTest, RootThenSingleLeaf_ParentIsAbsent) {
const std::vector<std::string> languages{"fr"};
const std::bitset<9> tree("110101010"); // String is in reverse order.
const S2LangQuadTreeNode root = GetTree(languages, tree);
const S2CellId cell = S2CellId::FromFace(0);
int level;
const std::string language = root.Get(cell, &level);
EXPECT_TRUE(language.empty());
EXPECT_EQ(level, -1);
}
TEST(S2LangQuadTreeTest, RootThenSingleLeaf_SiblingIsAbsent) {
const std::vector<std::string> languages{"fr"};
const std::bitset<9> tree("110101010"); // String is in reverse order.
const S2LangQuadTreeNode root = GetTree(languages, tree);
const S2CellId cell = S2CellId::FromFace(0).child(0);
int level;
const std::string language = root.Get(cell, &level);
EXPECT_TRUE(language.empty());
EXPECT_EQ(level, 1);
}
TEST(S2LangQuadTreeTest, RootThenAllLeaves_LeavesArePresent) {
const std::vector<std::string> languages{"fr", "en"};
const std::bitset<13> tree("0111011011010"); // String is in reverse order.
const S2LangQuadTreeNode root = GetTree(languages, tree);
for (int leaf_index = 0; leaf_index < 3; leaf_index++) {
const S2CellId cell = S2CellId::FromFace(0).child(leaf_index);
int level;
const std::string language = root.Get(cell, &level);
EXPECT_EQ(language, "fr");
EXPECT_EQ(level, 1);
}
const S2CellId cell = S2CellId::FromFace(0).child(3);
int level;
const std::string language = root.Get(cell, &level);
EXPECT_EQ(language, "en");
EXPECT_EQ(level, 1);
}
TEST(S2LangQuadTreeTest, RootThenAllLeaves_ParentIsAbsent) {
const std::vector<std::string> languages{"fr", "en"};
const std::bitset<13> tree("0111011011010"); // String is in reverse order.
const S2LangQuadTreeNode root = GetTree(languages, tree);
const S2CellId cell = S2CellId::FromFace(0);
int level;
const std::string language = root.Get(cell, &level);
EXPECT_TRUE(language.empty());
EXPECT_EQ(level, -1);
}
} // namespace language
|