1*a03ca8b9SKrzysztof Kosiński // Copyright 2017 The Chromium Authors. All rights reserved.
2*a03ca8b9SKrzysztof Kosiński // Use of this source code is governed by a BSD-style license that can be
3*a03ca8b9SKrzysztof Kosiński // found in the LICENSE file.
4*a03ca8b9SKrzysztof Kosiński
5*a03ca8b9SKrzysztof Kosiński #include "components/zucchini/target_pool.h"
6*a03ca8b9SKrzysztof Kosiński
7*a03ca8b9SKrzysztof Kosiński #include <cmath>
8*a03ca8b9SKrzysztof Kosiński #include <deque>
9*a03ca8b9SKrzysztof Kosiński #include <string>
10*a03ca8b9SKrzysztof Kosiński #include <utility>
11*a03ca8b9SKrzysztof Kosiński
12*a03ca8b9SKrzysztof Kosiński #include "components/zucchini/image_utils.h"
13*a03ca8b9SKrzysztof Kosiński #include "testing/gtest/include/gtest/gtest.h"
14*a03ca8b9SKrzysztof Kosiński
15*a03ca8b9SKrzysztof Kosiński namespace zucchini {
16*a03ca8b9SKrzysztof Kosiński
17*a03ca8b9SKrzysztof Kosiński namespace {
18*a03ca8b9SKrzysztof Kosiński
19*a03ca8b9SKrzysztof Kosiński using OffsetDeque = std::deque<offset_t>;
20*a03ca8b9SKrzysztof Kosiński
21*a03ca8b9SKrzysztof Kosiński } // namespace
22*a03ca8b9SKrzysztof Kosiński
TEST(TargetPoolTest,InsertTargetsFromReferences)23*a03ca8b9SKrzysztof Kosiński TEST(TargetPoolTest, InsertTargetsFromReferences) {
24*a03ca8b9SKrzysztof Kosiński auto test_insert = [](std::vector<Reference>&& references) -> OffsetDeque {
25*a03ca8b9SKrzysztof Kosiński TargetPool target_pool;
26*a03ca8b9SKrzysztof Kosiński target_pool.InsertTargets(references);
27*a03ca8b9SKrzysztof Kosiński // Return copy since |target_pool| goes out of scope.
28*a03ca8b9SKrzysztof Kosiński return target_pool.targets();
29*a03ca8b9SKrzysztof Kosiński };
30*a03ca8b9SKrzysztof Kosiński
31*a03ca8b9SKrzysztof Kosiński EXPECT_EQ(OffsetDeque(), test_insert({}));
32*a03ca8b9SKrzysztof Kosiński EXPECT_EQ(OffsetDeque({0, 1}), test_insert({{0, 0}, {10, 1}}));
33*a03ca8b9SKrzysztof Kosiński EXPECT_EQ(OffsetDeque({0, 1}), test_insert({{0, 1}, {10, 0}}));
34*a03ca8b9SKrzysztof Kosiński EXPECT_EQ(OffsetDeque({0, 1, 2}), test_insert({{0, 1}, {10, 0}, {20, 2}}));
35*a03ca8b9SKrzysztof Kosiński EXPECT_EQ(OffsetDeque({0}), test_insert({{0, 0}, {10, 0}}));
36*a03ca8b9SKrzysztof Kosiński EXPECT_EQ(OffsetDeque({0, 1}), test_insert({{0, 0}, {10, 0}, {20, 1}}));
37*a03ca8b9SKrzysztof Kosiński }
38*a03ca8b9SKrzysztof Kosiński
TEST(TargetPoolTest,KeyOffset)39*a03ca8b9SKrzysztof Kosiński TEST(TargetPoolTest, KeyOffset) {
40*a03ca8b9SKrzysztof Kosiński auto test_key_offset = [](const std::string& nearest_offsets_key,
41*a03ca8b9SKrzysztof Kosiński OffsetDeque&& targets) {
42*a03ca8b9SKrzysztof Kosiński TargetPool target_pool(std::move(targets));
43*a03ca8b9SKrzysztof Kosiński for (offset_t offset : target_pool.targets()) {
44*a03ca8b9SKrzysztof Kosiński offset_t key = target_pool.KeyForOffset(offset);
45*a03ca8b9SKrzysztof Kosiński EXPECT_LT(key, target_pool.size());
46*a03ca8b9SKrzysztof Kosiński EXPECT_EQ(offset, target_pool.OffsetForKey(key));
47*a03ca8b9SKrzysztof Kosiński }
48*a03ca8b9SKrzysztof Kosiński for (offset_t offset = 0; offset < nearest_offsets_key.size(); ++offset) {
49*a03ca8b9SKrzysztof Kosiński key_t key = target_pool.KeyForNearestOffset(offset);
50*a03ca8b9SKrzysztof Kosiński EXPECT_EQ(key, static_cast<key_t>(nearest_offsets_key[offset] - '0'));
51*a03ca8b9SKrzysztof Kosiński }
52*a03ca8b9SKrzysztof Kosiński };
53*a03ca8b9SKrzysztof Kosiński test_key_offset("0000000000000000", {});
54*a03ca8b9SKrzysztof Kosiński test_key_offset("0000000000000000", {0});
55*a03ca8b9SKrzysztof Kosiński test_key_offset("0000000000000000", {1});
56*a03ca8b9SKrzysztof Kosiński test_key_offset("0111111111111111", {0, 1});
57*a03ca8b9SKrzysztof Kosiński test_key_offset("0011111111111111", {0, 2});
58*a03ca8b9SKrzysztof Kosiński test_key_offset("0011111111111111", {1, 2});
59*a03ca8b9SKrzysztof Kosiński test_key_offset("0001111111111111", {1, 3});
60*a03ca8b9SKrzysztof Kosiński test_key_offset("0001112223334444", {1, 3, 7, 9, 13});
61*a03ca8b9SKrzysztof Kosiński test_key_offset("0000011112223333", {1, 7, 9, 13});
62*a03ca8b9SKrzysztof Kosiński }
63*a03ca8b9SKrzysztof Kosiński
64*a03ca8b9SKrzysztof Kosiński } // namespace zucchini
65