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
|
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "cc/base/index_rect.h"
#include <array>
#include "testing/gtest/include/gtest/gtest.h"
namespace cc {
TEST(IndexRectTest, NumIndices) {
struct NumIndicesCase {
int left;
int right;
int top;
int bottom;
int num_indices_x;
int num_indices_y;
};
auto num_indices_cases = std::to_array<NumIndicesCase>({
{-10, 10, -10, 10, 21, 21},
{0, 5, 0, 10, 6, 11},
{1, 2, 3, 4, 2, 2},
{0, 0, 0, 0, 1, 1},
{10, 10, 10, 10, 1, 1},
});
for (size_t i = 0; i < std::size(num_indices_cases); ++i) {
const NumIndicesCase& value = num_indices_cases[i];
IndexRect rect(value.left, value.right, value.top, value.bottom);
EXPECT_EQ(value.num_indices_x, rect.num_indices_x());
EXPECT_EQ(value.num_indices_y, rect.num_indices_y());
}
}
TEST(IndexRectTest, ClampTo) {
struct Indices {
int left;
int right;
int top;
int bottom;
};
struct ClampToCase {
Indices first;
Indices second;
Indices expected;
bool valid;
};
auto clamp_to_cases = std::to_array<ClampToCase>({
{{0, 5, 0, 5}, {0, 5, 0, 5}, {0, 5, 0, 5}, true},
{{0, 10, 0, 10}, {0, 5, 0, 5}, {0, 5, 0, 5}, true},
{{0, 5, 0, 5}, {0, 10, 0, 10}, {0, 5, 0, 5}, true},
{{-10, 5, -10, 5}, {0, 10, 0, 10}, {0, 5, 0, 5}, true},
{{0, 5, 0, 5}, {10, 20, 10, 20}, {0, 0, 0, 0}, false},
});
for (size_t i = 0; i < std::size(clamp_to_cases); ++i) {
const ClampToCase& value = clamp_to_cases[i];
IndexRect first(value.first.left, value.first.right, value.first.top,
value.first.bottom);
IndexRect second(value.second.left, value.second.right, value.second.top,
value.second.bottom);
IndexRect expected(value.expected.left, value.expected.right,
value.expected.top, value.expected.bottom);
first.ClampTo(second);
EXPECT_EQ(value.valid, first.is_valid());
if (value.valid)
EXPECT_EQ(expected, first);
}
}
TEST(IndexRectTest, Contains) {
struct ContainsCase {
int left;
int right;
int top;
int bottom;
int index_x;
int index_y;
bool contained;
};
auto contains_cases = std::to_array<ContainsCase>({
{-10, 10, -10, 10, -10, -10, true},
{-10, 10, -10, 10, 0, 0, true},
{-10, 10, -10, 10, 10, 10, true},
{-10, 10, -10, 10, 5, 5, true},
{-10, 10, -10, 10, -5, -5, true},
{-10, 10, -10, 10, -20, -20, false},
{-10, 10, -10, 10, 20, 20, false},
{-10, 10, -10, 10, 20, 5, false},
{-10, 10, -10, 10, 5, 20, false},
});
for (size_t i = 0; i < std::size(contains_cases); ++i) {
const ContainsCase& value = contains_cases[i];
IndexRect rect(value.left, value.right, value.top, value.bottom);
EXPECT_EQ(value.contained, rect.Contains(value.index_x, value.index_y));
}
}
TEST(IndexRectTest, Equals) {
EXPECT_TRUE(IndexRect(0, 0, 0, 0) == IndexRect(0, 0, 0, 0));
EXPECT_FALSE(IndexRect(0, 0, 0, 0) == IndexRect(0, 0, 0, 1));
EXPECT_TRUE(IndexRect(0, 0, 0, 0) != IndexRect(0, 0, 0, 1));
EXPECT_FALSE(IndexRect(0, 0, 0, 0) != IndexRect(0, 0, 0, 0));
}
} // namespace cc
|