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

Unified Diff: cc/base/tiling_data_unittest.cc

Issue 2067213002: cc: Implement tile iteration order based on pyramid sequence. [old] Base URL: https://chromium.googlesource.com/chromium/src.git@tiling_data_fix
Patch Set: spiral coverage sequence Created 4 years, 4 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
Index: cc/base/tiling_data_unittest.cc
diff --git a/cc/base/tiling_data_unittest.cc b/cc/base/tiling_data_unittest.cc
index 004db11c3e23f47b6119d3aca2d0cc82cf4ffff3..e8a7a0586958e613e9074685c61c512cd14ce75c 100644
--- a/cc/base/tiling_data_unittest.cc
+++ b/cc/base/tiling_data_unittest.cc
@@ -1443,7 +1443,7 @@ TEST(TilingDataTest, SpiralDifferenceIteratorNoIgnoreFullConsider) {
// x 0 1 2
// y.------
// 0| 7 4 1
- // 1| 8 5 2 *
+ // 1| 8 5 2 *
// 2| 9 6 3
expected.clear();
expected.push_back(std::make_pair(2, 0));
@@ -1485,19 +1485,19 @@ TEST(TilingDataTest, SpiralDifferenceIteratorNoIgnoreFullConsider) {
// 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
+ // 0| 1 4 9
+ // 1| 2 3 8
+ // 2| 5 6 7
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(1, 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));
+ expected.push_back(std::make_pair(2, 1));
+ expected.push_back(std::make_pair(2, 0));
TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
@@ -1568,11 +1568,11 @@ TEST(TilingDataTest, SpiralDifferenceIteratorSmallConsider) {
// Layout of the tiling data, and expected return order:
// x 0 1 2 3 4
// y.----------
- // 0| 2
+ // 0| 1
// 1| *
- // 2| 3
- // 3| 4
- // 4| 5
+ // 2| 2
+ // 3| 3
+ // 4| 4
expected.clear();
expected.push_back(std::make_pair(1, 0));
expected.push_back(std::make_pair(1, 2));
@@ -1592,13 +1592,13 @@ TEST(TilingDataTest, SpiralDifferenceIteratorHasIgnore) {
gfx::Rect ignore(50, 50);
// Layout of the tiling data, and expected return order:
- // x 0 1 2 3 4
- // y.----------
- // 0| . . . . .
- // 1| . * . . .
- // 2| . . . . .
- // 3| . . . . .
- // 4| . . . . .
+ // 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);
@@ -1607,15 +1607,14 @@ TEST(TilingDataTest, SpiralDifferenceIteratorHasIgnore) {
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 . . . 8
- // 1| 2 * . . 7
- // 2| 3 . . . 6
- // 3| 4 . . . 5
- // 4| 9 . . . 10
+ // 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));
@@ -1633,15 +1632,14 @@ TEST(TilingDataTest, SpiralDifferenceIteratorHasIgnore) {
ignore = gfx::Rect(50, 25);
// Layout of the tiling data, and expected return order:
- // x 0 1 2 3 4
- // y.----------
- // 0| . . . . .
- // 1| . * . . .
- // 2| . . . . .
- // 3| 1 2 3 4 5
- // 4| 6 7 8 9 10
+ // 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));
@@ -1666,15 +1664,14 @@ TEST(TilingDataTest, SpiralDifferenceIteratorRectangleCenter) {
gfx::Rect center(25, 25, 1, 10);
// Layout of the tiling data, and expected return order:
- // x 0 1 2 3 4
- // y.----------
- // 0| J I H G F
- // 1| K 5 4 3 E
- // 2| L 6 * 2 D
- // 3| M 7 * 1 C
- // 4| N 8 9 A B
+ // 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));
@@ -1705,15 +1702,14 @@ TEST(TilingDataTest, SpiralDifferenceIteratorRectangleCenter) {
center = gfx::Rect(15, 25, 20, 10);
// Layout of the tiling data, and expected return order:
- // x 0 1 2 3 4
- // y.----------
- // 0| J I H G F
- // 1| 7 6 5 4 3
- // 2| 8 * * * 2
- // 3| 9 * * * 1
- // 4| A B C D E
+ // 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));
@@ -1740,15 +1736,14 @@ TEST(TilingDataTest, SpiralDifferenceIteratorRectangleCenter) {
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 A F K P
- // * 1| 4 9 E J O
- // * 2| 3 8 D I N
- // * 3| 2 7 C H M
- // * 4| 1 6 B G L
+ // 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));
@@ -1793,9 +1788,9 @@ TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
// Layout of the tiling data, and expected return order:
// x 0 1 2
// y.------
- // 0| . *
- // 1| . .
- // 2| . .
+ // 0| I *
+ // 1| I I
+ // 2| I I
expected.clear();
TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
@@ -1812,7 +1807,6 @@ TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
// 1| * * *
// 2| * * *
expected.clear();
-
expected.push_back(std::make_pair(1, 0));
expected.push_back(std::make_pair(0, 0));
@@ -1826,11 +1820,10 @@ TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
// Layout of the tiling data, and expected return order:
// x 0 1 2
// y.------
- // 0| . * 1
- // 1| . 2
- // 2| . 3
+ // 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));
@@ -1846,10 +1839,9 @@ TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
// x 0 1 2
// y.------
// 0| 3 * 2
- // 1| . * .
+ // 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));
@@ -1869,7 +1861,6 @@ TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
// 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));
@@ -1906,7 +1897,6 @@ TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
// 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));
@@ -1925,6 +1915,7 @@ TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
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.
@@ -1933,13 +1924,12 @@ TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
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
+ // 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));
@@ -1951,6 +1941,790 @@ TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
expected.push_back(std::make_pair(2, 0));
TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Tiling is smaller than tile size and center rect is not intersecting to
+ // tiling rect.
+ TilingData smaller_tiling(gfx::Size(10, 10), gfx::Size(1, 1), false);
+ consider = gfx::Rect(10, 10);
+ ignore = gfx::Rect();
+ center = gfx::Rect(2, 2, 10, 10);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0
+ // y.---
+ // 0| 1
+ // | *
+ expected.clear();
+ expected.push_back(std::make_pair(0, 0));
+
+ TestSpiralIterate(__LINE__, smaller_tiling, consider, ignore, center,
+ expected);
+}
+
+TEST(TilingDataTest, SpiralDifferenceIteratorWideTilesNoIgnoreFullConsider) {
+ TilingData tiling_data(gfx::Size(20, 10), gfx::Size(100, 50), false);
+ gfx::Rect consider(100, 50);
+ gfx::Rect ignore;
+ std::vector<std::pair<int, int>> expected;
+
+ // Center is in the center of the tiling.
+ gfx::Rect center(50, 25, 1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 19 11 10 9 18
+ // 1| 20 4 3 2 17
+ // 2| 21 5 * 1 16
+ // 3| 22 6 7 8 15
+ // 4| 23 12 13 14 24
+ 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(2, 3));
+ expected.push_back(std::make_pair(3, 3));
+ 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(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, 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, 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));
+ expected.push_back(std::make_pair(4, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center is off to the right side of the tiling (and far away).
+ center = gfx::Rect(200, 25, 1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 21 16 11 6 1
+ // 1| 22 17 12 7 2
+ // 2| 23 18 13 8 3 *
+ // 3| 24 19 14 9 4
+ // 4| 25 20 15 10 5
+ expected.clear();
+ expected.push_back(std::make_pair(4, 0));
+ expected.push_back(std::make_pair(4, 1));
+ expected.push_back(std::make_pair(4, 2));
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(4, 4));
+ expected.push_back(std::make_pair(3, 0));
+ expected.push_back(std::make_pair(3, 1));
+ expected.push_back(std::make_pair(3, 2));
+ expected.push_back(std::make_pair(3, 3));
+ expected.push_back(std::make_pair(3, 4));
+ 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(2, 3));
+ expected.push_back(std::make_pair(2, 4));
+ 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(1, 3));
+ expected.push_back(std::make_pair(1, 4));
+ 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);
+
+ // Center is the bottom right corner of the tiling.
+ center = gfx::Rect(90, 45, 1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 20 15 14 13 12
+ // 1| 21 16 8 7 6
+ // 2| 22 17 9 5 4
+ // 3| 23 18 10 2 1
+ // 4| 24 19 11 3 *
+ expected.clear();
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(3, 3));
+ expected.push_back(std::make_pair(3, 4));
+ expected.push_back(std::make_pair(4, 2));
+ expected.push_back(std::make_pair(3, 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(2, 2));
+ expected.push_back(std::make_pair(2, 3));
+ expected.push_back(std::make_pair(2, 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(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(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);
+
+ // 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:
+ // Layout of the tiling data, and expected return order:
+ // *
+ //
+ //
+ //
+ //
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 1 2 20 21 24
+ // 1| 3 4 5 22 23
+ // 2| 6 7 8 9 25
+ // 3| 10 11 12 13 14
+ // 4| 15 16 17 18 19
+ 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(0, 2));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(2, 2));
+ expected.push_back(std::make_pair(3, 2));
+ 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));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(3, 0));
+ expected.push_back(std::make_pair(3, 1));
+ expected.push_back(std::make_pair(4, 1));
+ expected.push_back(std::make_pair(4, 0));
+ expected.push_back(std::make_pair(4, 2));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Two tile center.
+ center = gfx::Rect(50, 15, 1, 10);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 18 5 4 3 17
+ // 1| 19 6 * 2 16
+ // 2| 20 7 * 1 15
+ // 3| 21 8 9 10 14
+ // 4| 22 11 12 13 23
+ expected.clear();
+ 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(2, 0));
+ 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(1, 3));
+ expected.push_back(std::make_pair(2, 3));
+ expected.push_back(std::make_pair(3, 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, 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, 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));
+ expected.push_back(std::make_pair(4, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+}
+
+TEST(TilingDataTest, SpiralDifferenceIteratorWideTilesSmallConsider) {
+ TilingData tiling_data(gfx::Size(20, 10), gfx::Size(100, 50), false);
+ gfx::Rect ignore;
+ std::vector<std::pair<int, int>> expected;
+ gfx::Rect center(30, 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(70, 35, 20, 10);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0|
+ // 1| *
+ // 2|
+ // 3| 2 3
+ // 4| 1 4
+ expected.clear();
+ expected.push_back(std::make_pair(3, 4));
+ expected.push_back(std::make_pair(3, 3));
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(4, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Consider is one column.
+ consider = gfx::Rect(21, 0, 1, 100);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 1
+ // 1| *
+ // 2| 2
+ // 3| 3
+ // 4| 4
+ 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);
+
+ // Consider is four columns.
+ consider = gfx::Rect(80, 50);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 4 3 2 14
+ // 1| 5 * 1 13
+ // 2| 6 7 8 12
+ // 3| 9 10 11 19
+ // 4| 15 16 17 18
+ expected.clear();
+ 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));
+ 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, 2));
+ expected.push_back(std::make_pair(3, 1));
+ expected.push_back(std::make_pair(3, 0));
+ 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(3, 3));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+}
+
+TEST(TilingDataTest, SpiralDifferenceIteratorWideTilesHasIgnore) {
+ TilingData tiling_data(gfx::Size(20, 10), gfx::Size(100, 50), false);
+ gfx::Rect consider(100, 50);
+ std::vector<std::pair<int, int>> expected;
+ gfx::Rect center(30, 15, 1, 1);
+
+ // Full ignore.
+ gfx::Rect ignore(100, 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(30, 0, 40, 100);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 1 I I I 9
+ // 1| 2 * I I 8
+ // 2| 3 I I I 7
+ // 3| 4 I I I 6
+ // 4| 5 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(0, 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(4, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Ignore covers the top half.
+ ignore = gfx::Rect(100, 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 8 9
+ // 4| 4 5 6 7 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(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(3, 3));
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(4, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+}
+
+TEST(TilingDataTest, SpiralDifferenceIteratorWideTilesRectangleCenter) {
+ TilingData tiling_data(gfx::Size(20, 10), gfx::Size(100, 50), false);
+ gfx::Rect consider(100, 50);
+ std::vector<std::pair<int, int>> expected;
+ gfx::Rect ignore;
+
+ // Two cell center
+ gfx::Rect center(50, 25, 1, 10);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 19 13 12 11 18
+ // 1| 20 5 4 3 17
+ // 2| 21 6 * 2 16
+ // 3| 22 7 * 1 15
+ // 4| 23 8 9 10 14
+ 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(3, 0));
+ expected.push_back(std::make_pair(2, 0));
+ expected.push_back(std::make_pair(1, 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));
+ 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(30, 25, 40, 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(-100, 0, 60, 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(TilingDataTest, SpiralDifferenceIteratorWideTilesEdgeCases) {
+ TilingData tiling_data(gfx::Size(20, 10), gfx::Size(100, 50), 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(70, 0, 40, 50);
+ consider = gfx::Rect(80, 20, 20, 30);
+ center = gfx::Rect(90, 0, 5, 5);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| I *
+ // 1| I I
+ // 2| I I
+ // 3| I I
+ // 4| I I
+ expected.clear();
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center intersects with consider.
+ ignore = gfx::Rect();
+ center = gfx::Rect(0, 30, 100, 20);
+ consider = gfx::Rect(40, 50);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 6 5
+ // 1| 4 3
+ // 2| 2 1
+ // 3| * * * * *
+ // 4| * * * * *
+ expected.clear();
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(0, 1));
+ 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(30, 50);
+ consider = gfx::Rect(60, 0, 30, 50);
+ center = gfx::Rect(50, 0, 1, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| I I * 1 5
+ // 1| I I 2 4
+ // 2| I I 3 8
+ // 3| I I 6 7
+ // 4| I I 9 10
+ expected.clear();
+ expected.push_back(std::make_pair(3, 0));
+ expected.push_back(std::make_pair(3, 1));
+ expected.push_back(std::make_pair(3, 2));
+ expected.push_back(std::make_pair(4, 1));
+ expected.push_back(std::make_pair(4, 0));
+ expected.push_back(std::make_pair(3, 3));
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(4, 2));
+ expected.push_back(std::make_pair(3, 4));
+ expected.push_back(std::make_pair(4, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center intersects with ignore.
+ consider = gfx::Rect(100, 50);
+ center = gfx::Rect(50, 0, 1, 50);
+ ignore = gfx::Rect(0, 25, 100, 1);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 13 5 * 4 12
+ // 1| 14 6 * 3 11
+ // 2| I I * I I
+ // 3| 15 7 * 2 10
+ // 4| 16 8 * 1 9
+ expected.clear();
+ expected.push_back(std::make_pair(3, 4));
+ expected.push_back(std::make_pair(3, 3));
+ expected.push_back(std::make_pair(3, 1));
+ expected.push_back(std::make_pair(3, 0));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(1, 1));
+ expected.push_back(std::make_pair(1, 3));
+ expected.push_back(std::make_pair(1, 4));
+ expected.push_back(std::make_pair(4, 4));
+ expected.push_back(std::make_pair(4, 3));
+ expected.push_back(std::make_pair(4, 1));
+ expected.push_back(std::make_pair(4, 0));
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(0, 3));
+ expected.push_back(std::make_pair(0, 4));
+
+ TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
+
+ // Center and ignore are the same.
+ consider = gfx::Rect(100, 50);
+ center = gfx::Rect(50, 0, 1, 50);
+ ignore = center;
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 16 6 * 5 15
+ // 1| 17 7 * 4 14
+ // 2| 18 8 * 3 13
+ // 3| 19 9 * 2 12
+ // 4| 20 10 * 1 11
+ expected.clear();
+ 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(1, 0));
+ 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(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(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);
+
+ // 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(100, 50);
+ ignore = gfx::Rect();
+ center = gfx::Rect();
+
+ // Layout of the tiling data, and expected return order:
+ // x 0 1 2 3 4
+ // y.---------------
+ // 0| 1 3 11 19 24
+ // 1| 2 6 10 18 23
+ // 2| 4 5 16 17 22
+ // 3| 7 8 9 20 21
+ // 4| 12 13 14 15 25
+ expected.clear();
+ expected.push_back(std::make_pair(0, 0));
+ expected.push_back(std::make_pair(0, 1));
+ expected.push_back(std::make_pair(1, 0));
+ expected.push_back(std::make_pair(0, 2));
+ expected.push_back(std::make_pair(1, 2));
+ expected.push_back(std::make_pair(1, 1));
+ 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(2, 1));
+ expected.push_back(std::make_pair(2, 0));
+ 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(2, 2));
+ 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(3, 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(4, 4));
+
+ 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(100, 50);
+ ignore = gfx::Rect();
+ center = gfx::Rect(-40, 0, 39, 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);
+
+ // Tiling is smaller than tile size and center rect is not intersecting to
+ // tiling rect.
+ TilingData smaller_tiling(gfx::Size(20, 10), gfx::Size(1, 1), false);
+ consider = gfx::Rect(20, 10);
+ ignore = gfx::Rect();
+ center = gfx::Rect(2, 2, 20, 10);
+
+ // Layout of the tiling data, and expected return order:
+ // x 0
+ // y.---
+ // 0| 1
+ // | *
+ expected.clear();
+ expected.push_back(std::make_pair(0, 0));
+
+ TestSpiralIterate(__LINE__, smaller_tiling, consider, ignore, center,
+ expected);
}
} // namespace
« cc/base/pyramid_sequence.h ('K') | « cc/base/tiling_data.cc ('k') | cc/cc.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698