12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/tiling_data.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <algorithm>
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector>
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/geometry_test_utils.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint NumTiles(const gfx::Size& max_texture_size,
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch             const gfx::Size& tiling_size,
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch             bool has_border_texels) {
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int num_tiles = tiling.num_tiles_x() * tiling.num_tiles_y();
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Assert no overflow.
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_GE(num_tiles, 0);
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (num_tiles > 0)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(num_tiles / tiling.num_tiles_x(), tiling.num_tiles_y());
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return num_tiles;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint XIndex(const gfx::Size& max_texture_size,
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch           const gfx::Size& tiling_size,
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch           bool has_border_texels,
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch           int x_coord) {
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.TileXIndexFromSrcCoord(x_coord);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint YIndex(const gfx::Size& max_texture_size,
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch           const gfx::Size& tiling_size,
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch           bool has_border_texels,
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch           int y_coord) {
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.TileYIndexFromSrcCoord(y_coord);
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint MinBorderXIndex(const gfx::Size& max_texture_size,
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                    const gfx::Size& tiling_size,
480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                    bool has_border_texels,
490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                    int x_coord) {
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.FirstBorderTileXIndexFromSrcCoord(x_coord);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint MinBorderYIndex(const gfx::Size& max_texture_size,
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                    const gfx::Size& tiling_size,
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                    bool has_border_texels,
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                    int y_coord) {
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.FirstBorderTileYIndexFromSrcCoord(y_coord);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint MaxBorderXIndex(const gfx::Size& max_texture_size,
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                    const gfx::Size& tiling_size,
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                    bool has_border_texels,
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                    int x_coord) {
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.LastBorderTileXIndexFromSrcCoord(x_coord);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint MaxBorderYIndex(const gfx::Size& max_texture_size,
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                    const gfx::Size& tiling_size,
720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                    bool has_border_texels,
730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                    int y_coord) {
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.LastBorderTileYIndexFromSrcCoord(y_coord);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint PosX(const gfx::Size& max_texture_size,
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         const gfx::Size& tiling_size,
800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch         bool has_border_texels,
810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch         int x_index) {
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.TilePositionX(x_index);
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint PosY(const gfx::Size& max_texture_size,
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         const gfx::Size& tiling_size,
880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch         bool has_border_texels,
890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch         int y_index) {
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.TilePositionY(y_index);
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint SizeX(const gfx::Size& max_texture_size,
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          const gfx::Size& tiling_size,
960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          bool has_border_texels,
970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          int x_index) {
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.TileSizeX(x_index);
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint SizeY(const gfx::Size& max_texture_size,
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          const gfx::Size& tiling_size,
1040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          bool has_border_texels,
1050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          int y_index) {
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling(max_texture_size, tiling_size, has_border_texels);
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return tiling.TileSizeY(y_index);
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass TilingDataTest : public ::testing::TestWithParam<gfx::Point> {};
1110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
112116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, NumTiles_NoTiling) {
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(16, 16), false));
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(15, 15), true));
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(16, 16), true));
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(1, 16), false));
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(15, 15), gfx::Size(15, 15), true));
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(32, 16), gfx::Size(32, 16), false));
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(32, 16), gfx::Size(32, 16), true));
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, NumTiles_TilingNoBorders) {
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(0, 0), false));
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(4, 0), false));
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(0, 4), false));
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(4, 4), gfx::Size(4, 0), false));
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(4, 4), gfx::Size(0, 4), false));
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(1, 1), false));
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(1, 1), gfx::Size(1, 1), false));
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(1, 1), gfx::Size(1, 2), false));
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(1, 1), gfx::Size(2, 1), false));
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(1, 1), false));
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(1, 2), false));
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(2, 1), false));
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(2, 2), false));
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(3, 3), gfx::Size(3, 3), false));
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(1, 4), false));
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(2, 4), false));
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(3, 4), false));
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(4, 4), false));
143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(5, 4), false));
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(6, 4), false));
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(7, 4), false));
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(8, 4), false));
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(9, 4), false));
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(10, 4), false));
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(11, 4), false));
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(1, 5), false));
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(2, 5), false));
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(3, 5), false));
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(4, 5), false));
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(5, 5), false));
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(6, 5), false));
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(7, 5), false));
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(8, 5), false));
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(9, 5), false));
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(10, 5), false));
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(5, 5), gfx::Size(11, 5), false));
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(16, 16), false));
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(17, 17), gfx::Size(16, 16), false));
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, NumTiles(gfx::Size(15, 15), gfx::Size(16, 16), false));
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, NumTiles(gfx::Size(8, 8), gfx::Size(16, 16), false));
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(6, NumTiles(gfx::Size(8, 8), gfx::Size(17, 16), false));
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(8, NumTiles(gfx::Size(5, 8), gfx::Size(17, 16), false));
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, NumTiles_TilingWithBorders) {
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(0, 0), true));
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(4, 0), true));
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(0, 4), true));
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(4, 4), gfx::Size(4, 0), true));
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(4, 4), gfx::Size(0, 4), true));
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(1, 1), true));
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(1, 1), gfx::Size(1, 1), true));
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(1, 1), gfx::Size(1, 2), true));
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, NumTiles(gfx::Size(1, 1), gfx::Size(2, 1), true));
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(1, 1), true));
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(1, 2), true));
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(2, 1), true));
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(2, 2), true));
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(3, 3), gfx::Size(1, 3), true));
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(3, 3), gfx::Size(2, 3), true));
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(3, 3), gfx::Size(3, 3), true));
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(3, 3), gfx::Size(4, 3), true));
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(3, 3), gfx::Size(5, 3), true));
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, NumTiles(gfx::Size(3, 3), gfx::Size(6, 3), true));
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, NumTiles(gfx::Size(3, 3), gfx::Size(7, 3), true));
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(1, 4), true));
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(2, 4), true));
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(3, 4), true));
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(4, 4), true));
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(5, 4), true));
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(6, 4), true));
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(7, 4), true));
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(8, 4), true));
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, NumTiles(gfx::Size(4, 4), gfx::Size(9, 4), true));
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, NumTiles(gfx::Size(4, 4), gfx::Size(10, 4), true));
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, NumTiles(gfx::Size(4, 4), gfx::Size(11, 4), true));
207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(1, 5), true));
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(2, 5), true));
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(3, 5), true));
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(4, 5), true));
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(5, 5), true));
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(6, 5), true));
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(7, 5), true));
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(8, 5), true));
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(5, 5), gfx::Size(9, 5), true));
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(5, 5), gfx::Size(10, 5), true));
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, NumTiles(gfx::Size(5, 5), gfx::Size(11, 5), true));
219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(30, NumTiles(gfx::Size(8, 5), gfx::Size(16, 32), true));
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
223116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, TileXIndexFromSrcCoord) {
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(6, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 0));
258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 1));
259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 2));
260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 3));
261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 0));
270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 1));
271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 2));
272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 3));
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
275116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, FirstBorderTileXIndexFromSrcCoord) {
276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(6, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 0));
310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 1));
311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 2));
312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 3));
313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 0));
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 1));
323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 2));
324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 3));
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
327116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, LastBorderTileXIndexFromSrcCoord) {
328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(6, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 0));
362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 1));
363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 2));
364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 3));
365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 0));
374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 1));
375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 2));
376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 3));
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
379116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, TileYIndexFromSrcCoord) {
380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(6, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 0));
414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 1));
415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 2));
416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 3));
417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 0));
426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 1));
427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 2));
428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 3));
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
431116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, FirstBorderTileYIndexFromSrcCoord) {
432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(6, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 0));
466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 1));
467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 2));
468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 3));
469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 0));
478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 1));
479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 2));
480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 3));
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
483116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, LastBorderTileYIndexFromSrcCoord) {
484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(6, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 0));
518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 1));
519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 2));
520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 3));
521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 0));
530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 1));
531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 2));
532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 3));
5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
535116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, TileSizeX) {
536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(5, 5), false, 0));
537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(5, 5), true, 0));
538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(6, 6), false, 0));
540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeX(gfx::Size(5, 5), gfx::Size(6, 6), false, 1));
541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(6, 6), true, 0));
542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeX(gfx::Size(5, 5), gfx::Size(6, 6), true, 1));
543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(8, 8), false, 0));
545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(5, 5), gfx::Size(8, 8), false, 1));
546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(8, 8), true, 0));
547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(8, 8), true, 1));
548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), false, 0));
550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), false, 1));
551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), true, 0));
552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), true, 1));
553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), true, 2));
554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(11, 11), true, 2));
556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(5, 5), gfx::Size(12, 12), true, 2));
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(5, 9), gfx::Size(12, 17), true, 2));
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
561116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, TileSizeY) {
562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(5, 5), false, 0));
563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(5, 5), true, 0));
564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(6, 6), false, 0));
566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeY(gfx::Size(5, 5), gfx::Size(6, 6), false, 1));
567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(6, 6), true, 0));
568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeY(gfx::Size(5, 5), gfx::Size(6, 6), true, 1));
569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(8, 8), false, 0));
571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(5, 5), gfx::Size(8, 8), false, 1));
572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(8, 8), true, 0));
573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(8, 8), true, 1));
574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), false, 0));
576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), false, 1));
577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), true, 0));
578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), true, 1));
579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), true, 2));
580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(11, 11), true, 2));
582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(5, 5), gfx::Size(12, 12), true, 2));
5830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(9, 5), gfx::Size(17, 12), true, 2));
585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
587116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, TileSizeX_and_TilePositionX) {
5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Single tile cases:
589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(1, 1), false, 0));
590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(1, 1), false, 0));
591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(1, 100), false, 0));
592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(1, 100), false, 0));
593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(3, 1), false, 0));
594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(3, 1), false, 0));
595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(3, 100), false, 0));
596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(3, 100), false, 0));
597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(1, 1), true, 0));
598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(1, 1), true, 0));
599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(1, 100), true, 0));
600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(1, 100), true, 0));
601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(3, 1), true, 0));
602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(3, 1), true, 0));
603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(3, 100), true, 0));
604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(3, 100), true, 0));
6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Multiple tiles:
6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // no border
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // positions 0, 3
609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(3, 3), gfx::Size(6, 1), false));
610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), false, 0));
611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), false, 1));
612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(6, 1), false, 0));
613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, PosX(gfx::Size(3, 3), gfx::Size(6, 1), false, 1));
614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(6, 100), false, 0));
615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(6, 100), false, 1));
616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(6, 100), false, 0));
617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, PosX(gfx::Size(3, 3), gfx::Size(6, 100), false, 1));
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Multiple tiles:
6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // with border
6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // positions 0, 2, 3, 4
622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, NumTiles(gfx::Size(3, 3), gfx::Size(6, 1), true));
623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), true, 0));
624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), true, 1));
625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), true, 2));
626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), true, 3));
627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(6, 1), true, 0));
628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, PosX(gfx::Size(3, 3), gfx::Size(6, 1), true, 1));
629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, PosX(gfx::Size(3, 3), gfx::Size(6, 1), true, 2));
630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, PosX(gfx::Size(3, 3), gfx::Size(6, 1), true, 3));
631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeX(gfx::Size(3, 7), gfx::Size(6, 100), true, 0));
632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeX(gfx::Size(3, 7), gfx::Size(6, 100), true, 1));
633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeX(gfx::Size(3, 7), gfx::Size(6, 100), true, 2));
634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeX(gfx::Size(3, 7), gfx::Size(6, 100), true, 3));
635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosX(gfx::Size(3, 7), gfx::Size(6, 100), true, 0));
636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, PosX(gfx::Size(3, 7), gfx::Size(6, 100), true, 1));
637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, PosX(gfx::Size(3, 7), gfx::Size(6, 100), true, 2));
638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, PosX(gfx::Size(3, 7), gfx::Size(6, 100), true, 3));
6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
641116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, TileSizeY_and_TilePositionY) {
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Single tile cases:
643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(1, 1), false, 0));
644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 1), false, 0));
645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(100, 1), false, 0));
646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 1), false, 0));
647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(1, 3), false, 0));
648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 3), false, 0));
649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(100, 3), false, 0));
650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 3), false, 0));
651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(1, 1), true, 0));
652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 1), true, 0));
653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(100, 1), true, 0));
654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 1), true, 0));
655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(1, 3), true, 0));
656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 3), true, 0));
657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(100, 3), true, 0));
658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 3), true, 0));
6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Multiple tiles:
6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // no border
6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // positions 0, 3
663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, NumTiles(gfx::Size(3, 3), gfx::Size(1, 6), false));
664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), false, 0));
665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), false, 1));
666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 6), false, 0));
667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, PosY(gfx::Size(3, 3), gfx::Size(1, 6), false, 1));
668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(100, 6), false, 0));
669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(100, 6), false, 1));
670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 6), false, 0));
671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, PosY(gfx::Size(3, 3), gfx::Size(100, 6), false, 1));
6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Multiple tiles:
6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // with border
6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // positions 0, 2, 3, 4
676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, NumTiles(gfx::Size(3, 3), gfx::Size(1, 6), true));
677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), true, 0));
678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), true, 1));
679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), true, 2));
680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), true, 3));
681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 6), true, 0));
682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, PosY(gfx::Size(3, 3), gfx::Size(1, 6), true, 1));
683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, PosY(gfx::Size(3, 3), gfx::Size(1, 6), true, 2));
684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, PosY(gfx::Size(3, 3), gfx::Size(1, 6), true, 3));
685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeY(gfx::Size(7, 3), gfx::Size(100, 6), true, 0));
686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeY(gfx::Size(7, 3), gfx::Size(100, 6), true, 1));
687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, SizeY(gfx::Size(7, 3), gfx::Size(100, 6), true, 2));
688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, SizeY(gfx::Size(7, 3), gfx::Size(100, 6), true, 3));
689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, PosY(gfx::Size(7, 3), gfx::Size(100, 6), true, 0));
690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, PosY(gfx::Size(7, 3), gfx::Size(100, 6), true, 1));
691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, PosY(gfx::Size(7, 3), gfx::Size(100, 6), true, 2));
692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, PosY(gfx::Size(7, 3), gfx::Size(100, 6), true, 3));
6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
695116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, SetTotalSize) {
696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(5, 5), gfx::Size(5, 5), false);
697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, data.tiling_size().width());
698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, data.tiling_size().height());
6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, data.num_tiles_x());
7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.TileSizeX(0));
7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, data.num_tiles_y());
7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.TileSizeY(0));
7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  data.SetTilingSize(gfx::Size(6, 5));
705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(6, data.tiling_size().width());
706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, data.tiling_size().height());
7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, data.num_tiles_x());
7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.TileSizeX(0));
7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, data.TileSizeX(1));
7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, data.num_tiles_y());
7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.TileSizeY(0));
7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  data.SetTilingSize(gfx::Size(5, 12));
714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(5, data.tiling_size().width());
715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(12, data.tiling_size().height());
7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, data.num_tiles_x());
7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.TileSizeX(0));
7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(3, data.num_tiles_y());
7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.TileSizeY(0));
7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.TileSizeY(1));
7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, data.TileSizeY(2));
7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
724116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, SetMaxTextureSizeNoBorders) {
725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(8, 8), gfx::Size(16, 32), false);
7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, data.num_tiles_x());
7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(4, data.num_tiles_y());
7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetMaxTextureSize(gfx::Size(32, 32));
7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Size(32, 32), data.max_texture_size());
7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, data.num_tiles_x());
7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, data.num_tiles_y());
7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetMaxTextureSize(gfx::Size(2, 2));
7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Size(2, 2), data.max_texture_size());
7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(8, data.num_tiles_x());
7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(16, data.num_tiles_y());
7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetMaxTextureSize(gfx::Size(5, 5));
7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Size(5, 5), data.max_texture_size());
7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(4, data.num_tiles_x());
7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(7, data.num_tiles_y());
7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetMaxTextureSize(gfx::Size(8, 5));
7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Size(8, 5), data.max_texture_size());
7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, data.num_tiles_x());
7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(7, data.num_tiles_y());
7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
750116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, SetMaxTextureSizeBorders) {
751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(8, 8), gfx::Size(16, 32), true);
7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(3, data.num_tiles_x());
7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.num_tiles_y());
7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetMaxTextureSize(gfx::Size(32, 32));
7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Size(32, 32), data.max_texture_size());
7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, data.num_tiles_x());
7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, data.num_tiles_y());
7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetMaxTextureSize(gfx::Size(2, 2));
7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Size(2, 2), data.max_texture_size());
7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(0, data.num_tiles_x());
7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(0, data.num_tiles_y());
7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetMaxTextureSize(gfx::Size(5, 5));
7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Size(5, 5), data.max_texture_size());
7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.num_tiles_x());
7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(10, data.num_tiles_y());
7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetMaxTextureSize(gfx::Size(8, 5));
7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(gfx::Size(8, 5), data.max_texture_size());
7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(3, data.num_tiles_x());
7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(10, data.num_tiles_y());
7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(TilingDataTest, ExpandRectIgnoringBordersToTileBoundsEmpty) {
777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData empty_total_size(gfx::Size(0, 0), gfx::Size(8, 8), true);
778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(
779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      gfx::Rect(),
7801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      empty_total_size.ExpandRectIgnoringBordersToTileBounds(gfx::Rect()));
7811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(gfx::Rect(),
7821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 empty_total_size.ExpandRectIgnoringBordersToTileBounds(
7831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     gfx::Rect(100, 100, 100, 100)));
7841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(gfx::Rect(),
7851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 empty_total_size.ExpandRectIgnoringBordersToTileBounds(
7861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     gfx::Rect(100, 100)));
787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData empty_max_texture_size(gfx::Size(8, 8), gfx::Size(0, 0), true);
7891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(gfx::Rect(),
7901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 empty_max_texture_size.ExpandRectIgnoringBordersToTileBounds(
7911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     gfx::Rect()));
7921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(gfx::Rect(),
7931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 empty_max_texture_size.ExpandRectIgnoringBordersToTileBounds(
7941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     gfx::Rect(100, 100, 100, 100)));
7951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(gfx::Rect(),
7961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 empty_max_texture_size.ExpandRectIgnoringBordersToTileBounds(
7971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     gfx::Rect(100, 100)));
7980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
7990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(TilingDataTest, ExpandRectIgnoringBordersToTileBounds) {
801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(4, 4), gfx::Size(16, 32), true);
8020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Small rect at origin rounds up to tile 0, 0.
804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect at_origin_src(1, 1);
8051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::Rect at_origin_result(data.TileBounds(0, 0));
8060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_NE(at_origin_src, at_origin_result);
8071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(at_origin_result,
8081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 data.ExpandRectIgnoringBordersToTileBounds(at_origin_src));
8090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Arbitrary internal rect.
811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect rect_src(6, 6, 1, 3);
8120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Tile 2, 2 => gfx::Rect(4, 4, 4, 4)
813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Tile 2, 3 => gfx::Rect(4, 6, 4, 4)
8141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::Rect rect_result(
8151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      gfx::UnionRects(data.TileBounds(2, 2), data.TileBounds(2, 3)));
8160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_NE(rect_src, rect_result);
8171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(rect_result,
8181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 data.ExpandRectIgnoringBordersToTileBounds(rect_src));
8190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // On tile bounds does not round up to next tile (ignores the border).
8210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  gfx::Rect border_rect_src(
8220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      gfx::UnionRects(data.TileBounds(1, 2), data.TileBounds(3, 4)));
8231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::Rect border_rect_result(
8241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      gfx::UnionRects(data.TileBounds(1, 2), data.TileBounds(3, 4)));
8251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(border_rect_result,
8261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 data.ExpandRectIgnoringBordersToTileBounds(border_rect_src));
8270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Equal to tiling rect.
829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(data.tiling_size()),
8301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 data.ExpandRectIgnoringBordersToTileBounds(
831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                     gfx::Rect(data.tiling_size())));
8320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Containing, but larger than tiling rect.
8341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(
8351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      gfx::Rect(data.tiling_size()),
8361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data.ExpandRectIgnoringBordersToTileBounds(gfx::Rect(100, 100)));
8370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
8380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Non-intersecting with tiling rect.
839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect non_intersect(200, 200, 100, 100);
840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(non_intersect.Intersects(gfx::Rect(data.tiling_size())));
8411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_RECT_EQ(gfx::Rect(),
8421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 data.ExpandRectIgnoringBordersToTileBounds(non_intersect));
843f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data2(gfx::Size(8, 8), gfx::Size(32, 64), true);
845f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
846f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Inside other tile border texels doesn't include other tiles.
847f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Rect inner_rect_src(data2.TileBounds(1, 1));
848f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  inner_rect_src.Inset(data2.border_texels(), data.border_texels());
8491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::Rect inner_rect_result(data2.TileBounds(1, 1));
850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect expanded =
8511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      data2.ExpandRectIgnoringBordersToTileBounds(inner_rect_src);
852f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(inner_rect_result.ToString(), expanded.ToString());
853f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
854f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
855116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, ExpandRectToTileBounds) {
856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(4, 4), gfx::Size(16, 32), true);
857f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
858f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Small rect at origin rounds up to tile 0, 0.
859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect at_origin_src(1, 1);
860f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Rect at_origin_result(data.TileBounds(0, 0));
861f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_NE(at_origin_src, at_origin_result);
862f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_RECT_EQ(at_origin_result, data.ExpandRectToTileBounds(at_origin_src));
863f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
864f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Arbitrary internal rect.
865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect rect_src(6, 6, 1, 3);
866f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Tile 2, 2 => gfx::Rect(4, 4, 4, 4)
867f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Tile 3, 4 => gfx::Rect(6, 8, 4, 4)
868f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Rect rect_result(
869f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      gfx::UnionRects(data.TileBounds(2, 2), data.TileBounds(3, 4)));
870f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_NE(rect_src, rect_result);
871f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_RECT_EQ(rect_result, data.ExpandRectToTileBounds(rect_src));
872f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
873f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // On tile bounds rounds up to next tile (since border overlaps).
874f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Rect border_rect_src(
875f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      gfx::UnionRects(data.TileBounds(1, 2), data.TileBounds(3, 4)));
876f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Rect border_rect_result(
877f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      gfx::UnionRects(data.TileBounds(0, 1), data.TileBounds(4, 5)));
878f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_RECT_EQ(border_rect_result,
879f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                 data.ExpandRectToTileBounds(border_rect_src));
880f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
881f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Equal to tiling rect.
882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(data.tiling_size()),
883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                 data.ExpandRectToTileBounds(gfx::Rect(data.tiling_size())));
884f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
885f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Containing, but larger than tiling rect.
886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(data.tiling_size()),
887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                 data.ExpandRectToTileBounds(gfx::Rect(100, 100)));
888f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
889f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Non-intersecting with tiling rect.
890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect non_intersect(200, 200, 100, 100);
891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(non_intersect.Intersects(gfx::Rect(data.tiling_size())));
892f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_RECT_EQ(gfx::Rect(), data.ExpandRectToTileBounds(non_intersect));
893f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data2(gfx::Size(8, 8), gfx::Size(32, 64), true);
895f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
896f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Inside other tile border texels doesn't include other tiles.
897f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Rect inner_rect_src(data2.TileBounds(1, 1));
898f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  inner_rect_src.Inset(data2.border_texels(), data.border_texels());
899f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Rect inner_rect_result(data2.TileBounds(1, 1));
900f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Rect expanded = data2.ExpandRectToTileBounds(inner_rect_src);
901f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(inner_rect_result.ToString(), expanded.ToString());
9020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
9030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
904116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, Assignment) {
9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  {
906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    TilingData source(gfx::Size(8, 8), gfx::Size(16, 32), true);
9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TilingData dest = source;
9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(source.border_texels(), dest.border_texels());
9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(source.max_texture_size(), dest.max_texture_size());
9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(source.num_tiles_x(), dest.num_tiles_x());
9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(source.num_tiles_y(), dest.num_tiles_y());
912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(source.tiling_size(), dest.tiling_size());
9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  {
915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    TilingData source(gfx::Size(7, 3), gfx::Size(6, 100), false);
9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TilingData dest(source);
9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(source.border_texels(), dest.border_texels());
9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(source.max_texture_size(), dest.max_texture_size());
9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(source.num_tiles_x(), dest.num_tiles_x());
9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(source.num_tiles_y(), dest.num_tiles_y());
921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    EXPECT_EQ(source.tiling_size(), dest.tiling_size());
9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
925116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, SetBorderTexels) {
926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(8, 8), gfx::Size(16, 32), false);
9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, data.num_tiles_x());
9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(4, data.num_tiles_y());
9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetHasBorderTexels(true);
9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(3, data.num_tiles_x());
9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.num_tiles_y());
9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  data.SetHasBorderTexels(false);
9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, data.num_tiles_x());
9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(4, data.num_tiles_y());
9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
939116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, LargeBorders) {
940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(100, 80), gfx::Size(200, 145), 30);
9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(30, data.border_texels());
9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(70, data.TileSizeX(0));
9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(40, data.TileSizeX(1));
9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(40, data.TileSizeX(2));
9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(50, data.TileSizeX(3));
9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(4, data.num_tiles_x());
9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(50, data.TileSizeY(0));
9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(20, data.TileSizeY(1));
9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(20, data.TileSizeY(2));
9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(20, data.TileSizeY(3));
9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(35, data.TileSizeY(4));
9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(5, data.num_tiles_y());
9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(70, 50), data.TileBounds(0, 0));
957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(70, 50, 40, 20), data.TileBounds(1, 1));
958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(110, 110, 40, 35), data.TileBounds(2, 4));
959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(150, 70, 50, 20), data.TileBounds(3, 2));
960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(150, 110, 50, 35), data.TileBounds(3, 4));
961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(100, 80), data.TileBoundsWithBorder(0, 0));
963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(40, 20, 100, 80), data.TileBoundsWithBorder(1, 1));
964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(80, 80, 100, 65), data.TileBoundsWithBorder(2, 4));
965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(120, 40, 80, 80), data.TileBoundsWithBorder(3, 2));
966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_RECT_EQ(gfx::Rect(120, 80, 80, 65), data.TileBoundsWithBorder(3, 4));
967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.TileXIndexFromSrcCoord(0));
969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.TileXIndexFromSrcCoord(69));
970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.TileXIndexFromSrcCoord(70));
971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.TileXIndexFromSrcCoord(109));
972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.TileXIndexFromSrcCoord(110));
973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.TileXIndexFromSrcCoord(149));
974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.TileXIndexFromSrcCoord(150));
975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.TileXIndexFromSrcCoord(199));
976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.TileYIndexFromSrcCoord(0));
978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.TileYIndexFromSrcCoord(49));
979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.TileYIndexFromSrcCoord(50));
980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.TileYIndexFromSrcCoord(69));
981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.TileYIndexFromSrcCoord(70));
982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.TileYIndexFromSrcCoord(89));
983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.TileYIndexFromSrcCoord(90));
984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.TileYIndexFromSrcCoord(109));
985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, data.TileYIndexFromSrcCoord(110));
986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, data.TileYIndexFromSrcCoord(144));
987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.FirstBorderTileXIndexFromSrcCoord(0));
989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.FirstBorderTileXIndexFromSrcCoord(99));
990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.FirstBorderTileXIndexFromSrcCoord(100));
991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.FirstBorderTileXIndexFromSrcCoord(139));
992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.FirstBorderTileXIndexFromSrcCoord(140));
993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.FirstBorderTileXIndexFromSrcCoord(179));
994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.FirstBorderTileXIndexFromSrcCoord(180));
995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.FirstBorderTileXIndexFromSrcCoord(199));
996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.FirstBorderTileYIndexFromSrcCoord(0));
998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.FirstBorderTileYIndexFromSrcCoord(79));
999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.FirstBorderTileYIndexFromSrcCoord(80));
1000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.FirstBorderTileYIndexFromSrcCoord(99));
1001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.FirstBorderTileYIndexFromSrcCoord(100));
1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.FirstBorderTileYIndexFromSrcCoord(119));
1003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.FirstBorderTileYIndexFromSrcCoord(120));
1004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.FirstBorderTileYIndexFromSrcCoord(139));
1005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, data.FirstBorderTileYIndexFromSrcCoord(140));
1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, data.FirstBorderTileYIndexFromSrcCoord(144));
1007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.LastBorderTileXIndexFromSrcCoord(0));
1009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.LastBorderTileXIndexFromSrcCoord(39));
1010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.LastBorderTileXIndexFromSrcCoord(40));
1011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.LastBorderTileXIndexFromSrcCoord(79));
1012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.LastBorderTileXIndexFromSrcCoord(80));
1013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.LastBorderTileXIndexFromSrcCoord(119));
1014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.LastBorderTileXIndexFromSrcCoord(120));
1015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.LastBorderTileXIndexFromSrcCoord(199));
1016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.LastBorderTileYIndexFromSrcCoord(0));
1018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0, data.LastBorderTileYIndexFromSrcCoord(19));
1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.LastBorderTileYIndexFromSrcCoord(20));
1020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1, data.LastBorderTileYIndexFromSrcCoord(39));
1021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.LastBorderTileYIndexFromSrcCoord(40));
1022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2, data.LastBorderTileYIndexFromSrcCoord(59));
1023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.LastBorderTileYIndexFromSrcCoord(60));
1024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(3, data.LastBorderTileYIndexFromSrcCoord(79));
1025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, data.LastBorderTileYIndexFromSrcCoord(80));
1026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(4, data.LastBorderTileYIndexFromSrcCoord(144));
10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void TestIterate(const TilingData& data,
103023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                 gfx::Rect rect,
103123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                 int expect_left,
103223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                 int expect_top,
103323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                 int expect_right,
103423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                 int expect_bottom,
103523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                 bool include_borders) {
10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_GE(expect_left, 0);
10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_GE(expect_top, 0);
10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_LT(expect_right, data.num_tiles_x());
10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_LT(expect_bottom, data.num_tiles_y());
10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<std::pair<int, int> > original_expected;
10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (int x = 0; x < data.num_tiles_x(); ++x) {
10432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for (int y = 0; y < data.num_tiles_y(); ++y) {
104423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      gfx::Rect bounds;
104523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      if (include_borders)
104623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        bounds = data.TileBoundsWithBorder(x, y);
104723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      else
104823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        bounds = data.TileBounds(x, y);
10492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (x >= expect_left && x <= expect_right &&
10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          y >= expect_top && y <= expect_bottom) {
10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        EXPECT_TRUE(bounds.Intersects(rect));
10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        original_expected.push_back(std::make_pair(x, y));
10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      } else {
10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        EXPECT_FALSE(bounds.Intersects(rect));
10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Verify with vanilla iterator.
10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  {
10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::vector<std::pair<int, int> > expected = original_expected;
106223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    for (TilingData::Iterator iter(&data, rect, include_borders); iter;
106323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)         ++iter) {
10642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool found = false;
10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      for (size_t i = 0; i < expected.size(); ++i) {
10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (expected[i] == iter.index()) {
10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          expected[i] = expected.back();
10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          expected.pop_back();
10692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          found = true;
10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          break;
10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
10722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      EXPECT_TRUE(found);
10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1075c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(0u, expected.size());
10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
10772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Make sure this also works with a difference iterator and an empty ignore.
10791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The difference iterator never includes borders, so ignore it otherwise.
10801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!include_borders) {
10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::vector<std::pair<int, int> > expected = original_expected;
10821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for (TilingData::DifferenceIterator iter(&data, rect, gfx::Rect()); iter;
10831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         ++iter) {
10842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool found = false;
10852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      for (size_t i = 0; i < expected.size(); ++i) {
10862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (expected[i] == iter.index()) {
10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          expected[i] = expected.back();
10882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          expected.pop_back();
10892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          found = true;
10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          break;
10912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      EXPECT_TRUE(found);
10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1095c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(0u, expected.size());
10962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
10972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
109923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void TestIterateBorders(const TilingData& data,
110023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                        gfx::Rect rect,
110123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                        int expect_left,
110223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                        int expect_top,
110323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                        int expect_right,
110423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                        int expect_bottom) {
110523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  bool include_borders = true;
110623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  TestIterate(data,
110723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              rect,
110823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              expect_left,
110923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              expect_top,
111023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              expect_right,
111123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              expect_bottom,
111223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              include_borders);
111323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
111423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
111523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void TestIterateNoBorders(const TilingData& data,
111623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                          gfx::Rect rect,
111723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                          int expect_left,
111823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                          int expect_top,
111923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                          int expect_right,
112023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                          int expect_bottom) {
112123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  bool include_borders = false;
112223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  TestIterate(data,
112323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              rect,
112423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              expect_left,
112523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              expect_top,
112623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              expect_right,
112723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              expect_bottom,
112823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)              include_borders);
112923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
113023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
113123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void TestIterateAll(const TilingData& data,
113223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                    gfx::Rect rect,
113323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                    int expect_left,
113423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                    int expect_top,
113523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                    int expect_right,
113623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                    int expect_bottom) {
113723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  TestIterateBorders(
113823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      data, rect, expect_left, expect_top, expect_right, expect_bottom);
113923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  TestIterateNoBorders(
114023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      data, rect, expect_left, expect_top, expect_right, expect_bottom);
114123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
114223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1143116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, IteratorNoBorderTexels) {
1144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(10, 10), gfx::Size(40, 25), false);
11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // X border index by src coord: [0-10), [10-20), [20, 30), [30, 40)
11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Y border index by src coord: [0-10), [10-20), [20, 25)
1147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(data, gfx::Rect(40, 25), 0, 0, 3, 2);
1148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(data, gfx::Rect(15, 15, 8, 8), 1, 1, 2, 2);
11492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Oversized.
1151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 3, 2);
1152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(data, gfx::Rect(-100, 20, 1000, 1), 0, 2, 3, 2);
1153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(data, gfx::Rect(29, -100, 31, 1000), 2, 0, 3, 2);
11542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Nonintersecting.
1155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1);
11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1158116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, BordersIteratorOneBorderTexel) {
1159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(10, 20), gfx::Size(25, 45), true);
11602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // X border index by src coord: [0-10), [8-18), [16-25)
11612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Y border index by src coord: [0-20), [18-38), [36-45)
1162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(25, 45), 0, 0, 2, 2);
1163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(18, 19, 3, 17), 2, 0, 2, 1);
1164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(10, 20, 6, 16), 1, 1, 1, 1);
1165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(9, 19, 8, 18), 0, 0, 2, 2);
116623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Oversized.
1167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 2);
1168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(-100, 20, 1000, 1), 0, 1, 2, 1);
1169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(18, -100, 6, 1000), 2, 0, 2, 2);
117023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Nonintersecting.
1171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1);
117223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
11732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1174116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, NoBordersIteratorOneBorderTexel) {
1175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(10, 20), gfx::Size(25, 45), true);
117623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // X index by src coord: [0-9), [9-17), [17-25)
117723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Y index by src coord: [0-19), [19-37), [37-45)
1178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(25, 45), 0, 0, 2, 2);
1179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(17, 19, 3, 18), 2, 1, 2, 1);
1180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(17, 19, 3, 19), 2, 1, 2, 2);
1181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(8, 18, 9, 19), 0, 0, 1, 1);
1182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(9, 19, 9, 19), 1, 1, 2, 2);
11832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Oversized.
1184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 2);
1185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(-100, 20, 1000, 1), 0, 1, 2, 1);
1186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(18, -100, 6, 1000), 2, 0, 2, 2);
11872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Nonintersecting.
1188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1);
11892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1191116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, BordersIteratorManyBorderTexels) {
1192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20);
11932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // X border index by src coord: [0-50), [10-60), [20-65)
11942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Y border index by src coord: [0-60), [20-80), [40-100), [60-110)
1195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(65, 110), 0, 0, 2, 3);
1196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(50, 60, 15, 65), 1, 1, 2, 3);
1197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(60, 30, 2, 10), 2, 0, 2, 1);
119823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Oversized.
1199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 3);
1200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(-100, 10, 1000, 10), 0, 0, 2, 0);
1201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(10, -100, 10, 1000), 0, 0, 1, 3);
120223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Nonintersecting.
1203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateBorders(data, gfx::Rect(65, 110, 100, 100), 0, 0, -1, -1);
120423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
12052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1206116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, NoBordersIteratorManyBorderTexels) {
1207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20);
120823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // X index by src coord: [0-30), [30-40), [40, 65)
120923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Y index by src coord: [0-40), [40-60), [60, 80), [80-110)
1210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(65, 110), 0, 0, 2, 3);
1211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(30, 40, 15, 65), 1, 1, 2, 3);
1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(60, 20, 2, 21), 2, 0, 2, 1);
12132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Oversized.
1214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 3);
1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(-100, 10, 1000, 10), 0, 0, 2, 0);
1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(10, -100, 10, 1000), 0, 0, 0, 3);
12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Nonintersecting.
1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateNoBorders(data, gfx::Rect(65, 110, 100, 100), 0, 0, -1, -1);
12192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1221116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, IteratorOneTile) {
1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData no_border(gfx::Size(1000, 1000), gfx::Size(30, 40), false);
1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(no_border, gfx::Rect(30, 40), 0, 0, 0, 0);
1224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(no_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0);
1225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(no_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1);
1226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData one_border(gfx::Size(1000, 1000), gfx::Size(30, 40), true);
1228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(one_border, gfx::Rect(30, 40), 0, 0, 0, 0);
1229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(one_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0);
1230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(one_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1);
1231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData big_border(gfx::Size(1000, 1000), gfx::Size(30, 40), 50);
1233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(big_border, gfx::Rect(30, 40), 0, 0, 0, 0);
1234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(big_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0);
1235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(big_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1);
12362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
12372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TilingDataTest, IteratorNoTiles) {
1239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(100, 100), gfx::Size(), false);
1240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestIterateAll(data, gfx::Rect(100, 100), 0, 0, -1, -1);
12412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
12422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid TestDiff(const TilingData& data,
12441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              gfx::Rect consider,
12451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              gfx::Rect ignore,
12461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              size_t num_tiles) {
12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<std::pair<int, int> > expected;
12482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (int y = 0; y < data.num_tiles_y(); ++y) {
12492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for (int x = 0; x < data.num_tiles_x(); ++x) {
12501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      gfx::Rect bounds = data.TileBounds(x, y);
12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (bounds.Intersects(consider) && !bounds.Intersects(ignore))
12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        expected.push_back(std::make_pair(x, y));
12532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
12542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
12552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Sanity check the test.
12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(num_tiles, expected.size());
12582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for (TilingData::DifferenceIterator iter(&data, consider, ignore); iter;
12601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       ++iter) {
12612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool found = false;
12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for (size_t i = 0; i < expected.size(); ++i) {
12632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (expected[i] == iter.index()) {
12642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        expected[i] = expected.back();
12652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        expected.pop_back();
12662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        found = true;
12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
12682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
12692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
12702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_TRUE(found);
12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(0u, expected.size());
12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1275116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, DifferenceIteratorIgnoreGeometry) {
12762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This test is checking that the iterator can handle different geometries of
12772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // ignore rects relative to the consider rect.  The consider rect indices
12782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // themselves are mostly tested by the non-difference iterator tests, so the
12792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // full rect is mostly used here for simplicity.
12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // X border index by src coord: [0-10), [10-20), [20, 30), [30, 40)
12822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Y border index by src coord: [0-10), [10-20), [20, 25)
1283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(10, 10), gfx::Size(40, 25), false);
12842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Fully ignored
1286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(40, 25), 0);
1287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(-100, -100, 200, 200), 0);
1288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(9, 9, 30, 15), 0);
1289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(15, 15, 8, 8), gfx::Rect(15, 15, 8, 8), 0);
12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Fully un-ignored
1292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(-30, -20, 8, 8), 12);
1293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(), 12);
12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Top left, remove 2x2 tiles
1296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(20, 19), 8);
12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Bottom right, remove 2x2 tiles
1298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(20, 15, 20, 6), 8);
12992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Bottom left, remove 2x2 tiles
1300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(0, 15, 20, 6), 8);
13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Top right, remove 2x2 tiles
1302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(20, 0, 20, 19), 8);
13032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Center, remove only one tile
1304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(10, 10, 5, 5), 11);
13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Left column, flush left, removing two columns
1307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(11, 25), 6);
13082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Middle column, removing two columns
1309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(11, 0, 11, 25), 6);
13102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Right column, flush right, removing one column
1311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(30, 0, 2, 25), 9);
13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Top row, flush top, removing one row
1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(0, 5, 40, 5), 8);
13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Middle row, removing one row
1316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(0, 13, 40, 5), 8);
13172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Bottom row, flush bottom, removing two rows
1318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(40, 25), gfx::Rect(0, 13, 40, 12), 4);
13192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Non-intersecting, but still touching two of the same tiles.
1321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(8, 0, 32, 25), gfx::Rect(0, 12, 5, 12), 10);
13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Intersecting, but neither contains the other. 2x3 with one overlap.
1324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(5, 2, 20, 10), gfx::Rect(25, 15, 5, 10), 5);
13252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
13262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1327116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, DifferenceIteratorManyBorderTexels) {
13282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // X border index by src coord: [0-50), [10-60), [20-65)
13292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Y border index by src coord: [0-60), [20-80), [40-100), [60-110)
13301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // X tile bounds by src coord: [0-30), [30-40), [40-65)
13311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Y tile bounds by src coord: [0-40), [40-60), [60-80), [80-110)
1332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20);
13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Knock out two rows, but not the left column.
13351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestDiff(data, gfx::Rect(10, 30, 55, 80), gfx::Rect(30, 59, 20, 2), 8);
13362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Knock out one row.
13381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestDiff(data, gfx::Rect(10, 30, 55, 80), gfx::Rect(29, 59, 20, 1), 9);
13392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overlap all tiles with ignore rect.
13411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestDiff(data, gfx::Rect(65, 110), gfx::Rect(29, 39, 12, 42), 0);
13421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
13431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::Rect tile = data.TileBounds(1, 1);
13441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
13451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Ignore one tile.
13461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestDiff(data, gfx::Rect(20, 30, 45, 80), tile, 11);
13471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
13481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Include one tile.
13491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestDiff(data, tile, gfx::Rect(), 1);
13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1352116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, DifferenceIteratorOneTile) {
1353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData no_border(gfx::Size(1000, 1000), gfx::Size(30, 40), false);
1354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(no_border, gfx::Rect(30, 40), gfx::Rect(), 1);
1355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(no_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0);
1356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData one_border(gfx::Size(1000, 1000), gfx::Size(30, 40), true);
1358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(one_border, gfx::Rect(30, 40), gfx::Rect(), 1);
1359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(one_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0);
1360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData big_border(gfx::Size(1000, 1000), gfx::Size(30, 40), 50);
1362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(big_border, gfx::Rect(30, 40), gfx::Rect(), 1);
1363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(big_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0);
13642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
13652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TilingDataTest, DifferenceIteratorNoTiles) {
1367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData data(gfx::Size(100, 100), gfx::Size(), false);
1368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TestDiff(data, gfx::Rect(100, 100), gfx::Rect(5, 5), 0);
13692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
13702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void TestSpiralIterate(int source_line_number,
1372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                       const TilingData& tiling_data,
1373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                       const gfx::Rect& consider,
1374a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                       const gfx::Rect& ignore,
1375a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                       const gfx::Rect& center,
1376a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                       const std::vector<std::pair<int, int> >& expected) {
1377a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::vector<std::pair<int, int> > actual;
1378a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  for (TilingData::SpiralDifferenceIterator it(
1379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           &tiling_data, consider, ignore, center);
1380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)       it;
1381a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)       ++it) {
1382a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    actual.push_back(it.index());
1383a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
1384a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1385a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(expected.size(), actual.size()) << "error from line "
1386a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                            << source_line_number;
1387a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  for (size_t i = 0; i < std::min(expected.size(), actual.size()); ++i) {
1388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_EQ(expected[i].first, actual[i].first)
1389a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        << "i: " << i << " error from line: " << source_line_number;
1390a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_EQ(expected[i].second, actual[i].second)
1391a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        << "i: " << i << " error from line: " << source_line_number;
1392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
1393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1395116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, SpiralDifferenceIteratorNoIgnoreFullConsider) {
1396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(30, 30), false);
1397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect consider(30, 30);
1398a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gfx::Rect ignore;
1399a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::vector<std::pair<int, int> > expected;
1400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Center is in the center of the tiling.
1402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect center(15, 15, 1, 1);
1403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 4 3 2
1408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| 5 * 1
1409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 6 7 8
1410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 2));
1417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Center is off to the right side of the tiling (and far away).
1422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(100, 15, 1, 1);
1423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 7 4 1
1428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| 8 5 2 *
1429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 9 6 3
1430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 1));
1436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 2));
1437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Center is the bottom right corner of the tiling.
1444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(25, 25, 1, 1);
1445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1448a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 6 5 4
1450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| 7 2 1
1451a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 8 3 *
1452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1453a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 1));
1455a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 2));
1456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Center is off the top left side of the tiling.
1465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(-60, -50, 1, 1);
1466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // * x 0 1 2
1469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 1 2 6
1471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| 3 4 5
1472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 7 8 9
1473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 1));
1478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 2));
1482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1483a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Two tile center.
1487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(15, 15, 1, 10);
1488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1489a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1491a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 5 4 3
1493a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| 6 * 2
1494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 7 * 1
1495a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1496a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1500a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1501a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1502a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1507116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, SpiralDifferenceIteratorSmallConsider) {
1508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(50, 50), false);
1509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gfx::Rect ignore;
1510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::vector<std::pair<int, int> > expected;
1511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect center(15, 15, 1, 1);
1512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Consider is one cell.
1514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect consider(1, 1);
1515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2 3 4
1518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.----------
1519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 1
1520a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1|   *
1521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2|
1522a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  3|
1523a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  4|
1524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1528a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Consider is bottom right corner.
1529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  consider = gfx::Rect(25, 25, 10, 10);
1530a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1531a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1532a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2 3 4
1533a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.----------
1534a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0|
1535a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1|   *
1536a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2|     1 2
1537a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  3|     3 4
1538a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  4|
1539a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1540a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1541a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 2));
1542a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 3));
1543a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 3));
1544a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1547a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Consider is one column.
1548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  consider = gfx::Rect(11, 0, 1, 100);
1549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1551a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2 3 4
1552a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.----------
1553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0|   2
1554a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1|   *
1555a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2|   3
1556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  3|   4
1557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  4|   5
1558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1559a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1560a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 2));
1561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 3));
1562a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 4));
1563a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1564a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1565a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1566a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1567116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, SpiralDifferenceIteratorHasIgnore) {
1568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(50, 50), false);
1569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect consider(50, 50);
1570a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::vector<std::pair<int, int> > expected;
1571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect center(15, 15, 1, 1);
1572a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1573a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Full ignore.
1574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect ignore(50, 50);
1575a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1576a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1577a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2 3 4
1578a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.----------
1579a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| . . . . .
1580a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| . * . . .
1581a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| . . . . .
1582a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  3| . . . . .
1583a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  4| . . . . .
1584a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1585a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1586a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1587a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1588a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // 3 column ignore.
1589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ignore = gfx::Rect(15, 0, 20, 100);
1590a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1591a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1592a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2 3 4
1593a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.----------
1594a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 1 . . . 8
1595a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| 2 * . . 7
1596a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 3 . . . 6
1597a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  3| 4 . . . 5
1598a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  4| 9 . . . 10
1599a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1600a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1601a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1602a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1603a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1604a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 3));
1605a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 3));
1606a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 2));
1607a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 1));
1608a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 0));
1609a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 4));
1610a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 4));
1611a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1612a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1613a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1614a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Ignore covers the top half.
1615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ignore = gfx::Rect(50, 25);
1616a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1617a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1618a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2 3 4
1619a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.----------
1620a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| . . . . .
1621a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| . * . . .
1622a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| . . . . .
1623a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  3| 1 2 3 4 5
1624a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  4| 6 7 8 9 10
1625a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1626a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1627a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 3));
1628a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 3));
1629a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 3));
1630a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 3));
1631a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 3));
1632a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 4));
1633a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 4));
1634a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 4));
1635a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 4));
1636a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 4));
1637a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1638a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1639a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1640a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1641116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, SpiralDifferenceIteratorRectangleCenter) {
1642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(50, 50), false);
1643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect consider(50, 50);
1644a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::vector<std::pair<int, int> > expected;
1645a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gfx::Rect ignore;
1646a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1647a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Two cell center
1648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  gfx::Rect center(25, 25, 1, 10);
1649a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1650a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1651a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2 3 4
1652a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.----------
1653a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| J I H G F
1654a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| K 5 4 3 E
1655a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| L 6 * 2 D
1656a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  3| M 7 * 1 C
1657a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  4| N 8 9 A B
1658a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1659a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1660a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 3));
1661a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 2));
1662a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 1));
1663a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1664a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 1));
1665a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 2));
1666a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 3));
1667a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 4));
1668a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 4));
1669a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 4));
1670a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 4));
1671a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 3));
1672a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 2));
1673a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 1));
1674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 0));
1675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 0));
1676a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1677a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1678a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1679a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1680a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1681a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 3));
1682a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 4));
1683a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1684a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1685a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1686a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Three by two center.
1687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(15, 25, 20, 10);
1688a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1689a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1690a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2 3 4
1691a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.----------
1692a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| J I H G F
1693a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| 7 6 5 4 3
1694a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 8 * * * 2
1695a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  3| 9 * * * 1
1696a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  4| A B C D E
1697a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1698a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1699a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 3));
1700a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 2));
1701a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 1));
1702a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 1));
1703a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1704a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 1));
1705a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1706a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1707a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 3));
1708a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 4));
1709a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 4));
1710a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 4));
1711a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 4));
1712a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 4));
1713a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 0));
1714a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 0));
1715a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1716a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1717a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1718a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1719a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1720a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1721a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Column center off the left side.
1722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(-50, 0, 30, 50);
1723a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1724a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1725a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //    x 0 1 2 3 4
1726a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   y.----------
1727a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // * 0| 5 A F K P
1728a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // * 1| 4 9 E J O
1729a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // * 2| 3 8 D I N
1730a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // * 3| 2 7 C H M
1731a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // * 4| 1 6 B G L
1732a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1733a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1734a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 4));
1735a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 3));
1736a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1737a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1738a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1739a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 4));
1740a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 3));
1741a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 2));
1742a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 1));
1743a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1744a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 4));
1745a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 3));
1746a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1747a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1748a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1749a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 4));
1750a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 3));
1751a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 2));
1752a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 1));
1753a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(3, 0));
1754a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 4));
1755a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 3));
1756a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 2));
1757a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 1));
1758a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(4, 0));
1759a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1760a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1761a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1762a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1763116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
1764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(30, 30), false);
1765a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::vector<std::pair<int, int> > expected;
1766a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gfx::Rect center;
1767a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gfx::Rect consider;
1768a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gfx::Rect ignore;
1769a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1770a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Ignore contains, but is not equal to, consider and center.
1771116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ignore = gfx::Rect(15, 0, 20, 30);
1772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  consider = gfx::Rect(20, 10, 10, 20);
1773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(25, 0, 5, 5);
1774a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1775a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1776a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1777a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1778a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0|   . *
1779a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1|   . .
1780a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2|   . .
1781a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1782a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1783a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1784a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1785a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Center intersects with consider.
1786a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ignore = gfx::Rect();
1787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(0, 15, 30, 15);
1788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  consider = gfx::Rect(15, 30);
1789a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1790a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1791a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1792a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1793a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 2 1
1794a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| * * *
1795a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| * * *
1796a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1797a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1798a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1799a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1800a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1801a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1802a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1803a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Consider and ignore are non-intersecting.
1804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ignore = gfx::Rect(5, 30);
1805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  consider = gfx::Rect(25, 0, 5, 30);
1806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(15, 0, 1, 1);
1807a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1808a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1809a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1810a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1811a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| . * 1
1812a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| .   2
1813a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| .   3
1814a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1815a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1816a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1817a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1818a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1819a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1820a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1821a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1822a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Center intersects with ignore.
1823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  consider = gfx::Rect(30, 30);
1824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(15, 0, 1, 30);
1825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ignore = gfx::Rect(0, 15, 30, 1);
1826a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1827a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1828a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1829a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1830a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 3 * 2
1831a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| . * .
1832a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 4 * 1
1833a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1834a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1835a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1836a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1837a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1838a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1839a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1840a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1841a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1842a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Center and ignore are the same.
1843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  consider = gfx::Rect(30, 30);
1844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(15, 0, 1, 30);
1845a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ignore = center;
1846a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1847a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1848a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1849a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1850a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 4 * 3
1851a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| 5 * 2
1852a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 6 * 1
1853a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1854a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1855a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1856a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1857a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1858a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1859a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1860a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1861a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1862a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1863a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1864a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Empty tiling data.
1865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TilingData empty_data(gfx::Size(0, 0), gfx::Size(0, 0), false);
1866a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1867a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1868a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, empty_data, consider, ignore, center, expected);
1869a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1870a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Empty consider.
1871a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ignore = gfx::Rect();
1872a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  center = gfx::Rect(1, 1, 1, 1);
1873a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  consider = gfx::Rect();
1874a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1875a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1876a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1877a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1878a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Empty center. Note: This arbitrarily puts the center to be off the top-left
1879a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // corner.
1880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  consider = gfx::Rect(30, 30);
1881a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ignore = gfx::Rect();
1882a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  center = gfx::Rect();
1883a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1884a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1885a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // * x 0 1 2
1886a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1887a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  0| 1 2 6
1888a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  1| 3 4 5
1889a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  2| 7 8 9
1890a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1891a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1892a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1893a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1894a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1895a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 1));
1896a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1897a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1898a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1899a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 2));
1900a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1901a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1902a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1903a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1904a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Every rect is empty.
1905a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ignore = gfx::Rect();
1906a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  center = gfx::Rect();
1907a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  consider = gfx::Rect();
1908a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1909a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1910a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1911a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1912a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Center is just to the left of cover, and off of the tiling's left side.
1913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  consider = gfx::Rect(30, 30);
1914a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ignore = gfx::Rect();
1915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  center = gfx::Rect(-20, 0, 19, 30);
1916a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1917a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Layout of the tiling data, and expected return order:
1918a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   x 0 1 2
1919a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //  y.------
1920a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // *0| 3 6 9
1921a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // *1| 2 5 8
1922a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // *2| 1 4 7
1923a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.clear();
1924a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1925a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 2));
1926a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 1));
1927a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(0, 0));
1928a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 2));
1929a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 1));
1930a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(1, 0));
1931a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 2));
1932a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 1));
1933a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  expected.push_back(std::make_pair(2, 0));
1934a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1935a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1936a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
19370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
19382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
1939a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
19402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
1941