Index: cc/base/tiling_data_unittest.cc |
diff --git a/cc/base/tiling_data_unittest.cc b/cc/base/tiling_data_unittest.cc |
index d5b639f071c76b5316790f71098cdd3cc4a2ac0f..d165e0f01c56a88629e299d89a89ba775f9bd8ac 100644 |
--- a/cc/base/tiling_data_unittest.cc |
+++ b/cc/base/tiling_data_unittest.cc |
@@ -913,14 +913,13 @@ TEST(TilingDataTest, LargeBorders) { |
EXPECT_EQ(4, data.LastBorderTileYIndexFromSrcCoord(144)); |
} |
-void TestIterate( |
- const TilingData& data, |
- gfx::Rect rect, |
- int expect_left, |
- int expect_top, |
- int expect_right, |
- int expect_bottom) { |
- |
+void TestIterate(const TilingData& data, |
+ gfx::Rect rect, |
+ int expect_left, |
+ int expect_top, |
+ int expect_right, |
+ int expect_bottom, |
+ bool include_borders) { |
EXPECT_GE(expect_left, 0); |
EXPECT_GE(expect_top, 0); |
EXPECT_LT(expect_right, data.num_tiles_x()); |
@@ -929,7 +928,11 @@ void TestIterate( |
std::vector<std::pair<int, int> > original_expected; |
for (int x = 0; x < data.num_tiles_x(); ++x) { |
for (int y = 0; y < data.num_tiles_y(); ++y) { |
- gfx::Rect bounds = data.TileBoundsWithBorder(x, y); |
+ gfx::Rect bounds; |
+ if (include_borders) |
+ bounds = data.TileBoundsWithBorder(x, y); |
+ else |
+ bounds = data.TileBounds(x, y); |
if (x >= expect_left && x <= expect_right && |
y >= expect_top && y <= expect_bottom) { |
EXPECT_TRUE(bounds.Intersects(rect)); |
@@ -943,7 +946,8 @@ void TestIterate( |
// Verify with vanilla iterator. |
{ |
std::vector<std::pair<int, int> > expected = original_expected; |
- for (TilingData::Iterator iter(&data, rect); iter; ++iter) { |
+ for (TilingData::Iterator iter(&data, rect, include_borders); iter; |
+ ++iter) { |
bool found = false; |
for (size_t i = 0; i < expected.size(); ++i) { |
if (expected[i] == iter.index()) { |
@@ -959,7 +963,8 @@ void TestIterate( |
} |
// Make sure this also works with a difference iterator and an empty ignore. |
- { |
+ // The difference iterator always includes borders, so ignore it otherwise. |
+ if (include_borders) { |
std::vector<std::pair<int, int> > expected = original_expected; |
for (TilingData::DifferenceIterator iter(&data, rect, gfx::Rect()); |
iter; ++iter) { |
@@ -978,74 +983,136 @@ void TestIterate( |
} |
} |
+void TestIterateBorders(const TilingData& data, |
+ gfx::Rect rect, |
+ int expect_left, |
+ int expect_top, |
+ int expect_right, |
+ int expect_bottom) { |
+ TestIterate( |
+ data, rect, expect_left, expect_top, expect_right, expect_bottom, true); |
danakj
2014/03/17 23:46:07
nit: can you pass include_borders as a temp boolea
enne (OOO)
2014/03/17 23:53:09
Ok sure. I thought it was clear with both functio
|
+} |
+ |
+void TestIterateNoBorders(const TilingData& data, |
+ gfx::Rect rect, |
+ int expect_left, |
+ int expect_top, |
+ int expect_right, |
+ int expect_bottom) { |
+ TestIterate( |
+ data, rect, expect_left, expect_top, expect_right, expect_bottom, false); |
+} |
+ |
+void TestIterateAll(const TilingData& data, |
+ gfx::Rect rect, |
+ int expect_left, |
+ int expect_top, |
+ int expect_right, |
+ int expect_bottom) { |
+ TestIterateBorders( |
+ data, rect, expect_left, expect_top, expect_right, expect_bottom); |
+ TestIterateNoBorders( |
+ data, rect, expect_left, expect_top, expect_right, expect_bottom); |
+} |
+ |
TEST(TilingDataTest, IteratorNoBorderTexels) { |
TilingData data(gfx::Size(10, 10), gfx::Size(40, 25), false); |
// X border index by src coord: [0-10), [10-20), [20, 30), [30, 40) |
// Y border index by src coord: [0-10), [10-20), [20, 25) |
- TestIterate(data, gfx::Rect(0, 0, 40, 25), 0, 0, 3, 2); |
- TestIterate(data, gfx::Rect(15, 15, 8, 8), 1, 1, 2, 2); |
+ TestIterateAll(data, gfx::Rect(0, 0, 40, 25), 0, 0, 3, 2); |
+ TestIterateAll(data, gfx::Rect(15, 15, 8, 8), 1, 1, 2, 2); |
// Oversized. |
- TestIterate(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 3, 2); |
- TestIterate(data, gfx::Rect(-100, 20, 1000, 1), 0, 2, 3, 2); |
- TestIterate(data, gfx::Rect(29, -100, 31, 1000), 2, 0, 3, 2); |
+ TestIterateAll(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 3, 2); |
+ TestIterateAll(data, gfx::Rect(-100, 20, 1000, 1), 0, 2, 3, 2); |
+ TestIterateAll(data, gfx::Rect(29, -100, 31, 1000), 2, 0, 3, 2); |
// Nonintersecting. |
- TestIterate(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1); |
+ TestIterateAll(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1); |
} |
-TEST(TilingDataTest, IteratorOneBorderTexel) { |
+TEST(TilingDataTest, BordersIteratorOneBorderTexel) { |
TilingData data(gfx::Size(10, 20), gfx::Size(25, 45), true); |
// X border index by src coord: [0-10), [8-18), [16-25) |
// Y border index by src coord: [0-20), [18-38), [36-45) |
- TestIterate(data, gfx::Rect(0, 0, 25, 45), 0, 0, 2, 2); |
- TestIterate(data, gfx::Rect(18, 19, 3, 17), 2, 0, 2, 1); |
- TestIterate(data, gfx::Rect(10, 20, 6, 16), 1, 1, 1, 1); |
- TestIterate(data, gfx::Rect(9, 19, 8, 18), 0, 0, 2, 2); |
+ TestIterateBorders(data, gfx::Rect(0, 0, 25, 45), 0, 0, 2, 2); |
+ TestIterateBorders(data, gfx::Rect(18, 19, 3, 17), 2, 0, 2, 1); |
+ TestIterateBorders(data, gfx::Rect(10, 20, 6, 16), 1, 1, 1, 1); |
+ TestIterateBorders(data, gfx::Rect(9, 19, 8, 18), 0, 0, 2, 2); |
+ // Oversized. |
+ TestIterateBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 2); |
+ TestIterateBorders(data, gfx::Rect(-100, 20, 1000, 1), 0, 1, 2, 1); |
+ TestIterateBorders(data, gfx::Rect(18, -100, 6, 1000), 2, 0, 2, 2); |
+ // Nonintersecting. |
+ TestIterateBorders(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1); |
+} |
+TEST(TilingDataTest, NoBordersIteratorOneBorderTexel) { |
+ TilingData data(gfx::Size(10, 20), gfx::Size(25, 45), true); |
+ // X index by src coord: [0-9), [9-17), [17-25) |
+ // Y index by src coord: [0-19), [19-37), [37-45) |
+ TestIterateNoBorders(data, gfx::Rect(0, 0, 25, 45), 0, 0, 2, 2); |
+ TestIterateNoBorders(data, gfx::Rect(17, 19, 3, 18), 2, 1, 2, 1); |
+ TestIterateNoBorders(data, gfx::Rect(17, 19, 3, 19), 2, 1, 2, 2); |
+ TestIterateNoBorders(data, gfx::Rect(8, 18, 9, 19), 0, 0, 1, 1); |
+ TestIterateNoBorders(data, gfx::Rect(9, 19, 9, 19), 1, 1, 2, 2); |
// Oversized. |
- TestIterate(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 2); |
- TestIterate(data, gfx::Rect(-100, 20, 1000, 1), 0, 1, 2, 1); |
- TestIterate(data, gfx::Rect(18, -100, 6, 1000), 2, 0, 2, 2); |
+ TestIterateNoBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 2); |
+ TestIterateNoBorders(data, gfx::Rect(-100, 20, 1000, 1), 0, 1, 2, 1); |
+ TestIterateNoBorders(data, gfx::Rect(18, -100, 6, 1000), 2, 0, 2, 2); |
// Nonintersecting. |
- TestIterate(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1); |
+ TestIterateNoBorders(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1); |
} |
-TEST(TilingDataTest, IteratorManyBorderTexels) { |
+TEST(TilingDataTest, BordersIteratorManyBorderTexels) { |
TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20); |
// X border index by src coord: [0-50), [10-60), [20-65) |
// Y border index by src coord: [0-60), [20-80), [40-100), [60-110) |
- TestIterate(data, gfx::Rect(0, 0, 65, 110), 0, 0, 2, 3); |
- TestIterate(data, gfx::Rect(50, 60, 15, 65), 1, 1, 2, 3); |
- TestIterate(data, gfx::Rect(60, 30, 2, 10), 2, 0, 2, 1); |
+ TestIterateBorders(data, gfx::Rect(0, 0, 65, 110), 0, 0, 2, 3); |
+ TestIterateBorders(data, gfx::Rect(50, 60, 15, 65), 1, 1, 2, 3); |
+ TestIterateBorders(data, gfx::Rect(60, 30, 2, 10), 2, 0, 2, 1); |
+ // Oversized. |
+ TestIterateBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 3); |
+ TestIterateBorders(data, gfx::Rect(-100, 10, 1000, 10), 0, 0, 2, 0); |
+ TestIterateBorders(data, gfx::Rect(10, -100, 10, 1000), 0, 0, 1, 3); |
+ // Nonintersecting. |
+ TestIterateBorders(data, gfx::Rect(65, 110, 100, 100), 0, 0, -1, -1); |
+} |
+TEST(TilingDataTest, NoBordersIteratorManyBorderTexels) { |
+ TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20); |
+ // X index by src coord: [0-30), [30-40), [40, 65) |
+ // Y index by src coord: [0-40), [40-60), [60, 80), [80-110) |
+ TestIterateNoBorders(data, gfx::Rect(0, 0, 65, 110), 0, 0, 2, 3); |
+ TestIterateNoBorders(data, gfx::Rect(30, 40, 15, 65), 1, 1, 2, 3); |
+ TestIterateNoBorders(data, gfx::Rect(60, 20, 2, 21), 2, 0, 2, 1); |
// Oversized. |
- TestIterate(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 3); |
- TestIterate(data, gfx::Rect(-100, 10, 1000, 10), 0, 0, 2, 0); |
- TestIterate(data, gfx::Rect(10, -100, 10, 1000), 0, 0, 1, 3); |
+ TestIterateNoBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 3); |
+ TestIterateNoBorders(data, gfx::Rect(-100, 10, 1000, 10), 0, 0, 2, 0); |
+ TestIterateNoBorders(data, gfx::Rect(10, -100, 10, 1000), 0, 0, 0, 3); |
// Nonintersecting. |
- TestIterate(data, gfx::Rect(65, 110, 100, 100), 0, 0, -1, -1); |
+ TestIterateNoBorders(data, gfx::Rect(65, 110, 100, 100), 0, 0, -1, -1); |
} |
TEST(TilingDataTest, IteratorOneTile) { |
TilingData no_border(gfx::Size(1000, 1000), gfx::Size(30, 40), false); |
- TestIterate(no_border, gfx::Rect(0, 0, 30, 40), 0, 0, 0, 0); |
- TestIterate(no_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0); |
- TestIterate(no_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1); |
+ TestIterateAll(no_border, gfx::Rect(0, 0, 30, 40), 0, 0, 0, 0); |
+ TestIterateAll(no_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0); |
+ TestIterateAll(no_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1); |
TilingData one_border(gfx::Size(1000, 1000), gfx::Size(30, 40), true); |
- TestIterate(one_border, gfx::Rect(0, 0, 30, 40), 0, 0, 0, 0); |
- TestIterate(one_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0); |
- TestIterate(one_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1); |
+ TestIterateAll(one_border, gfx::Rect(0, 0, 30, 40), 0, 0, 0, 0); |
+ TestIterateAll(one_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0); |
+ TestIterateAll(one_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1); |
TilingData big_border(gfx::Size(1000, 1000), gfx::Size(30, 40), 50); |
- TestIterate(big_border, gfx::Rect(0, 0, 30, 40), 0, 0, 0, 0); |
- TestIterate(big_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0); |
- TestIterate(big_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1); |
+ TestIterateAll(big_border, gfx::Rect(0, 0, 30, 40), 0, 0, 0, 0); |
+ TestIterateAll(big_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0); |
+ TestIterateAll(big_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1); |
} |
TEST(TilingDataTest, IteratorNoTiles) { |
TilingData data(gfx::Size(100, 100), gfx::Size(), false); |
- TestIterate(data, gfx::Rect(0, 0, 100, 100), 0, 0, -1, -1); |
+ TestIterateAll(data, gfx::Rect(0, 0, 100, 100), 0, 0, -1, -1); |
} |
void TestDiff( |