| Index: third_party/libaddressinput/chromium/trie_unittest.cc
|
| diff --git a/third_party/libaddressinput/chromium/trie_unittest.cc b/third_party/libaddressinput/chromium/trie_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9932c7a3cb49abd8a68e19eca3684265a457209d
|
| --- /dev/null
|
| +++ b/third_party/libaddressinput/chromium/trie_unittest.cc
|
| @@ -0,0 +1,142 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "third_party/libaddressinput/chromium/trie.h"
|
| +
|
| +#include <stdint.h>
|
| +#include <set>
|
| +#include <string>
|
| +
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace autofill {
|
| +
|
| +TEST(TrieTest, EmptyTrieHasNoData) {
|
| + Trie<std::string> trie;
|
| + std::set<std::string> result;
|
| +
|
| + static const uint8_t kKey[] = {0, 1, 2};
|
| + trie.FindDataForKeyPrefix(kKey, 3, &result);
|
| +
|
| + EXPECT_TRUE(result.empty());
|
| +}
|
| +
|
| +TEST(TrieTest, CanGetDataByExactKey) {
|
| + Trie<std::string> trie;
|
| + std::set<std::string> result;
|
| +
|
| + static const uint8_t kKey[] = {1, 2, 3};
|
| + static const int32_t kKeySize = 3;
|
| + trie.AddDataForKey(kKey, kKeySize, "world");
|
| + trie.FindDataForKeyPrefix(kKey, kKeySize, &result);
|
| +
|
| + std::set<std::string> expected;
|
| + expected.insert("world");
|
| + EXPECT_EQ(expected, result);
|
| +}
|
| +
|
| +TEST(TrieTest, CanGetDataByPrefix) {
|
| + Trie<std::string> trie;
|
| + std::set<std::string> result;
|
| +
|
| + static const uint8_t kKey[] = {1, 2, 3, 4, 5};
|
| + trie.AddDataForKey(kKey, 5, "world");
|
| +
|
| + static const uint8_t kPrefix[] = {1, 2, 3};
|
| + trie.FindDataForKeyPrefix(kPrefix, 3, &result);
|
| +
|
| + std::set<std::string> expected;
|
| + expected.insert("world");
|
| + EXPECT_EQ(expected, result);
|
| +}
|
| +
|
| +TEST(TrieTest, KeyTooLongNoData) {
|
| + Trie<std::string> trie;
|
| + std::set<std::string> result;
|
| +
|
| + static const uint8_t kKey[] = {1, 2, 3};
|
| + trie.AddDataForKey(kKey, 3, "world");
|
| +
|
| + static const uint8_t kTooLong[] = {1, 2, 3, 4};
|
| + trie.FindDataForKeyPrefix(kTooLong, 4, &result);
|
| +
|
| + EXPECT_TRUE(result.empty());
|
| +}
|
| +
|
| +TEST(TrieTest, CommonPrefixFindsMultipleData) {
|
| + Trie<std::string> trie;
|
| + std::set<std::string> result;
|
| +
|
| + static const uint8_t kHello[] = {1, 2, 3};
|
| + trie.AddDataForKey(kHello, 3, "world");
|
| +
|
| + static const uint8_t kHowdy[] = {1, 4, 5};
|
| + trie.AddDataForKey(kHowdy, 3, "buddy");
|
| +
|
| + static const uint8_t kFoo[] = {3, 2, 1};
|
| + trie.AddDataForKey(kFoo, 3, "bar");
|
| +
|
| + static const uint8_t kPrefix[] = {1};
|
| + trie.FindDataForKeyPrefix(kPrefix, 1, &result);
|
| +
|
| + std::set<std::string> expected;
|
| + expected.insert("world");
|
| + expected.insert("buddy");
|
| + EXPECT_EQ(expected, result);
|
| +}
|
| +
|
| +TEST(TrieTest, KeyCanBePrefixOfOtherKey) {
|
| + Trie<std::string> trie;
|
| + std::set<std::string> result;
|
| +
|
| + static const uint8_t kHello[] = {1, 2};
|
| + trie.AddDataForKey(kHello, 2, "world");
|
| +
|
| + static const uint8_t kHelloo[] = {1, 2, 3};
|
| + trie.AddDataForKey(kHelloo, 3, "woorld");
|
| +
|
| + static const uint8_t kHella[] = {1, 3, 4};
|
| + trie.AddDataForKey(kHella, 3, "warld");
|
| +
|
| + trie.FindDataForKeyPrefix(kHello, 2, &result);
|
| +
|
| + std::set<std::string> expected;
|
| + expected.insert("world");
|
| + expected.insert("woorld");
|
| + EXPECT_EQ(expected, result);
|
| +}
|
| +
|
| +TEST(TrieTest, AllowMutlipleKeys) {
|
| + Trie<std::string> trie;
|
| + std::set<std::string> result;
|
| +
|
| + static const uint8_t kHello[] = {1, 2};
|
| + trie.AddDataForKey(kHello, 2, "world");
|
| + trie.AddDataForKey(kHello, 2, "woorld");
|
| +
|
| + trie.FindDataForKeyPrefix(kHello, 2, &result);
|
| +
|
| + std::set<std::string> expected;
|
| + expected.insert("world");
|
| + expected.insert("woorld");
|
| + EXPECT_EQ(expected, result);
|
| +}
|
| +
|
| +TEST(TrieTest, CanFindVeryLongKey) {
|
| + Trie<std::string> trie;
|
| + std::set<std::string> result;
|
| +
|
| + static const uint8_t kVeryLongKey[] = {
|
| + 9, 3, 2, 6, 7, 0, 2, 7, 9, 3, 6, 8, 9, 2, 1, 6, 1, 5, 0, 3, 5};
|
| + static const size_t kKeySize = sizeof kVeryLongKey;
|
| + trie.AddDataForKey(kVeryLongKey, kKeySize, "world");
|
| +
|
| + trie.FindDataForKeyPrefix(kVeryLongKey, kKeySize, &result);
|
| +
|
| + std::set<std::string> expected;
|
| + expected.insert("world");
|
| + EXPECT_EQ(expected, result);
|
| +}
|
| +
|
| +} // namespace autofill
|
|
|