Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4156)

Unified Diff: cc/base/spiral_iterator_unittest.cc

Issue 2352393002: cc: Detach spiral iterator implementation to separate file. (Closed)
Patch Set: review comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/base/spiral_iterator.cc ('k') | cc/base/tiling_data.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/base/spiral_iterator_unittest.cc
diff --git a/cc/base/spiral_iterator_unittest.cc b/cc/base/spiral_iterator_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6bb17417a29a21981a69d5d0e68d77798cd9956a
--- /dev/null
+++ b/cc/base/spiral_iterator_unittest.cc
@@ -0,0 +1,678 @@
+// Copyright 2016 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 <stddef.h>
+
+#include <algorithm>
+#include <vector>
+
+#include "cc/base/tiling_data.h"
+#include "cc/test/geometry_test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cc {
+namespace {
+
+void TestSpiralIterate(int source_line_number,
+ const TilingData& tiling_data,
+ const gfx::Rect& consider,
+ const gfx::Rect& ignore,
+ const gfx::Rect& center,
+ const std::vector<std::pair<int, int>>& expected) {
+ std::vector<std::pair<int, int>> actual_forward;
+ for (TilingData::SpiralDifferenceIterator it(&tiling_data, consider, ignore,
+ center);
+ it; ++it) {
+ actual_forward.push_back(it.index());
+ }
+
+ EXPECT_EQ(expected.size(), actual_forward.size()) << "error from line "
+ << source_line_number;
+ for (size_t i = 0; i < std::min(expected.size(), actual_forward.size());
+ ++i) {
+ EXPECT_EQ(expected[i].first, actual_forward[i].first)
+ << "i: " << i << " error from line: " << source_line_number;
+ EXPECT_EQ(expected[i].second, actual_forward[i].second)
+ << "i: " << i << " error from line: " << source_line_number;
+ }
+
+ std::vector<std::pair<int, int>> actual_reverse;
+ for (TilingData::ReverseSpiralDifferenceIterator it(&tiling_data, consider,
+ ignore, center);
+ it; ++it) {
+ actual_reverse.push_back(it.index());
+ }
+
+ std::vector<std::pair<int, int>> reversed_expected = expected;
+ std::reverse(reversed_expected.begin(), reversed_expected.end());
+ EXPECT_EQ(reversed_expected.size(), actual_reverse.size())
+ << "error from line " << source_line_number;
+ for (size_t i = 0;
+ i < std::min(reversed_expected.size(), actual_reverse.size()); ++i) {
+ EXPECT_EQ(reversed_expected[i].first, actual_reverse[i].first)
+ << "i: " << i << " error from line: " << source_line_number;
+ EXPECT_EQ(reversed_expected[i].second, actual_reverse[i].second)
+ << "i: " << i << " error from line: " << source_line_number;
+ }
+}
+
+TEST(SpiralIteratorTest, NoIgnoreFullConsider) {
prashant.n 2016/09/23 12:11:24 How about moving this test code under function Exe
prashant.n 2016/09/23 13:52:17 I thought over this again. I guess we may not need
vmpstr 2016/09/23 21:05:34 Yeah I think we can just write a separate perftest
+ TilingData tiling_data(gfx::Size(10, 10), gfx::Size(30, 30), false);
+ gfx::Rect consider(30, 30);
+ gfx::Rect ignore;
+ std::vector<std::pair<int, int>> expected;
+
+ // Center is in the center of the tiling.
+ gfx::Rect center(15, 15, 1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ 4│ 3│ 2│
+ // ├───┼───┼───┤
+ // 1 │ 5│ *│ 1│
+ // ├───┼───┼───┤
+ // 2 │ 6│ 7│ 8│
+ // └───┴───┴───┘
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(2, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center is off to the right side of the tiling (and far away).
+ center = gfx::Rect(100, 15, 1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ 7│ 4│ 1│
+ // ├───┼───┼───┤
+ // 1 │ 8│ 5│ 2│ *
+ // ├───┼───┼───┤
+ // 2 │ 9│ 6│ 3│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 2));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center is the bottom right corner of the tiling.
+ center = gfx::Rect(25, 25, 1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ 6│ 5│ 4│
+ // ├───┼───┼───┤
+ // 1 │ 7│ 2│ 1│
+ // ├───┼───┼───┤
+ // 2 │ 8│ 3│ *│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center is off the top left side of the tiling.
+ center = gfx::Rect(-60, -50, 1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // * x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ 1│ 2│ 6│
+ // ├───┼───┼───┤
+ // 1 │ 3│ 4│ 5│
+ // ├───┼───┼───┤
+ // 2 │ 7│ 8│ 9│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(2, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Two tile center.
+ center = gfx::Rect(15, 15, 1, 10);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ 5│ 4│ 3│
+ // ├───┼───┼───┤
+ // 1 │ 6│ *│ 2│
+ // ├───┼───┼───┤
+ // 2 │ 7│ *│ 1│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(2, 2));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+}
+
+TEST(SpiralIteratorTest, SmallConsider) {
+ TilingData tiling_data(gfx::Size(10, 10), gfx::Size(50, 50), false);
+ gfx::Rect ignore;
+ std::vector<std::pair<int, int>> expected;
+ gfx::Rect center(15, 15, 1, 1);
+
+ // Consider is one cell.
+ gfx::Rect consider(1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y ┌───┬───┬───┬───┬───┐
+ // 0 │ 1│ │ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 1 │ │ *│ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 2 │ │ │ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 3 │ │ │ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 4 │ │ │ │ │ │
+ // └───┴───┴───┴───┴───┘
+ expected.push_back(std::make_pair(0, 0));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Consider is bottom right corner.
+ consider = gfx::Rect(25, 25, 10, 10);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y ┌───┬───┬───┬───┬───┐
+ // 0 │ │ │ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 1 │ │ *│ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 2 │ │ │ 1│ 2│ │
+ // ├───┼───┼───┼───┼───┤
+ // 3 │ │ │ 3│ 4│ │
+ // ├───┼───┼───┼───┼───┤
+ // 4 │ │ │ │ │ │
+ // └───┴───┴───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(2, 2));
+ expected.push_back(std::make_pair(3, 2));
+ expected.push_back(std::make_pair(2, 3));
+ expected.push_back(std::make_pair(3, 3));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Consider is one column.
+ consider = gfx::Rect(11, 0, 1, 100);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y ┌───┬───┬───┬───┬───┐
+ // 0 │ │ 2│ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 1 │ │ *│ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 2 │ │ 3│ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 3 │ │ 4│ │ │ │
+ // ├───┼───┼───┼───┼───┤
+ // 4 │ │ 5│ │ │ │
+ // └───┴───┴───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(1, 3));
+ expected.push_back(std::make_pair(1, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+}
+
+TEST(SpiralIteratorTest, HasIgnore) {
+ TilingData tiling_data(gfx::Size(10, 10), gfx::Size(50, 50), false);
+ gfx::Rect consider(50, 50);
+ std::vector<std::pair<int, int>> expected;
+ gfx::Rect center(15, 15, 1, 1);
+
+ // Full ignore.
+ gfx::Rect ignore(50, 50);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y ┌───┬───┬───┬───┬───┐
+ // 0 │ I│ I│ I│ I│ I│
+ // ├───┼───┼───┼───┼───┤
+ // 1 │ I│ *│ I│ I│ I│
+ // ├───┼───┼───┼───┼───┤
+ // 2 │ I│ I│ I│ I│ I│
+ // ├───┼───┼───┼───┼───┤
+ // 3 │ I│ I│ I│ I│ I│
+ // ├───┼───┼───┼───┼───┤
+ // 4 │ I│ I│ I│ I│ I│
+ // └───┴───┴───┴───┴───┘
+ expected.clear();
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // 3 column ignore.
+ ignore = gfx::Rect(15, 0, 20, 100);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y ┌───┬───┬───┬───┬───┐
+ // 0 │ 1│ I│ I│ I│ 8│
+ // ├───┼───┼───┼───┼───┤
+ // 1 │ 2│ *│ I│ I│ 7│
+ // ├───┼───┼───┼───┼───┤
+ // 2 │ 3│ I│ I│ I│ 6│
+ // ├───┼───┼───┼───┼───┤
+ // 3 │ 4│ I│ I│ I│ 5│
+ // ├───┼───┼───┼───┼───┤
+ // 4 │ 9│ I│ I│ I│ 10│
+ // └───┴───┴───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(0, 3));
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(4, 2));
+ expected.push_back(std::make_pair(4, 1));
+ expected.push_back(std::make_pair(4, 0));
+ expected.push_back(std::make_pair(0, 4));
+ expected.push_back(std::make_pair(4, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Ignore covers the top half.
+ ignore = gfx::Rect(50, 25);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y ┌───┬───┬───┬───┬───┐
+ // 0 │ I│ I│ I│ I│ I│
+ // ├───┼───┼───┼───┼───┤
+ // 1 │ I│ *│ I│ I│ I│
+ // ├───┼───┼───┼───┼───┤
+ // 2 │ I│ I│ I│ I│ I│
+ // ├───┼───┼───┼───┼───┤
+ // 3 │ 1│ 2│ 3│ 4│ 5│
+ // ├───┼───┼───┼───┼───┤
+ // 4 │ 6│ 7│ 8│ 9│ 10│
+ // └───┴───┴───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(0, 3));
+ expected.push_back(std::make_pair(1, 3));
+ expected.push_back(std::make_pair(2, 3));
+ expected.push_back(std::make_pair(3, 3));
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(0, 4));
+ expected.push_back(std::make_pair(1, 4));
+ expected.push_back(std::make_pair(2, 4));
+ expected.push_back(std::make_pair(3, 4));
+ expected.push_back(std::make_pair(4, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+}
+
+TEST(SpiralIteratorTest, RectangleCenter) {
+ TilingData tiling_data(gfx::Size(10, 10), gfx::Size(50, 50), false);
+ gfx::Rect consider(50, 50);
+ std::vector<std::pair<int, int>> expected;
+ gfx::Rect ignore;
+
+ // Two cell center
+ gfx::Rect center(25, 25, 1, 10);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y ┌───┬───┬───┬───┬───┐
+ // 0 │ 19│ 18│ 17│ 16│ 15│
+ // ├───┼───┼───┼───┼───┤
+ // 1 │ 20│ 5│ 4│ 3│ 14│
+ // ├───┼───┼───┼───┼───┤
+ // 2 │ 21│ 6│ *│ 2│ 13│
+ // ├───┼───┼───┼───┼───┤
+ // 3 │ 22│ 7│ *│ 1│ 12│
+ // ├───┼───┼───┼───┼───┤
+ // 4 │ 23│ 8│ 9│ 10│ 11│
+ // └───┴───┴───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(3, 3));
+ expected.push_back(std::make_pair(3, 2));
+ expected.push_back(std::make_pair(3, 1));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(1, 3));
+ expected.push_back(std::make_pair(1, 4));
+ expected.push_back(std::make_pair(2, 4));
+ expected.push_back(std::make_pair(3, 4));
+ expected.push_back(std::make_pair(4, 4));
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(4, 2));
+ expected.push_back(std::make_pair(4, 1));
+ expected.push_back(std::make_pair(4, 0));
+ expected.push_back(std::make_pair(3, 0));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(0, 3));
+ expected.push_back(std::make_pair(0, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Three by two center.
+ center = gfx::Rect(15, 25, 20, 10);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y ┌───┬───┬───┬───┬───┐
+ // 0 │ 19│ 18│ 17│ 16│ 15│
+ // ├───┼───┼───┼───┼───┤
+ // 1 │ 7│ 6│ 5│ 4│ 3│
+ // ├───┼───┼───┼───┼───┤
+ // 2 │ 8│ *│ *│ *│ 2│
+ // ├───┼───┼───┼───┼───┤
+ // 3 │ 9│ *│ *│ *│ 1│
+ // ├───┼───┼───┼───┼───┤
+ // 4 │ 10│ 11│ 12│ 13│ 14│
+ // └───┴───┴───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(4, 2));
+ expected.push_back(std::make_pair(4, 1));
+ expected.push_back(std::make_pair(3, 1));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(0, 3));
+ expected.push_back(std::make_pair(0, 4));
+ expected.push_back(std::make_pair(1, 4));
+ expected.push_back(std::make_pair(2, 4));
+ expected.push_back(std::make_pair(3, 4));
+ expected.push_back(std::make_pair(4, 4));
+ expected.push_back(std::make_pair(4, 0));
+ expected.push_back(std::make_pair(3, 0));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(0, 0));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Column center off the left side.
+ center = gfx::Rect(-50, 0, 30, 50);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y ┌───┬───┬───┬───┬───┐
+ // * 0 │ 5│ 10│ 15│ 20│ 25│
+ // ├───┼───┼───┼───┼───┤
+ // * 1 │ 4│ 9│ 14│ 19│ 24│
+ // ├───┼───┼───┼───┼───┤
+ // * 2 │ 3│ 8│ 13│ 18│ 23│
+ // ├───┼───┼───┼───┼───┤
+ // * 3 │ 2│ 7│ 12│ 17│ 22│
+ // ├───┼───┼───┼───┼───┤
+ // * 4 │ 1│ 6│ 11│ 16│ 21│
+ // └───┴───┴───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(0, 4));
+ expected.push_back(std::make_pair(0, 3));
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(1, 4));
+ expected.push_back(std::make_pair(1, 3));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(2, 4));
+ expected.push_back(std::make_pair(2, 3));
+ expected.push_back(std::make_pair(2, 2));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(3, 4));
+ expected.push_back(std::make_pair(3, 3));
+ expected.push_back(std::make_pair(3, 2));
+ expected.push_back(std::make_pair(3, 1));
+ expected.push_back(std::make_pair(3, 0));
+ expected.push_back(std::make_pair(4, 4));
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(4, 2));
+ expected.push_back(std::make_pair(4, 1));
+ expected.push_back(std::make_pair(4, 0));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+}
+
+TEST(SpiralIteratorTest, EdgeCases) {
+ TilingData tiling_data(gfx::Size(10, 10), gfx::Size(30, 30), false);
+ std::vector<std::pair<int, int>> expected;
+ gfx::Rect center;
+ gfx::Rect consider;
+ gfx::Rect ignore;
+
+ // Ignore contains, but is not equal to, consider and center.
+ ignore = gfx::Rect(15, 0, 20, 30);
+ consider = gfx::Rect(20, 10, 10, 20);
+ center = gfx::Rect(25, 0, 5, 5);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ │ I│ *│
+ // ├───┼───┼───┤
+ // 1 │ │ I│ I│
+ // ├───┼───┼───┤
+ // 2 │ │ I│ I│
+ // └───┴───┴───┘
+ expected.clear();
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center intersects with consider.
+ ignore = gfx::Rect();
+ center = gfx::Rect(0, 15, 30, 15);
+ consider = gfx::Rect(15, 30);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ 2│ 1│ │
+ // ├───┼───┼───┤
+ // 1 │ *│ *│ *│
+ // ├───┼───┼───┤
+ // 2 │ *│ *│ *│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(0, 0));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Consider and ignore are non-intersecting.
+ ignore = gfx::Rect(5, 30);
+ consider = gfx::Rect(25, 0, 5, 30);
+ center = gfx::Rect(15, 0, 1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ I│ *│ 1│
+ // ├───┼───┼───┤
+ // 1 │ I│ │ 2│
+ // ├───┼───┼───┤
+ // 2 │ I│ │ 3│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center intersects with ignore.
+ consider = gfx::Rect(30, 30);
+ center = gfx::Rect(15, 0, 1, 30);
+ ignore = gfx::Rect(0, 15, 30, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ 3│ *│ 2│
+ // ├───┼───┼───┤
+ // 1 │ I│ *│ I│
+ // ├───┼───┼───┤
+ // 2 │ 4│ *│ 1│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(2, 2));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center and ignore are the same.
+ consider = gfx::Rect(30, 30);
+ center = gfx::Rect(15, 0, 1, 30);
+ ignore = center;
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ 4│ *│ 3│
+ // ├───┼───┼───┤
+ // 1 │ 5│ *│ 2│
+ // ├───┼───┼───┤
+ // 2 │ 6│ *│ 1│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(2, 2));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Empty tiling data.
+ TilingData empty_data(gfx::Size(0, 0), gfx::Size(0, 0), false);
+
+ expected.clear();
+
+ TestSpiralIterate(__LINE__, empty_data, consider, ignore, center, expected);
+
+ // Empty consider.
+ ignore = gfx::Rect();
+ center = gfx::Rect(1, 1, 1, 1);
+ consider = gfx::Rect();
+
+ expected.clear();
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Empty center. Note: This arbitrarily puts the center to be off the top-left
+ // corner.
+ consider = gfx::Rect(30, 30);
+ ignore = gfx::Rect();
+ center = gfx::Rect();
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // 0 │ 1│ 2│ 6│
+ // ├───┼───┼───┤
+ // 1 │ 3│ 4│ 5│
+ // ├───┼───┼───┤
+ // 2 │ 7│ 8│ 9│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(2, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Every rect is empty.
+ ignore = gfx::Rect();
+ center = gfx::Rect();
+ consider = gfx::Rect();
+
+ expected.clear();
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center is just to the left of cover, and off of the tiling's left side.
+ consider = gfx::Rect(30, 30);
+ ignore = gfx::Rect();
+ center = gfx::Rect(-20, 0, 19, 30);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2
+ // y ┌───┬───┬───┐
+ // * 0 │ 3│ 6│ 9│
+ // ├───┼───┼───┤
+ // * 1 │ 2│ 5│ 8│
+ // ├───┼───┼───┤
+ // * 2 │ 1│ 4│ 7│
+ // └───┴───┴───┘
+ expected.clear();
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(2, 2));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 0));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+}
+
+} // namespace
+
+} // namespace cc
« no previous file with comments | « cc/base/spiral_iterator.cc ('k') | cc/base/tiling_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698