1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "cc/base/tiling_data.h" 6 7#include <algorithm> 8#include <vector> 9 10#include "cc/test/geometry_test_utils.h" 11#include "testing/gtest/include/gtest/gtest.h" 12 13namespace cc { 14namespace { 15 16int NumTiles(const gfx::Size& max_texture_size, 17 const gfx::Rect& tiling_rect, 18 bool has_border_texels) { 19 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 20 int num_tiles = tiling.num_tiles_x() * tiling.num_tiles_y(); 21 22 // Assert no overflow. 23 EXPECT_GE(num_tiles, 0); 24 if (num_tiles > 0) 25 EXPECT_EQ(num_tiles / tiling.num_tiles_x(), tiling.num_tiles_y()); 26 27 return num_tiles; 28} 29 30int XIndex(const gfx::Size& max_texture_size, 31 const gfx::Rect& tiling_rect, 32 bool has_border_texels, 33 int x_coord) { 34 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 35 return tiling.TileXIndexFromSrcCoord(x_coord); 36} 37 38int YIndex(const gfx::Size& max_texture_size, 39 const gfx::Rect& tiling_rect, 40 bool has_border_texels, 41 int y_coord) { 42 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 43 return tiling.TileYIndexFromSrcCoord(y_coord); 44} 45 46int MinBorderXIndex(const gfx::Size& max_texture_size, 47 const gfx::Rect& tiling_rect, 48 bool has_border_texels, 49 int x_coord) { 50 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 51 return tiling.FirstBorderTileXIndexFromSrcCoord(x_coord); 52} 53 54int MinBorderYIndex(const gfx::Size& max_texture_size, 55 const gfx::Rect& tiling_rect, 56 bool has_border_texels, 57 int y_coord) { 58 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 59 return tiling.FirstBorderTileYIndexFromSrcCoord(y_coord); 60} 61 62int MaxBorderXIndex(const gfx::Size& max_texture_size, 63 const gfx::Rect& tiling_rect, 64 bool has_border_texels, 65 int x_coord) { 66 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 67 return tiling.LastBorderTileXIndexFromSrcCoord(x_coord); 68} 69 70int MaxBorderYIndex(const gfx::Size& max_texture_size, 71 const gfx::Rect& tiling_rect, 72 bool has_border_texels, 73 int y_coord) { 74 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 75 return tiling.LastBorderTileYIndexFromSrcCoord(y_coord); 76} 77 78int PosX(const gfx::Size& max_texture_size, 79 const gfx::Rect& tiling_rect, 80 bool has_border_texels, 81 int x_index) { 82 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 83 return tiling.TilePositionX(x_index); 84} 85 86int PosY(const gfx::Size& max_texture_size, 87 const gfx::Rect& tiling_rect, 88 bool has_border_texels, 89 int y_index) { 90 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 91 return tiling.TilePositionY(y_index); 92} 93 94int SizeX(const gfx::Size& max_texture_size, 95 const gfx::Rect& tiling_rect, 96 bool has_border_texels, 97 int x_index) { 98 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 99 return tiling.TileSizeX(x_index); 100} 101 102int SizeY(const gfx::Size& max_texture_size, 103 const gfx::Rect& tiling_rect, 104 bool has_border_texels, 105 int y_index) { 106 TilingData tiling(max_texture_size, tiling_rect, has_border_texels); 107 return tiling.TileSizeY(y_index); 108} 109 110class TilingDataTest : public ::testing::TestWithParam<gfx::Point> {}; 111 112TEST_P(TilingDataTest, NumTiles_NoTiling) { 113 gfx::Point origin = GetParam(); 114 115 EXPECT_EQ( 116 1, 117 NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(16, 16)), false)); 118 EXPECT_EQ( 119 1, 120 NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(15, 15)), true)); 121 EXPECT_EQ( 122 1, 123 NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(16, 16)), true)); 124 EXPECT_EQ( 125 1, 126 NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(1, 16)), false)); 127 EXPECT_EQ( 128 1, 129 NumTiles(gfx::Size(15, 15), gfx::Rect(origin, gfx::Size(15, 15)), true)); 130 EXPECT_EQ( 131 1, 132 NumTiles(gfx::Size(32, 16), gfx::Rect(origin, gfx::Size(32, 16)), false)); 133 EXPECT_EQ( 134 1, 135 NumTiles(gfx::Size(32, 16), gfx::Rect(origin, gfx::Size(32, 16)), true)); 136} 137 138TEST_P(TilingDataTest, NumTiles_TilingNoBorders) { 139 gfx::Point origin = GetParam(); 140 141 EXPECT_EQ( 142 0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(0, 0)), false)); 143 EXPECT_EQ( 144 0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(4, 0)), false)); 145 EXPECT_EQ( 146 0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(0, 4)), false)); 147 EXPECT_EQ( 148 0, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(4, 0)), false)); 149 EXPECT_EQ( 150 0, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(0, 4)), false)); 151 EXPECT_EQ( 152 0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(1, 1)), false)); 153 154 EXPECT_EQ( 155 1, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(1, 1)), false)); 156 EXPECT_EQ( 157 2, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(1, 2)), false)); 158 EXPECT_EQ( 159 2, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(2, 1)), false)); 160 EXPECT_EQ( 161 1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(1, 1)), false)); 162 EXPECT_EQ( 163 1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(1, 2)), false)); 164 EXPECT_EQ( 165 1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(2, 1)), false)); 166 EXPECT_EQ( 167 1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(2, 2)), false)); 168 EXPECT_EQ( 169 1, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 3)), false)); 170 171 EXPECT_EQ( 172 1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(1, 4)), false)); 173 EXPECT_EQ( 174 1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(2, 4)), false)); 175 EXPECT_EQ( 176 1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(3, 4)), false)); 177 EXPECT_EQ( 178 1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(4, 4)), false)); 179 EXPECT_EQ( 180 2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(5, 4)), false)); 181 EXPECT_EQ( 182 2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(6, 4)), false)); 183 EXPECT_EQ( 184 2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(7, 4)), false)); 185 EXPECT_EQ( 186 2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(8, 4)), false)); 187 EXPECT_EQ( 188 3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(9, 4)), false)); 189 EXPECT_EQ( 190 3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(10, 4)), false)); 191 EXPECT_EQ( 192 3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(11, 4)), false)); 193 194 EXPECT_EQ( 195 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(1, 5)), false)); 196 EXPECT_EQ( 197 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(2, 5)), false)); 198 EXPECT_EQ( 199 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(3, 5)), false)); 200 EXPECT_EQ( 201 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(4, 5)), false)); 202 EXPECT_EQ( 203 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), false)); 204 EXPECT_EQ( 205 2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 5)), false)); 206 EXPECT_EQ( 207 2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(7, 5)), false)); 208 EXPECT_EQ( 209 2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 5)), false)); 210 EXPECT_EQ( 211 2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(9, 5)), false)); 212 EXPECT_EQ( 213 2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 5)), false)); 214 EXPECT_EQ( 215 3, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(11, 5)), false)); 216 217 EXPECT_EQ( 218 1, 219 NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(16, 16)), false)); 220 EXPECT_EQ( 221 1, 222 NumTiles(gfx::Size(17, 17), gfx::Rect(origin, gfx::Size(16, 16)), false)); 223 EXPECT_EQ( 224 4, 225 NumTiles(gfx::Size(15, 15), gfx::Rect(origin, gfx::Size(16, 16)), false)); 226 EXPECT_EQ( 227 4, 228 NumTiles(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 16)), false)); 229 EXPECT_EQ( 230 6, 231 NumTiles(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(17, 16)), false)); 232 233 EXPECT_EQ( 234 8, 235 NumTiles(gfx::Size(5, 8), gfx::Rect(origin, gfx::Size(17, 16)), false)); 236} 237 238TEST_P(TilingDataTest, NumTiles_TilingWithBorders) { 239 gfx::Point origin = GetParam(); 240 241 EXPECT_EQ( 242 0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(0, 0)), true)); 243 EXPECT_EQ( 244 0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(4, 0)), true)); 245 EXPECT_EQ( 246 0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(0, 4)), true)); 247 EXPECT_EQ( 248 0, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(4, 0)), true)); 249 EXPECT_EQ( 250 0, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(0, 4)), true)); 251 EXPECT_EQ( 252 0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(1, 1)), true)); 253 254 EXPECT_EQ( 255 1, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(1, 1)), true)); 256 EXPECT_EQ( 257 0, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(1, 2)), true)); 258 EXPECT_EQ( 259 0, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(2, 1)), true)); 260 EXPECT_EQ( 261 1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(1, 1)), true)); 262 EXPECT_EQ( 263 1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(1, 2)), true)); 264 EXPECT_EQ( 265 1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(2, 1)), true)); 266 EXPECT_EQ( 267 1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(2, 2)), true)); 268 269 EXPECT_EQ( 270 1, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), true)); 271 EXPECT_EQ( 272 1, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(2, 3)), true)); 273 EXPECT_EQ( 274 1, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 3)), true)); 275 EXPECT_EQ( 276 2, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(4, 3)), true)); 277 EXPECT_EQ( 278 3, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(5, 3)), true)); 279 EXPECT_EQ( 280 4, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 3)), true)); 281 EXPECT_EQ( 282 5, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(7, 3)), true)); 283 284 EXPECT_EQ( 285 1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(1, 4)), true)); 286 EXPECT_EQ( 287 1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(2, 4)), true)); 288 EXPECT_EQ( 289 1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(3, 4)), true)); 290 EXPECT_EQ( 291 1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(4, 4)), true)); 292 EXPECT_EQ( 293 2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(5, 4)), true)); 294 EXPECT_EQ( 295 2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(6, 4)), true)); 296 EXPECT_EQ( 297 3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(7, 4)), true)); 298 EXPECT_EQ( 299 3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(8, 4)), true)); 300 EXPECT_EQ( 301 4, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(9, 4)), true)); 302 EXPECT_EQ( 303 4, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(10, 4)), true)); 304 EXPECT_EQ( 305 5, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(11, 4)), true)); 306 307 EXPECT_EQ( 308 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(1, 5)), true)); 309 EXPECT_EQ( 310 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(2, 5)), true)); 311 EXPECT_EQ( 312 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(3, 5)), true)); 313 EXPECT_EQ( 314 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(4, 5)), true)); 315 EXPECT_EQ( 316 1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), true)); 317 EXPECT_EQ( 318 2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 5)), true)); 319 EXPECT_EQ( 320 2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(7, 5)), true)); 321 EXPECT_EQ( 322 2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 5)), true)); 323 EXPECT_EQ( 324 3, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(9, 5)), true)); 325 EXPECT_EQ( 326 3, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 5)), true)); 327 EXPECT_EQ( 328 3, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(11, 5)), true)); 329 330 EXPECT_EQ( 331 30, 332 NumTiles(gfx::Size(8, 5), gfx::Rect(origin, gfx::Size(16, 32)), true)); 333} 334 335TEST_P(TilingDataTest, TileXIndexFromSrcCoord) { 336 gfx::Point origin = GetParam(); 337 338 EXPECT_EQ(0, 339 XIndex(gfx::Size(3, 3), 340 gfx::Rect(origin, gfx::Size(10, 10)), 341 false, 342 origin.x() + 0)); 343 EXPECT_EQ(0, 344 XIndex(gfx::Size(3, 3), 345 gfx::Rect(origin, gfx::Size(10, 10)), 346 false, 347 origin.x() + 1)); 348 EXPECT_EQ(0, 349 XIndex(gfx::Size(3, 3), 350 gfx::Rect(origin, gfx::Size(10, 10)), 351 false, 352 origin.x() + 2)); 353 EXPECT_EQ(1, 354 XIndex(gfx::Size(3, 3), 355 gfx::Rect(origin, gfx::Size(10, 10)), 356 false, 357 origin.x() + 3)); 358 EXPECT_EQ(1, 359 XIndex(gfx::Size(3, 3), 360 gfx::Rect(origin, gfx::Size(10, 10)), 361 false, 362 origin.x() + 4)); 363 EXPECT_EQ(1, 364 XIndex(gfx::Size(3, 3), 365 gfx::Rect(origin, gfx::Size(10, 10)), 366 false, 367 origin.x() + 5)); 368 EXPECT_EQ(2, 369 XIndex(gfx::Size(3, 3), 370 gfx::Rect(origin, gfx::Size(10, 10)), 371 false, 372 origin.x() + 6)); 373 EXPECT_EQ(2, 374 XIndex(gfx::Size(3, 3), 375 gfx::Rect(origin, gfx::Size(10, 10)), 376 false, 377 origin.x() + 7)); 378 EXPECT_EQ(2, 379 XIndex(gfx::Size(3, 3), 380 gfx::Rect(origin, gfx::Size(10, 10)), 381 false, 382 origin.x() + 8)); 383 EXPECT_EQ(3, 384 XIndex(gfx::Size(3, 3), 385 gfx::Rect(origin, gfx::Size(10, 10)), 386 false, 387 origin.x() + 9)); 388 EXPECT_EQ(3, 389 XIndex(gfx::Size(3, 3), 390 gfx::Rect(origin, gfx::Size(10, 10)), 391 false, 392 origin.x() + 10)); 393 EXPECT_EQ(3, 394 XIndex(gfx::Size(3, 3), 395 gfx::Rect(origin, gfx::Size(10, 10)), 396 false, 397 origin.x() + 11)); 398 399 EXPECT_EQ(0, 400 XIndex(gfx::Size(3, 3), 401 gfx::Rect(origin, gfx::Size(10, 10)), 402 true, 403 origin.x())); 404 EXPECT_EQ(0, 405 XIndex(gfx::Size(3, 3), 406 gfx::Rect(origin, gfx::Size(10, 10)), 407 true, 408 origin.x() + 1)); 409 EXPECT_EQ(1, 410 XIndex(gfx::Size(3, 3), 411 gfx::Rect(origin, gfx::Size(10, 10)), 412 true, 413 origin.x() + 2)); 414 EXPECT_EQ(2, 415 XIndex(gfx::Size(3, 3), 416 gfx::Rect(origin, gfx::Size(10, 10)), 417 true, 418 origin.x() + 3)); 419 EXPECT_EQ(3, 420 XIndex(gfx::Size(3, 3), 421 gfx::Rect(origin, gfx::Size(10, 10)), 422 true, 423 origin.x() + 4)); 424 EXPECT_EQ(4, 425 XIndex(gfx::Size(3, 3), 426 gfx::Rect(origin, gfx::Size(10, 10)), 427 true, 428 origin.x() + 5)); 429 EXPECT_EQ(5, 430 XIndex(gfx::Size(3, 3), 431 gfx::Rect(origin, gfx::Size(10, 10)), 432 true, 433 origin.x() + 6)); 434 EXPECT_EQ(6, 435 XIndex(gfx::Size(3, 3), 436 gfx::Rect(origin, gfx::Size(10, 10)), 437 true, 438 origin.x() + 7)); 439 EXPECT_EQ(7, 440 XIndex(gfx::Size(3, 3), 441 gfx::Rect(origin, gfx::Size(10, 10)), 442 true, 443 origin.x() + 8)); 444 EXPECT_EQ(7, 445 XIndex(gfx::Size(3, 3), 446 gfx::Rect(origin, gfx::Size(10, 10)), 447 true, 448 origin.x() + 9)); 449 EXPECT_EQ(7, 450 XIndex(gfx::Size(3, 3), 451 gfx::Rect(origin, gfx::Size(10, 10)), 452 true, 453 origin.x() + 10)); 454 EXPECT_EQ(7, 455 XIndex(gfx::Size(3, 3), 456 gfx::Rect(origin, gfx::Size(10, 10)), 457 true, 458 origin.x() + 11)); 459 460 EXPECT_EQ(0, 461 XIndex(gfx::Size(1, 1), 462 gfx::Rect(origin, gfx::Size(1, 1)), 463 false, 464 origin.x() + 0)); 465 EXPECT_EQ(0, 466 XIndex(gfx::Size(2, 2), 467 gfx::Rect(origin, gfx::Size(2, 2)), 468 false, 469 origin.x() + 0)); 470 EXPECT_EQ(0, 471 XIndex(gfx::Size(2, 2), 472 gfx::Rect(origin, gfx::Size(2, 2)), 473 false, 474 origin.x() + 1)); 475 EXPECT_EQ(0, 476 XIndex(gfx::Size(3, 3), 477 gfx::Rect(origin, gfx::Size(3, 3)), 478 false, 479 origin.x() + 0)); 480 EXPECT_EQ(0, 481 XIndex(gfx::Size(3, 3), 482 gfx::Rect(origin, gfx::Size(3, 3)), 483 false, 484 origin.x() + 1)); 485 EXPECT_EQ(0, 486 XIndex(gfx::Size(3, 3), 487 gfx::Rect(origin, gfx::Size(3, 3)), 488 false, 489 origin.x() + 2)); 490 491 EXPECT_EQ(0, 492 XIndex(gfx::Size(3, 3), 493 gfx::Rect(origin, gfx::Size(4, 3)), 494 false, 495 origin.x() + 0)); 496 EXPECT_EQ(0, 497 XIndex(gfx::Size(3, 3), 498 gfx::Rect(origin, gfx::Size(4, 3)), 499 false, 500 origin.x() + 1)); 501 EXPECT_EQ(0, 502 XIndex(gfx::Size(3, 3), 503 gfx::Rect(origin, gfx::Size(4, 3)), 504 false, 505 origin.x() + 2)); 506 EXPECT_EQ(1, 507 XIndex(gfx::Size(3, 3), 508 gfx::Rect(origin, gfx::Size(4, 3)), 509 false, 510 origin.x() + 3)); 511 512 EXPECT_EQ(0, 513 XIndex(gfx::Size(1, 1), 514 gfx::Rect(origin, gfx::Size(1, 1)), 515 true, 516 origin.x() + 0)); 517 EXPECT_EQ(0, 518 XIndex(gfx::Size(2, 2), 519 gfx::Rect(origin, gfx::Size(2, 2)), 520 true, 521 origin.x() + 0)); 522 EXPECT_EQ(0, 523 XIndex(gfx::Size(2, 2), 524 gfx::Rect(origin, gfx::Size(2, 2)), 525 true, 526 origin.x() + 1)); 527 EXPECT_EQ(0, 528 XIndex(gfx::Size(3, 3), 529 gfx::Rect(origin, gfx::Size(3, 3)), 530 true, 531 origin.x() + 0)); 532 EXPECT_EQ(0, 533 XIndex(gfx::Size(3, 3), 534 gfx::Rect(origin, gfx::Size(3, 3)), 535 true, 536 origin.x() + 1)); 537 EXPECT_EQ(0, 538 XIndex(gfx::Size(3, 3), 539 gfx::Rect(origin, gfx::Size(3, 3)), 540 true, 541 origin.x() + 2)); 542 543 EXPECT_EQ(0, 544 XIndex(gfx::Size(3, 3), 545 gfx::Rect(origin, gfx::Size(4, 3)), 546 true, 547 origin.x() + 0)); 548 EXPECT_EQ(0, 549 XIndex(gfx::Size(3, 3), 550 gfx::Rect(origin, gfx::Size(4, 3)), 551 true, 552 origin.x() + 1)); 553 EXPECT_EQ(1, 554 XIndex(gfx::Size(3, 3), 555 gfx::Rect(origin, gfx::Size(4, 3)), 556 true, 557 origin.x() + 2)); 558 EXPECT_EQ(1, 559 XIndex(gfx::Size(3, 3), 560 gfx::Rect(origin, gfx::Size(4, 3)), 561 true, 562 origin.x() + 3)); 563} 564 565TEST_P(TilingDataTest, FirstBorderTileXIndexFromSrcCoord) { 566 gfx::Point origin = GetParam(); 567 568 EXPECT_EQ(0, 569 MinBorderXIndex(gfx::Size(3, 3), 570 gfx::Rect(origin, gfx::Size(10, 10)), 571 false, 572 origin.x() + 0)); 573 EXPECT_EQ(0, 574 MinBorderXIndex(gfx::Size(3, 3), 575 gfx::Rect(origin, gfx::Size(10, 10)), 576 false, 577 origin.x() + 1)); 578 EXPECT_EQ(0, 579 MinBorderXIndex(gfx::Size(3, 3), 580 gfx::Rect(origin, gfx::Size(10, 10)), 581 false, 582 origin.x() + 2)); 583 EXPECT_EQ(1, 584 MinBorderXIndex(gfx::Size(3, 3), 585 gfx::Rect(origin, gfx::Size(10, 10)), 586 false, 587 origin.x() + 3)); 588 EXPECT_EQ(1, 589 MinBorderXIndex(gfx::Size(3, 3), 590 gfx::Rect(origin, gfx::Size(10, 10)), 591 false, 592 origin.x() + 4)); 593 EXPECT_EQ(1, 594 MinBorderXIndex(gfx::Size(3, 3), 595 gfx::Rect(origin, gfx::Size(10, 10)), 596 false, 597 origin.x() + 5)); 598 EXPECT_EQ(2, 599 MinBorderXIndex(gfx::Size(3, 3), 600 gfx::Rect(origin, gfx::Size(10, 10)), 601 false, 602 origin.x() + 6)); 603 EXPECT_EQ(2, 604 MinBorderXIndex(gfx::Size(3, 3), 605 gfx::Rect(origin, gfx::Size(10, 10)), 606 false, 607 origin.x() + 7)); 608 EXPECT_EQ(2, 609 MinBorderXIndex(gfx::Size(3, 3), 610 gfx::Rect(origin, gfx::Size(10, 10)), 611 false, 612 origin.x() + 8)); 613 EXPECT_EQ(3, 614 MinBorderXIndex(gfx::Size(3, 3), 615 gfx::Rect(origin, gfx::Size(10, 10)), 616 false, 617 origin.x() + 9)); 618 EXPECT_EQ(3, 619 MinBorderXIndex(gfx::Size(3, 3), 620 gfx::Rect(origin, gfx::Size(10, 10)), 621 false, 622 origin.x() + 10)); 623 EXPECT_EQ(3, 624 MinBorderXIndex(gfx::Size(3, 3), 625 gfx::Rect(origin, gfx::Size(10, 10)), 626 false, 627 origin.x() + 11)); 628 629 EXPECT_EQ(0, 630 MinBorderXIndex(gfx::Size(3, 3), 631 gfx::Rect(origin, gfx::Size(10, 10)), 632 true, 633 origin.x() + 0)); 634 EXPECT_EQ(0, 635 MinBorderXIndex(gfx::Size(3, 3), 636 gfx::Rect(origin, gfx::Size(10, 10)), 637 true, 638 origin.x() + 1)); 639 EXPECT_EQ(0, 640 MinBorderXIndex(gfx::Size(3, 3), 641 gfx::Rect(origin, gfx::Size(10, 10)), 642 true, 643 origin.x() + 2)); 644 EXPECT_EQ(1, 645 MinBorderXIndex(gfx::Size(3, 3), 646 gfx::Rect(origin, gfx::Size(10, 10)), 647 true, 648 origin.x() + 3)); 649 EXPECT_EQ(2, 650 MinBorderXIndex(gfx::Size(3, 3), 651 gfx::Rect(origin, gfx::Size(10, 10)), 652 true, 653 origin.x() + 4)); 654 EXPECT_EQ(3, 655 MinBorderXIndex(gfx::Size(3, 3), 656 gfx::Rect(origin, gfx::Size(10, 10)), 657 true, 658 origin.x() + 5)); 659 EXPECT_EQ(4, 660 MinBorderXIndex(gfx::Size(3, 3), 661 gfx::Rect(origin, gfx::Size(10, 10)), 662 true, 663 origin.x() + 6)); 664 EXPECT_EQ(5, 665 MinBorderXIndex(gfx::Size(3, 3), 666 gfx::Rect(origin, gfx::Size(10, 10)), 667 true, 668 origin.x() + 7)); 669 EXPECT_EQ(6, 670 MinBorderXIndex(gfx::Size(3, 3), 671 gfx::Rect(origin, gfx::Size(10, 10)), 672 true, 673 origin.x() + 8)); 674 EXPECT_EQ(7, 675 MinBorderXIndex(gfx::Size(3, 3), 676 gfx::Rect(origin, gfx::Size(10, 10)), 677 true, 678 origin.x() + 9)); 679 EXPECT_EQ(7, 680 MinBorderXIndex(gfx::Size(3, 3), 681 gfx::Rect(origin, gfx::Size(10, 10)), 682 true, 683 origin.x() + 10)); 684 EXPECT_EQ(7, 685 MinBorderXIndex(gfx::Size(3, 3), 686 gfx::Rect(origin, gfx::Size(10, 10)), 687 true, 688 origin.x() + 11)); 689 690 EXPECT_EQ(0, 691 MinBorderXIndex(gfx::Size(1, 1), 692 gfx::Rect(origin, gfx::Size(1, 1)), 693 false, 694 origin.x() + 0)); 695 EXPECT_EQ(0, 696 MinBorderXIndex(gfx::Size(2, 2), 697 gfx::Rect(origin, gfx::Size(2, 2)), 698 false, 699 origin.x() + 0)); 700 EXPECT_EQ(0, 701 MinBorderXIndex(gfx::Size(2, 2), 702 gfx::Rect(origin, gfx::Size(2, 2)), 703 false, 704 origin.x() + 1)); 705 EXPECT_EQ(0, 706 MinBorderXIndex(gfx::Size(3, 3), 707 gfx::Rect(origin, gfx::Size(3, 3)), 708 false, 709 origin.x() + 0)); 710 EXPECT_EQ(0, 711 MinBorderXIndex(gfx::Size(3, 3), 712 gfx::Rect(origin, gfx::Size(3, 3)), 713 false, 714 origin.x() + 1)); 715 EXPECT_EQ(0, 716 MinBorderXIndex(gfx::Size(3, 3), 717 gfx::Rect(origin, gfx::Size(3, 3)), 718 false, 719 origin.x() + 2)); 720 721 EXPECT_EQ(0, 722 MinBorderXIndex(gfx::Size(3, 3), 723 gfx::Rect(origin, gfx::Size(4, 3)), 724 false, 725 origin.x() + 0)); 726 EXPECT_EQ(0, 727 MinBorderXIndex(gfx::Size(3, 3), 728 gfx::Rect(origin, gfx::Size(4, 3)), 729 false, 730 origin.x() + 1)); 731 EXPECT_EQ(0, 732 MinBorderXIndex(gfx::Size(3, 3), 733 gfx::Rect(origin, gfx::Size(4, 3)), 734 false, 735 origin.x() + 2)); 736 EXPECT_EQ(1, 737 MinBorderXIndex(gfx::Size(3, 3), 738 gfx::Rect(origin, gfx::Size(4, 3)), 739 false, 740 origin.x() + 3)); 741 742 EXPECT_EQ(0, 743 MinBorderXIndex(gfx::Size(1, 1), 744 gfx::Rect(origin, gfx::Size(1, 1)), 745 true, 746 origin.x() + 0)); 747 EXPECT_EQ(0, 748 MinBorderXIndex(gfx::Size(2, 2), 749 gfx::Rect(origin, gfx::Size(2, 2)), 750 true, 751 origin.x() + 0)); 752 EXPECT_EQ(0, 753 MinBorderXIndex(gfx::Size(2, 2), 754 gfx::Rect(origin, gfx::Size(2, 2)), 755 true, 756 origin.x() + 1)); 757 EXPECT_EQ(0, 758 MinBorderXIndex(gfx::Size(3, 3), 759 gfx::Rect(origin, gfx::Size(3, 3)), 760 true, 761 origin.x() + 0)); 762 EXPECT_EQ(0, 763 MinBorderXIndex(gfx::Size(3, 3), 764 gfx::Rect(origin, gfx::Size(3, 3)), 765 true, 766 origin.x() + 1)); 767 EXPECT_EQ(0, 768 MinBorderXIndex(gfx::Size(3, 3), 769 gfx::Rect(origin, gfx::Size(3, 3)), 770 true, 771 origin.x() + 2)); 772 773 EXPECT_EQ(0, 774 MinBorderXIndex(gfx::Size(3, 3), 775 gfx::Rect(origin, gfx::Size(4, 3)), 776 true, 777 origin.x() + 0)); 778 EXPECT_EQ(0, 779 MinBorderXIndex(gfx::Size(3, 3), 780 gfx::Rect(origin, gfx::Size(4, 3)), 781 true, 782 origin.x() + 1)); 783 EXPECT_EQ(0, 784 MinBorderXIndex(gfx::Size(3, 3), 785 gfx::Rect(origin, gfx::Size(4, 3)), 786 true, 787 origin.x() + 2)); 788 EXPECT_EQ(1, 789 MinBorderXIndex(gfx::Size(3, 3), 790 gfx::Rect(origin, gfx::Size(4, 3)), 791 true, 792 origin.x() + 3)); 793} 794 795TEST_P(TilingDataTest, LastBorderTileXIndexFromSrcCoord) { 796 gfx::Point origin = GetParam(); 797 798 EXPECT_EQ(0, 799 MaxBorderXIndex(gfx::Size(3, 3), 800 gfx::Rect(origin, gfx::Size(10, 10)), 801 false, 802 origin.x() + 0)); 803 EXPECT_EQ(0, 804 MaxBorderXIndex(gfx::Size(3, 3), 805 gfx::Rect(origin, gfx::Size(10, 10)), 806 false, 807 origin.x() + 1)); 808 EXPECT_EQ(0, 809 MaxBorderXIndex(gfx::Size(3, 3), 810 gfx::Rect(origin, gfx::Size(10, 10)), 811 false, 812 origin.x() + 2)); 813 EXPECT_EQ(1, 814 MaxBorderXIndex(gfx::Size(3, 3), 815 gfx::Rect(origin, gfx::Size(10, 10)), 816 false, 817 origin.x() + 3)); 818 EXPECT_EQ(1, 819 MaxBorderXIndex(gfx::Size(3, 3), 820 gfx::Rect(origin, gfx::Size(10, 10)), 821 false, 822 origin.x() + 4)); 823 EXPECT_EQ(1, 824 MaxBorderXIndex(gfx::Size(3, 3), 825 gfx::Rect(origin, gfx::Size(10, 10)), 826 false, 827 origin.x() + 5)); 828 EXPECT_EQ(2, 829 MaxBorderXIndex(gfx::Size(3, 3), 830 gfx::Rect(origin, gfx::Size(10, 10)), 831 false, 832 origin.x() + 6)); 833 EXPECT_EQ(2, 834 MaxBorderXIndex(gfx::Size(3, 3), 835 gfx::Rect(origin, gfx::Size(10, 10)), 836 false, 837 origin.x() + 7)); 838 EXPECT_EQ(2, 839 MaxBorderXIndex(gfx::Size(3, 3), 840 gfx::Rect(origin, gfx::Size(10, 10)), 841 false, 842 origin.x() + 8)); 843 EXPECT_EQ(3, 844 MaxBorderXIndex(gfx::Size(3, 3), 845 gfx::Rect(origin, gfx::Size(10, 10)), 846 false, 847 origin.x() + 9)); 848 EXPECT_EQ(3, 849 MaxBorderXIndex(gfx::Size(3, 3), 850 gfx::Rect(origin, gfx::Size(10, 10)), 851 false, 852 origin.x() + 10)); 853 EXPECT_EQ(3, 854 MaxBorderXIndex(gfx::Size(3, 3), 855 gfx::Rect(origin, gfx::Size(10, 10)), 856 false, 857 origin.x() + 11)); 858 859 EXPECT_EQ(0, 860 MaxBorderXIndex(gfx::Size(3, 3), 861 gfx::Rect(origin, gfx::Size(10, 10)), 862 true, 863 origin.x() + 0)); 864 EXPECT_EQ(1, 865 MaxBorderXIndex(gfx::Size(3, 3), 866 gfx::Rect(origin, gfx::Size(10, 10)), 867 true, 868 origin.x() + 1)); 869 EXPECT_EQ(2, 870 MaxBorderXIndex(gfx::Size(3, 3), 871 gfx::Rect(origin, gfx::Size(10, 10)), 872 true, 873 origin.x() + 2)); 874 EXPECT_EQ(3, 875 MaxBorderXIndex(gfx::Size(3, 3), 876 gfx::Rect(origin, gfx::Size(10, 10)), 877 true, 878 origin.x() + 3)); 879 EXPECT_EQ(4, 880 MaxBorderXIndex(gfx::Size(3, 3), 881 gfx::Rect(origin, gfx::Size(10, 10)), 882 true, 883 origin.x() + 4)); 884 EXPECT_EQ(5, 885 MaxBorderXIndex(gfx::Size(3, 3), 886 gfx::Rect(origin, gfx::Size(10, 10)), 887 true, 888 origin.x() + 5)); 889 EXPECT_EQ(6, 890 MaxBorderXIndex(gfx::Size(3, 3), 891 gfx::Rect(origin, gfx::Size(10, 10)), 892 true, 893 origin.x() + 6)); 894 EXPECT_EQ(7, 895 MaxBorderXIndex(gfx::Size(3, 3), 896 gfx::Rect(origin, gfx::Size(10, 10)), 897 true, 898 origin.x() + 7)); 899 EXPECT_EQ(7, 900 MaxBorderXIndex(gfx::Size(3, 3), 901 gfx::Rect(origin, gfx::Size(10, 10)), 902 true, 903 origin.x() + 8)); 904 EXPECT_EQ(7, 905 MaxBorderXIndex(gfx::Size(3, 3), 906 gfx::Rect(origin, gfx::Size(10, 10)), 907 true, 908 origin.x() + 9)); 909 EXPECT_EQ(7, 910 MaxBorderXIndex(gfx::Size(3, 3), 911 gfx::Rect(origin, gfx::Size(10, 10)), 912 true, 913 origin.x() + 10)); 914 EXPECT_EQ(7, 915 MaxBorderXIndex(gfx::Size(3, 3), 916 gfx::Rect(origin, gfx::Size(10, 10)), 917 true, 918 origin.x() + 11)); 919 920 EXPECT_EQ(0, 921 MaxBorderXIndex(gfx::Size(1, 1), 922 gfx::Rect(origin, gfx::Size(1, 1)), 923 false, 924 origin.x() + 0)); 925 EXPECT_EQ(0, 926 MaxBorderXIndex(gfx::Size(2, 2), 927 gfx::Rect(origin, gfx::Size(2, 2)), 928 false, 929 origin.x() + 0)); 930 EXPECT_EQ(0, 931 MaxBorderXIndex(gfx::Size(2, 2), 932 gfx::Rect(origin, gfx::Size(2, 2)), 933 false, 934 origin.x() + 1)); 935 EXPECT_EQ(0, 936 MaxBorderXIndex(gfx::Size(3, 3), 937 gfx::Rect(origin, gfx::Size(3, 3)), 938 false, 939 origin.x() + 0)); 940 EXPECT_EQ(0, 941 MaxBorderXIndex(gfx::Size(3, 3), 942 gfx::Rect(origin, gfx::Size(3, 3)), 943 false, 944 origin.x() + 1)); 945 EXPECT_EQ(0, 946 MaxBorderXIndex(gfx::Size(3, 3), 947 gfx::Rect(origin, gfx::Size(3, 3)), 948 false, 949 origin.x() + 2)); 950 951 EXPECT_EQ(0, 952 MaxBorderXIndex(gfx::Size(3, 3), 953 gfx::Rect(origin, gfx::Size(4, 3)), 954 false, 955 origin.x() + 0)); 956 EXPECT_EQ(0, 957 MaxBorderXIndex(gfx::Size(3, 3), 958 gfx::Rect(origin, gfx::Size(4, 3)), 959 false, 960 origin.x() + 1)); 961 EXPECT_EQ(0, 962 MaxBorderXIndex(gfx::Size(3, 3), 963 gfx::Rect(origin, gfx::Size(4, 3)), 964 false, 965 origin.x() + 2)); 966 EXPECT_EQ(1, 967 MaxBorderXIndex(gfx::Size(3, 3), 968 gfx::Rect(origin, gfx::Size(4, 3)), 969 false, 970 origin.x() + 3)); 971 972 EXPECT_EQ(0, 973 MaxBorderXIndex(gfx::Size(1, 1), 974 gfx::Rect(origin, gfx::Size(1, 1)), 975 true, 976 origin.x() + 0)); 977 EXPECT_EQ(0, 978 MaxBorderXIndex(gfx::Size(2, 2), 979 gfx::Rect(origin, gfx::Size(2, 2)), 980 true, 981 origin.x() + 0)); 982 EXPECT_EQ(0, 983 MaxBorderXIndex(gfx::Size(2, 2), 984 gfx::Rect(origin, gfx::Size(2, 2)), 985 true, 986 origin.x() + 1)); 987 EXPECT_EQ(0, 988 MaxBorderXIndex(gfx::Size(3, 3), 989 gfx::Rect(origin, gfx::Size(3, 3)), 990 true, 991 origin.x() + 0)); 992 EXPECT_EQ(0, 993 MaxBorderXIndex(gfx::Size(3, 3), 994 gfx::Rect(origin, gfx::Size(3, 3)), 995 true, 996 origin.x() + 1)); 997 EXPECT_EQ(0, 998 MaxBorderXIndex(gfx::Size(3, 3), 999 gfx::Rect(origin, gfx::Size(3, 3)), 1000 true, 1001 origin.x() + 2)); 1002 1003 EXPECT_EQ(0, 1004 MaxBorderXIndex(gfx::Size(3, 3), 1005 gfx::Rect(origin, gfx::Size(4, 3)), 1006 true, 1007 origin.x() + 0)); 1008 EXPECT_EQ(1, 1009 MaxBorderXIndex(gfx::Size(3, 3), 1010 gfx::Rect(origin, gfx::Size(4, 3)), 1011 true, 1012 origin.x() + 1)); 1013 EXPECT_EQ(1, 1014 MaxBorderXIndex(gfx::Size(3, 3), 1015 gfx::Rect(origin, gfx::Size(4, 3)), 1016 true, 1017 origin.x() + 2)); 1018 EXPECT_EQ(1, 1019 MaxBorderXIndex(gfx::Size(3, 3), 1020 gfx::Rect(origin, gfx::Size(4, 3)), 1021 true, 1022 origin.x() + 3)); 1023} 1024 1025TEST_P(TilingDataTest, TileYIndexFromSrcCoord) { 1026 gfx::Point origin = GetParam(); 1027 1028 EXPECT_EQ(0, 1029 YIndex(gfx::Size(3, 3), 1030 gfx::Rect(origin, gfx::Size(10, 10)), 1031 false, 1032 origin.y() + 0)); 1033 EXPECT_EQ(0, 1034 YIndex(gfx::Size(3, 3), 1035 gfx::Rect(origin, gfx::Size(10, 10)), 1036 false, 1037 origin.y() + 1)); 1038 EXPECT_EQ(0, 1039 YIndex(gfx::Size(3, 3), 1040 gfx::Rect(origin, gfx::Size(10, 10)), 1041 false, 1042 origin.y() + 2)); 1043 EXPECT_EQ(1, 1044 YIndex(gfx::Size(3, 3), 1045 gfx::Rect(origin, gfx::Size(10, 10)), 1046 false, 1047 origin.y() + 3)); 1048 EXPECT_EQ(1, 1049 YIndex(gfx::Size(3, 3), 1050 gfx::Rect(origin, gfx::Size(10, 10)), 1051 false, 1052 origin.y() + 4)); 1053 EXPECT_EQ(1, 1054 YIndex(gfx::Size(3, 3), 1055 gfx::Rect(origin, gfx::Size(10, 10)), 1056 false, 1057 origin.y() + 5)); 1058 EXPECT_EQ(2, 1059 YIndex(gfx::Size(3, 3), 1060 gfx::Rect(origin, gfx::Size(10, 10)), 1061 false, 1062 origin.y() + 6)); 1063 EXPECT_EQ(2, 1064 YIndex(gfx::Size(3, 3), 1065 gfx::Rect(origin, gfx::Size(10, 10)), 1066 false, 1067 origin.y() + 7)); 1068 EXPECT_EQ(2, 1069 YIndex(gfx::Size(3, 3), 1070 gfx::Rect(origin, gfx::Size(10, 10)), 1071 false, 1072 origin.y() + 8)); 1073 EXPECT_EQ(3, 1074 YIndex(gfx::Size(3, 3), 1075 gfx::Rect(origin, gfx::Size(10, 10)), 1076 false, 1077 origin.y() + 9)); 1078 EXPECT_EQ(3, 1079 YIndex(gfx::Size(3, 3), 1080 gfx::Rect(origin, gfx::Size(10, 10)), 1081 false, 1082 origin.y() + 10)); 1083 EXPECT_EQ(3, 1084 YIndex(gfx::Size(3, 3), 1085 gfx::Rect(origin, gfx::Size(10, 10)), 1086 false, 1087 origin.y() + 11)); 1088 1089 EXPECT_EQ(0, 1090 YIndex(gfx::Size(3, 3), 1091 gfx::Rect(origin, gfx::Size(10, 10)), 1092 true, 1093 origin.y() + 0)); 1094 EXPECT_EQ(0, 1095 YIndex(gfx::Size(3, 3), 1096 gfx::Rect(origin, gfx::Size(10, 10)), 1097 true, 1098 origin.y() + 1)); 1099 EXPECT_EQ(1, 1100 YIndex(gfx::Size(3, 3), 1101 gfx::Rect(origin, gfx::Size(10, 10)), 1102 true, 1103 origin.y() + 2)); 1104 EXPECT_EQ(2, 1105 YIndex(gfx::Size(3, 3), 1106 gfx::Rect(origin, gfx::Size(10, 10)), 1107 true, 1108 origin.y() + 3)); 1109 EXPECT_EQ(3, 1110 YIndex(gfx::Size(3, 3), 1111 gfx::Rect(origin, gfx::Size(10, 10)), 1112 true, 1113 origin.y() + 4)); 1114 EXPECT_EQ(4, 1115 YIndex(gfx::Size(3, 3), 1116 gfx::Rect(origin, gfx::Size(10, 10)), 1117 true, 1118 origin.y() + 5)); 1119 EXPECT_EQ(5, 1120 YIndex(gfx::Size(3, 3), 1121 gfx::Rect(origin, gfx::Size(10, 10)), 1122 true, 1123 origin.y() + 6)); 1124 EXPECT_EQ(6, 1125 YIndex(gfx::Size(3, 3), 1126 gfx::Rect(origin, gfx::Size(10, 10)), 1127 true, 1128 origin.y() + 7)); 1129 EXPECT_EQ(7, 1130 YIndex(gfx::Size(3, 3), 1131 gfx::Rect(origin, gfx::Size(10, 10)), 1132 true, 1133 origin.y() + 8)); 1134 EXPECT_EQ(7, 1135 YIndex(gfx::Size(3, 3), 1136 gfx::Rect(origin, gfx::Size(10, 10)), 1137 true, 1138 origin.y() + 9)); 1139 EXPECT_EQ(7, 1140 YIndex(gfx::Size(3, 3), 1141 gfx::Rect(origin, gfx::Size(10, 10)), 1142 true, 1143 origin.y() + 10)); 1144 EXPECT_EQ(7, 1145 YIndex(gfx::Size(3, 3), 1146 gfx::Rect(origin, gfx::Size(10, 10)), 1147 true, 1148 origin.y() + 11)); 1149 1150 EXPECT_EQ(0, 1151 YIndex(gfx::Size(1, 1), 1152 gfx::Rect(origin, gfx::Size(1, 1)), 1153 false, 1154 origin.y() + 0)); 1155 EXPECT_EQ(0, 1156 YIndex(gfx::Size(2, 2), 1157 gfx::Rect(origin, gfx::Size(2, 2)), 1158 false, 1159 origin.y() + 0)); 1160 EXPECT_EQ(0, 1161 YIndex(gfx::Size(2, 2), 1162 gfx::Rect(origin, gfx::Size(2, 2)), 1163 false, 1164 origin.y() + 1)); 1165 EXPECT_EQ(0, 1166 YIndex(gfx::Size(3, 3), 1167 gfx::Rect(origin, gfx::Size(3, 3)), 1168 false, 1169 origin.y() + 0)); 1170 EXPECT_EQ(0, 1171 YIndex(gfx::Size(3, 3), 1172 gfx::Rect(origin, gfx::Size(3, 3)), 1173 false, 1174 origin.y() + 1)); 1175 EXPECT_EQ(0, 1176 YIndex(gfx::Size(3, 3), 1177 gfx::Rect(origin, gfx::Size(3, 3)), 1178 false, 1179 origin.y() + 2)); 1180 1181 EXPECT_EQ(0, 1182 YIndex(gfx::Size(3, 3), 1183 gfx::Rect(origin, gfx::Size(3, 4)), 1184 false, 1185 origin.y() + 0)); 1186 EXPECT_EQ(0, 1187 YIndex(gfx::Size(3, 3), 1188 gfx::Rect(origin, gfx::Size(3, 4)), 1189 false, 1190 origin.y() + 1)); 1191 EXPECT_EQ(0, 1192 YIndex(gfx::Size(3, 3), 1193 gfx::Rect(origin, gfx::Size(3, 4)), 1194 false, 1195 origin.y() + 2)); 1196 EXPECT_EQ(1, 1197 YIndex(gfx::Size(3, 3), 1198 gfx::Rect(origin, gfx::Size(3, 4)), 1199 false, 1200 origin.y() + 3)); 1201 1202 EXPECT_EQ(0, 1203 YIndex(gfx::Size(1, 1), 1204 gfx::Rect(origin, gfx::Size(1, 1)), 1205 true, 1206 origin.y() + 0)); 1207 EXPECT_EQ(0, 1208 YIndex(gfx::Size(2, 2), 1209 gfx::Rect(origin, gfx::Size(2, 2)), 1210 true, 1211 origin.y() + 0)); 1212 EXPECT_EQ(0, 1213 YIndex(gfx::Size(2, 2), 1214 gfx::Rect(origin, gfx::Size(2, 2)), 1215 true, 1216 origin.y() + 1)); 1217 EXPECT_EQ(0, 1218 YIndex(gfx::Size(3, 3), 1219 gfx::Rect(origin, gfx::Size(3, 3)), 1220 true, 1221 origin.y() + 0)); 1222 EXPECT_EQ(0, 1223 YIndex(gfx::Size(3, 3), 1224 gfx::Rect(origin, gfx::Size(3, 3)), 1225 true, 1226 origin.y() + 1)); 1227 EXPECT_EQ(0, 1228 YIndex(gfx::Size(3, 3), 1229 gfx::Rect(origin, gfx::Size(3, 3)), 1230 true, 1231 origin.y() + 2)); 1232 1233 EXPECT_EQ(0, 1234 YIndex(gfx::Size(3, 3), 1235 gfx::Rect(origin, gfx::Size(3, 4)), 1236 true, 1237 origin.y() + 0)); 1238 EXPECT_EQ(0, 1239 YIndex(gfx::Size(3, 3), 1240 gfx::Rect(origin, gfx::Size(3, 4)), 1241 true, 1242 origin.y() + 1)); 1243 EXPECT_EQ(1, 1244 YIndex(gfx::Size(3, 3), 1245 gfx::Rect(origin, gfx::Size(3, 4)), 1246 true, 1247 origin.y() + 2)); 1248 EXPECT_EQ(1, 1249 YIndex(gfx::Size(3, 3), 1250 gfx::Rect(origin, gfx::Size(3, 4)), 1251 true, 1252 origin.y() + 3)); 1253} 1254 1255TEST_P(TilingDataTest, FirstBorderTileYIndexFromSrcCoord) { 1256 gfx::Point origin = GetParam(); 1257 1258 EXPECT_EQ(0, 1259 MinBorderYIndex(gfx::Size(3, 3), 1260 gfx::Rect(origin, gfx::Size(10, 10)), 1261 false, 1262 origin.y() + 0)); 1263 EXPECT_EQ(0, 1264 MinBorderYIndex(gfx::Size(3, 3), 1265 gfx::Rect(origin, gfx::Size(10, 10)), 1266 false, 1267 origin.y() + 1)); 1268 EXPECT_EQ(0, 1269 MinBorderYIndex(gfx::Size(3, 3), 1270 gfx::Rect(origin, gfx::Size(10, 10)), 1271 false, 1272 origin.y() + 2)); 1273 EXPECT_EQ(1, 1274 MinBorderYIndex(gfx::Size(3, 3), 1275 gfx::Rect(origin, gfx::Size(10, 10)), 1276 false, 1277 origin.y() + 3)); 1278 EXPECT_EQ(1, 1279 MinBorderYIndex(gfx::Size(3, 3), 1280 gfx::Rect(origin, gfx::Size(10, 10)), 1281 false, 1282 origin.y() + 4)); 1283 EXPECT_EQ(1, 1284 MinBorderYIndex(gfx::Size(3, 3), 1285 gfx::Rect(origin, gfx::Size(10, 10)), 1286 false, 1287 origin.y() + 5)); 1288 EXPECT_EQ(2, 1289 MinBorderYIndex(gfx::Size(3, 3), 1290 gfx::Rect(origin, gfx::Size(10, 10)), 1291 false, 1292 origin.y() + 6)); 1293 EXPECT_EQ(2, 1294 MinBorderYIndex(gfx::Size(3, 3), 1295 gfx::Rect(origin, gfx::Size(10, 10)), 1296 false, 1297 origin.y() + 7)); 1298 EXPECT_EQ(2, 1299 MinBorderYIndex(gfx::Size(3, 3), 1300 gfx::Rect(origin, gfx::Size(10, 10)), 1301 false, 1302 origin.y() + 8)); 1303 EXPECT_EQ(3, 1304 MinBorderYIndex(gfx::Size(3, 3), 1305 gfx::Rect(origin, gfx::Size(10, 10)), 1306 false, 1307 origin.y() + 9)); 1308 EXPECT_EQ(3, 1309 MinBorderYIndex(gfx::Size(3, 3), 1310 gfx::Rect(origin, gfx::Size(10, 10)), 1311 false, 1312 origin.y() + 10)); 1313 EXPECT_EQ(3, 1314 MinBorderYIndex(gfx::Size(3, 3), 1315 gfx::Rect(origin, gfx::Size(10, 10)), 1316 false, 1317 origin.y() + 11)); 1318 1319 EXPECT_EQ(0, 1320 MinBorderYIndex(gfx::Size(3, 3), 1321 gfx::Rect(origin, gfx::Size(10, 10)), 1322 true, 1323 origin.y() + 0)); 1324 EXPECT_EQ(0, 1325 MinBorderYIndex(gfx::Size(3, 3), 1326 gfx::Rect(origin, gfx::Size(10, 10)), 1327 true, 1328 origin.y() + 1)); 1329 EXPECT_EQ(0, 1330 MinBorderYIndex(gfx::Size(3, 3), 1331 gfx::Rect(origin, gfx::Size(10, 10)), 1332 true, 1333 origin.y() + 2)); 1334 EXPECT_EQ(1, 1335 MinBorderYIndex(gfx::Size(3, 3), 1336 gfx::Rect(origin, gfx::Size(10, 10)), 1337 true, 1338 origin.y() + 3)); 1339 EXPECT_EQ(2, 1340 MinBorderYIndex(gfx::Size(3, 3), 1341 gfx::Rect(origin, gfx::Size(10, 10)), 1342 true, 1343 origin.y() + 4)); 1344 EXPECT_EQ(3, 1345 MinBorderYIndex(gfx::Size(3, 3), 1346 gfx::Rect(origin, gfx::Size(10, 10)), 1347 true, 1348 origin.y() + 5)); 1349 EXPECT_EQ(4, 1350 MinBorderYIndex(gfx::Size(3, 3), 1351 gfx::Rect(origin, gfx::Size(10, 10)), 1352 true, 1353 origin.y() + 6)); 1354 EXPECT_EQ(5, 1355 MinBorderYIndex(gfx::Size(3, 3), 1356 gfx::Rect(origin, gfx::Size(10, 10)), 1357 true, 1358 origin.y() + 7)); 1359 EXPECT_EQ(6, 1360 MinBorderYIndex(gfx::Size(3, 3), 1361 gfx::Rect(origin, gfx::Size(10, 10)), 1362 true, 1363 origin.y() + 8)); 1364 EXPECT_EQ(7, 1365 MinBorderYIndex(gfx::Size(3, 3), 1366 gfx::Rect(origin, gfx::Size(10, 10)), 1367 true, 1368 origin.y() + 9)); 1369 EXPECT_EQ(7, 1370 MinBorderYIndex(gfx::Size(3, 3), 1371 gfx::Rect(origin, gfx::Size(10, 10)), 1372 true, 1373 origin.y() + 10)); 1374 EXPECT_EQ(7, 1375 MinBorderYIndex(gfx::Size(3, 3), 1376 gfx::Rect(origin, gfx::Size(10, 10)), 1377 true, 1378 origin.y() + 11)); 1379 1380 EXPECT_EQ(0, 1381 MinBorderYIndex(gfx::Size(1, 1), 1382 gfx::Rect(origin, gfx::Size(1, 1)), 1383 false, 1384 origin.y() + 0)); 1385 EXPECT_EQ(0, 1386 MinBorderYIndex(gfx::Size(2, 2), 1387 gfx::Rect(origin, gfx::Size(2, 2)), 1388 false, 1389 origin.y() + 0)); 1390 EXPECT_EQ(0, 1391 MinBorderYIndex(gfx::Size(2, 2), 1392 gfx::Rect(origin, gfx::Size(2, 2)), 1393 false, 1394 origin.y() + 1)); 1395 EXPECT_EQ(0, 1396 MinBorderYIndex(gfx::Size(3, 3), 1397 gfx::Rect(origin, gfx::Size(3, 3)), 1398 false, 1399 origin.y() + 0)); 1400 EXPECT_EQ(0, 1401 MinBorderYIndex(gfx::Size(3, 3), 1402 gfx::Rect(origin, gfx::Size(3, 3)), 1403 false, 1404 origin.y() + 1)); 1405 EXPECT_EQ(0, 1406 MinBorderYIndex(gfx::Size(3, 3), 1407 gfx::Rect(origin, gfx::Size(3, 3)), 1408 false, 1409 origin.y() + 2)); 1410 1411 EXPECT_EQ(0, 1412 MinBorderYIndex(gfx::Size(3, 3), 1413 gfx::Rect(origin, gfx::Size(3, 4)), 1414 false, 1415 origin.y() + 0)); 1416 EXPECT_EQ(0, 1417 MinBorderYIndex(gfx::Size(3, 3), 1418 gfx::Rect(origin, gfx::Size(3, 4)), 1419 false, 1420 origin.y() + 1)); 1421 EXPECT_EQ(0, 1422 MinBorderYIndex(gfx::Size(3, 3), 1423 gfx::Rect(origin, gfx::Size(3, 4)), 1424 false, 1425 origin.y() + 2)); 1426 EXPECT_EQ(1, 1427 MinBorderYIndex(gfx::Size(3, 3), 1428 gfx::Rect(origin, gfx::Size(3, 4)), 1429 false, 1430 origin.y() + 3)); 1431 1432 EXPECT_EQ(0, 1433 MinBorderYIndex(gfx::Size(1, 1), 1434 gfx::Rect(origin, gfx::Size(1, 1)), 1435 true, 1436 origin.y() + 0)); 1437 EXPECT_EQ(0, 1438 MinBorderYIndex(gfx::Size(2, 2), 1439 gfx::Rect(origin, gfx::Size(2, 2)), 1440 true, 1441 origin.y() + 0)); 1442 EXPECT_EQ(0, 1443 MinBorderYIndex(gfx::Size(2, 2), 1444 gfx::Rect(origin, gfx::Size(2, 2)), 1445 true, 1446 origin.y() + 1)); 1447 EXPECT_EQ(0, 1448 MinBorderYIndex(gfx::Size(3, 3), 1449 gfx::Rect(origin, gfx::Size(3, 3)), 1450 true, 1451 origin.y() + 0)); 1452 EXPECT_EQ(0, 1453 MinBorderYIndex(gfx::Size(3, 3), 1454 gfx::Rect(origin, gfx::Size(3, 3)), 1455 true, 1456 origin.y() + 1)); 1457 EXPECT_EQ(0, 1458 MinBorderYIndex(gfx::Size(3, 3), 1459 gfx::Rect(origin, gfx::Size(3, 3)), 1460 true, 1461 origin.y() + 2)); 1462 1463 EXPECT_EQ(0, 1464 MinBorderYIndex(gfx::Size(3, 3), 1465 gfx::Rect(origin, gfx::Size(3, 4)), 1466 true, 1467 origin.y() + 0)); 1468 EXPECT_EQ(0, 1469 MinBorderYIndex(gfx::Size(3, 3), 1470 gfx::Rect(origin, gfx::Size(3, 4)), 1471 true, 1472 origin.y() + 1)); 1473 EXPECT_EQ(0, 1474 MinBorderYIndex(gfx::Size(3, 3), 1475 gfx::Rect(origin, gfx::Size(3, 4)), 1476 true, 1477 origin.y() + 2)); 1478 EXPECT_EQ(1, 1479 MinBorderYIndex(gfx::Size(3, 3), 1480 gfx::Rect(origin, gfx::Size(3, 4)), 1481 true, 1482 origin.y() + 3)); 1483} 1484 1485TEST_P(TilingDataTest, LastBorderTileYIndexFromSrcCoord) { 1486 gfx::Point origin = GetParam(); 1487 1488 EXPECT_EQ(0, 1489 MaxBorderYIndex(gfx::Size(3, 3), 1490 gfx::Rect(origin, gfx::Size(10, 10)), 1491 false, 1492 origin.y() + 0)); 1493 EXPECT_EQ(0, 1494 MaxBorderYIndex(gfx::Size(3, 3), 1495 gfx::Rect(origin, gfx::Size(10, 10)), 1496 false, 1497 origin.y() + 1)); 1498 EXPECT_EQ(0, 1499 MaxBorderYIndex(gfx::Size(3, 3), 1500 gfx::Rect(origin, gfx::Size(10, 10)), 1501 false, 1502 origin.y() + 2)); 1503 EXPECT_EQ(1, 1504 MaxBorderYIndex(gfx::Size(3, 3), 1505 gfx::Rect(origin, gfx::Size(10, 10)), 1506 false, 1507 origin.y() + 3)); 1508 EXPECT_EQ(1, 1509 MaxBorderYIndex(gfx::Size(3, 3), 1510 gfx::Rect(origin, gfx::Size(10, 10)), 1511 false, 1512 origin.y() + 4)); 1513 EXPECT_EQ(1, 1514 MaxBorderYIndex(gfx::Size(3, 3), 1515 gfx::Rect(origin, gfx::Size(10, 10)), 1516 false, 1517 origin.y() + 5)); 1518 EXPECT_EQ(2, 1519 MaxBorderYIndex(gfx::Size(3, 3), 1520 gfx::Rect(origin, gfx::Size(10, 10)), 1521 false, 1522 origin.y() + 6)); 1523 EXPECT_EQ(2, 1524 MaxBorderYIndex(gfx::Size(3, 3), 1525 gfx::Rect(origin, gfx::Size(10, 10)), 1526 false, 1527 origin.y() + 7)); 1528 EXPECT_EQ(2, 1529 MaxBorderYIndex(gfx::Size(3, 3), 1530 gfx::Rect(origin, gfx::Size(10, 10)), 1531 false, 1532 origin.y() + 8)); 1533 EXPECT_EQ(3, 1534 MaxBorderYIndex(gfx::Size(3, 3), 1535 gfx::Rect(origin, gfx::Size(10, 10)), 1536 false, 1537 origin.y() + 9)); 1538 EXPECT_EQ(3, 1539 MaxBorderYIndex(gfx::Size(3, 3), 1540 gfx::Rect(origin, gfx::Size(10, 10)), 1541 false, 1542 origin.y() + 10)); 1543 EXPECT_EQ(3, 1544 MaxBorderYIndex(gfx::Size(3, 3), 1545 gfx::Rect(origin, gfx::Size(10, 10)), 1546 false, 1547 origin.y() + 11)); 1548 1549 EXPECT_EQ(0, 1550 MaxBorderYIndex(gfx::Size(3, 3), 1551 gfx::Rect(origin, gfx::Size(10, 10)), 1552 true, 1553 origin.y() + 0)); 1554 EXPECT_EQ(1, 1555 MaxBorderYIndex(gfx::Size(3, 3), 1556 gfx::Rect(origin, gfx::Size(10, 10)), 1557 true, 1558 origin.y() + 1)); 1559 EXPECT_EQ(2, 1560 MaxBorderYIndex(gfx::Size(3, 3), 1561 gfx::Rect(origin, gfx::Size(10, 10)), 1562 true, 1563 origin.y() + 2)); 1564 EXPECT_EQ(3, 1565 MaxBorderYIndex(gfx::Size(3, 3), 1566 gfx::Rect(origin, gfx::Size(10, 10)), 1567 true, 1568 origin.y() + 3)); 1569 EXPECT_EQ(4, 1570 MaxBorderYIndex(gfx::Size(3, 3), 1571 gfx::Rect(origin, gfx::Size(10, 10)), 1572 true, 1573 origin.y() + 4)); 1574 EXPECT_EQ(5, 1575 MaxBorderYIndex(gfx::Size(3, 3), 1576 gfx::Rect(origin, gfx::Size(10, 10)), 1577 true, 1578 origin.y() + 5)); 1579 EXPECT_EQ(6, 1580 MaxBorderYIndex(gfx::Size(3, 3), 1581 gfx::Rect(origin, gfx::Size(10, 10)), 1582 true, 1583 origin.y() + 6)); 1584 EXPECT_EQ(7, 1585 MaxBorderYIndex(gfx::Size(3, 3), 1586 gfx::Rect(origin, gfx::Size(10, 10)), 1587 true, 1588 origin.y() + 7)); 1589 EXPECT_EQ(7, 1590 MaxBorderYIndex(gfx::Size(3, 3), 1591 gfx::Rect(origin, gfx::Size(10, 10)), 1592 true, 1593 origin.y() + 8)); 1594 EXPECT_EQ(7, 1595 MaxBorderYIndex(gfx::Size(3, 3), 1596 gfx::Rect(origin, gfx::Size(10, 10)), 1597 true, 1598 origin.y() + 9)); 1599 EXPECT_EQ(7, 1600 MaxBorderYIndex(gfx::Size(3, 3), 1601 gfx::Rect(origin, gfx::Size(10, 10)), 1602 true, 1603 origin.y() + 10)); 1604 EXPECT_EQ(7, 1605 MaxBorderYIndex(gfx::Size(3, 3), 1606 gfx::Rect(origin, gfx::Size(10, 10)), 1607 true, 1608 origin.y() + 11)); 1609 1610 EXPECT_EQ(0, 1611 MaxBorderYIndex(gfx::Size(1, 1), 1612 gfx::Rect(origin, gfx::Size(1, 1)), 1613 false, 1614 origin.y() + 0)); 1615 EXPECT_EQ(0, 1616 MaxBorderYIndex(gfx::Size(2, 2), 1617 gfx::Rect(origin, gfx::Size(2, 2)), 1618 false, 1619 origin.y() + 0)); 1620 EXPECT_EQ(0, 1621 MaxBorderYIndex(gfx::Size(2, 2), 1622 gfx::Rect(origin, gfx::Size(2, 2)), 1623 false, 1624 origin.y() + 1)); 1625 EXPECT_EQ(0, 1626 MaxBorderYIndex(gfx::Size(3, 3), 1627 gfx::Rect(origin, gfx::Size(3, 3)), 1628 false, 1629 origin.y() + 0)); 1630 EXPECT_EQ(0, 1631 MaxBorderYIndex(gfx::Size(3, 3), 1632 gfx::Rect(origin, gfx::Size(3, 3)), 1633 false, 1634 origin.y() + 1)); 1635 EXPECT_EQ(0, 1636 MaxBorderYIndex(gfx::Size(3, 3), 1637 gfx::Rect(origin, gfx::Size(3, 3)), 1638 false, 1639 origin.y() + 2)); 1640 1641 EXPECT_EQ(0, 1642 MaxBorderYIndex(gfx::Size(3, 3), 1643 gfx::Rect(origin, gfx::Size(3, 4)), 1644 false, 1645 origin.y() + 0)); 1646 EXPECT_EQ(0, 1647 MaxBorderYIndex(gfx::Size(3, 3), 1648 gfx::Rect(origin, gfx::Size(3, 4)), 1649 false, 1650 origin.y() + 1)); 1651 EXPECT_EQ(0, 1652 MaxBorderYIndex(gfx::Size(3, 3), 1653 gfx::Rect(origin, gfx::Size(3, 4)), 1654 false, 1655 origin.y() + 2)); 1656 EXPECT_EQ(1, 1657 MaxBorderYIndex(gfx::Size(3, 3), 1658 gfx::Rect(origin, gfx::Size(3, 4)), 1659 false, 1660 origin.y() + 3)); 1661 1662 EXPECT_EQ(0, 1663 MaxBorderYIndex(gfx::Size(1, 1), 1664 gfx::Rect(origin, gfx::Size(1, 1)), 1665 true, 1666 origin.y() + 0)); 1667 EXPECT_EQ(0, 1668 MaxBorderYIndex(gfx::Size(2, 2), 1669 gfx::Rect(origin, gfx::Size(2, 2)), 1670 true, 1671 origin.y() + 0)); 1672 EXPECT_EQ(0, 1673 MaxBorderYIndex(gfx::Size(2, 2), 1674 gfx::Rect(origin, gfx::Size(2, 2)), 1675 true, 1676 origin.y() + 1)); 1677 EXPECT_EQ(0, 1678 MaxBorderYIndex(gfx::Size(3, 3), 1679 gfx::Rect(origin, gfx::Size(3, 3)), 1680 true, 1681 origin.y() + 0)); 1682 EXPECT_EQ(0, 1683 MaxBorderYIndex(gfx::Size(3, 3), 1684 gfx::Rect(origin, gfx::Size(3, 3)), 1685 true, 1686 origin.y() + 1)); 1687 EXPECT_EQ(0, 1688 MaxBorderYIndex(gfx::Size(3, 3), 1689 gfx::Rect(origin, gfx::Size(3, 3)), 1690 true, 1691 origin.y() + 2)); 1692 1693 EXPECT_EQ(0, 1694 MaxBorderYIndex(gfx::Size(3, 3), 1695 gfx::Rect(origin, gfx::Size(3, 4)), 1696 true, 1697 origin.y() + 0)); 1698 EXPECT_EQ(1, 1699 MaxBorderYIndex(gfx::Size(3, 3), 1700 gfx::Rect(origin, gfx::Size(3, 4)), 1701 true, 1702 origin.y() + 1)); 1703 EXPECT_EQ(1, 1704 MaxBorderYIndex(gfx::Size(3, 3), 1705 gfx::Rect(origin, gfx::Size(3, 4)), 1706 true, 1707 origin.y() + 2)); 1708 EXPECT_EQ(1, 1709 MaxBorderYIndex(gfx::Size(3, 3), 1710 gfx::Rect(origin, gfx::Size(3, 4)), 1711 true, 1712 origin.y() + 3)); 1713} 1714 1715TEST_P(TilingDataTest, TileSizeX) { 1716 gfx::Point origin = GetParam(); 1717 1718 EXPECT_EQ( 1719 5, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), false, 0)); 1720 EXPECT_EQ( 1721 5, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), true, 0)); 1722 1723 EXPECT_EQ( 1724 5, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), false, 0)); 1725 EXPECT_EQ( 1726 1, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), false, 1)); 1727 EXPECT_EQ( 1728 4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), true, 0)); 1729 EXPECT_EQ( 1730 2, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), true, 1)); 1731 1732 EXPECT_EQ( 1733 5, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), false, 0)); 1734 EXPECT_EQ( 1735 3, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), false, 1)); 1736 EXPECT_EQ( 1737 4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), true, 0)); 1738 EXPECT_EQ( 1739 4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), true, 1)); 1740 1741 EXPECT_EQ( 1742 5, 1743 SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), false, 0)); 1744 EXPECT_EQ( 1745 5, 1746 SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), false, 1)); 1747 EXPECT_EQ( 1748 4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 0)); 1749 EXPECT_EQ( 1750 3, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 1)); 1751 EXPECT_EQ( 1752 3, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 2)); 1753 1754 EXPECT_EQ( 1755 4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(11, 11)), true, 2)); 1756 EXPECT_EQ( 1757 3, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(12, 12)), true, 2)); 1758 1759 EXPECT_EQ( 1760 3, SizeX(gfx::Size(5, 9), gfx::Rect(origin, gfx::Size(12, 17)), true, 2)); 1761} 1762 1763TEST_P(TilingDataTest, TileSizeY) { 1764 gfx::Point origin = GetParam(); 1765 1766 EXPECT_EQ( 1767 5, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), false, 0)); 1768 EXPECT_EQ( 1769 5, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), true, 0)); 1770 1771 EXPECT_EQ( 1772 5, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), false, 0)); 1773 EXPECT_EQ( 1774 1, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), false, 1)); 1775 EXPECT_EQ( 1776 4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), true, 0)); 1777 EXPECT_EQ( 1778 2, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), true, 1)); 1779 1780 EXPECT_EQ( 1781 5, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), false, 0)); 1782 EXPECT_EQ( 1783 3, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), false, 1)); 1784 EXPECT_EQ( 1785 4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), true, 0)); 1786 EXPECT_EQ( 1787 4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), true, 1)); 1788 1789 EXPECT_EQ( 1790 5, 1791 SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), false, 0)); 1792 EXPECT_EQ( 1793 5, 1794 SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), false, 1)); 1795 EXPECT_EQ( 1796 4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 0)); 1797 EXPECT_EQ( 1798 3, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 1)); 1799 EXPECT_EQ( 1800 3, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 2)); 1801 1802 EXPECT_EQ( 1803 4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(11, 11)), true, 2)); 1804 EXPECT_EQ( 1805 3, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(12, 12)), true, 2)); 1806 1807 EXPECT_EQ( 1808 3, SizeY(gfx::Size(9, 5), gfx::Rect(origin, gfx::Size(17, 12)), true, 2)); 1809} 1810 1811TEST_P(TilingDataTest, TileSizeX_and_TilePositionX) { 1812 gfx::Point origin = GetParam(); 1813 1814 // Single tile cases: 1815 EXPECT_EQ( 1816 1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), false, 0)); 1817 EXPECT_EQ( 1818 origin.x(), 1819 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), false, 0)); 1820 EXPECT_EQ( 1821 1, 1822 SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 100)), false, 0)); 1823 EXPECT_EQ( 1824 origin.x(), 1825 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 100)), false, 0)); 1826 EXPECT_EQ( 1827 3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 1)), false, 0)); 1828 EXPECT_EQ( 1829 origin.x(), 1830 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 1)), false, 0)); 1831 EXPECT_EQ( 1832 3, 1833 SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 100)), false, 0)); 1834 EXPECT_EQ( 1835 origin.x(), 1836 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 100)), false, 0)); 1837 EXPECT_EQ( 1838 1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), true, 0)); 1839 EXPECT_EQ(origin.x(), 1840 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), true, 0)); 1841 EXPECT_EQ( 1842 1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 100)), true, 0)); 1843 EXPECT_EQ( 1844 origin.x(), 1845 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 100)), true, 0)); 1846 EXPECT_EQ( 1847 3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 1)), true, 0)); 1848 EXPECT_EQ(origin.x(), 1849 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 1)), true, 0)); 1850 EXPECT_EQ( 1851 3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 100)), true, 0)); 1852 EXPECT_EQ( 1853 origin.x(), 1854 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 100)), true, 0)); 1855 1856 // Multiple tiles: 1857 // no border 1858 // positions 0, 3 1859 EXPECT_EQ( 1860 2, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false)); 1861 EXPECT_EQ( 1862 3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false, 0)); 1863 EXPECT_EQ( 1864 3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false, 1)); 1865 EXPECT_EQ( 1866 origin.x() + 0, 1867 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false, 0)); 1868 EXPECT_EQ( 1869 origin.x() + 3, 1870 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false, 1)); 1871 EXPECT_EQ( 1872 3, 1873 SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 100)), false, 0)); 1874 EXPECT_EQ( 1875 3, 1876 SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 100)), false, 1)); 1877 EXPECT_EQ( 1878 origin.x() + 0, 1879 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 100)), false, 0)); 1880 EXPECT_EQ( 1881 origin.x() + 3, 1882 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 100)), false, 1)); 1883 1884 // Multiple tiles: 1885 // with border 1886 // positions 0, 2, 3, 4 1887 EXPECT_EQ( 1888 4, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true)); 1889 EXPECT_EQ( 1890 2, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 0)); 1891 EXPECT_EQ( 1892 1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 1)); 1893 EXPECT_EQ( 1894 1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 2)); 1895 EXPECT_EQ( 1896 2, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 3)); 1897 EXPECT_EQ(origin.x() + 0, 1898 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 0)); 1899 EXPECT_EQ(origin.x() + 2, 1900 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 1)); 1901 EXPECT_EQ(origin.x() + 3, 1902 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 2)); 1903 EXPECT_EQ(origin.x() + 4, 1904 PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 3)); 1905 EXPECT_EQ( 1906 2, SizeX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 0)); 1907 EXPECT_EQ( 1908 1, SizeX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 1)); 1909 EXPECT_EQ( 1910 1, SizeX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 2)); 1911 EXPECT_EQ( 1912 2, SizeX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 3)); 1913 EXPECT_EQ( 1914 origin.x() + 0, 1915 PosX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 0)); 1916 EXPECT_EQ( 1917 origin.x() + 2, 1918 PosX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 1)); 1919 EXPECT_EQ( 1920 origin.x() + 3, 1921 PosX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 2)); 1922 EXPECT_EQ( 1923 origin.x() + 4, 1924 PosX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 3)); 1925} 1926 1927TEST_P(TilingDataTest, TileSizeY_and_TilePositionY) { 1928 gfx::Point origin = GetParam(); 1929 1930 // Single tile cases: 1931 EXPECT_EQ( 1932 1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), false, 0)); 1933 EXPECT_EQ( 1934 origin.y(), 1935 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), false, 0)); 1936 EXPECT_EQ( 1937 1, 1938 SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 1)), false, 0)); 1939 EXPECT_EQ( 1940 origin.y(), 1941 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 1)), false, 0)); 1942 EXPECT_EQ( 1943 3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), false, 0)); 1944 EXPECT_EQ( 1945 origin.y(), 1946 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), false, 0)); 1947 EXPECT_EQ( 1948 3, 1949 SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 3)), false, 0)); 1950 EXPECT_EQ( 1951 origin.y(), 1952 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 3)), false, 0)); 1953 EXPECT_EQ( 1954 1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), true, 0)); 1955 EXPECT_EQ(origin.y(), 1956 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), true, 0)); 1957 EXPECT_EQ( 1958 1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 1)), true, 0)); 1959 EXPECT_EQ( 1960 origin.y(), 1961 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 1)), true, 0)); 1962 EXPECT_EQ( 1963 3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), true, 0)); 1964 EXPECT_EQ(origin.y(), 1965 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), true, 0)); 1966 EXPECT_EQ( 1967 3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 3)), true, 0)); 1968 EXPECT_EQ( 1969 origin.y(), 1970 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 3)), true, 0)); 1971 1972 // Multiple tiles: 1973 // no border 1974 // positions 0, 3 1975 EXPECT_EQ( 1976 2, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false)); 1977 EXPECT_EQ( 1978 3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false, 0)); 1979 EXPECT_EQ( 1980 3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false, 1)); 1981 EXPECT_EQ( 1982 origin.y() + 0, 1983 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false, 0)); 1984 EXPECT_EQ( 1985 origin.y() + 3, 1986 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false, 1)); 1987 EXPECT_EQ( 1988 3, 1989 SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 6)), false, 0)); 1990 EXPECT_EQ( 1991 3, 1992 SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 6)), false, 1)); 1993 EXPECT_EQ( 1994 origin.y() + 0, 1995 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 6)), false, 0)); 1996 EXPECT_EQ( 1997 origin.y() + 3, 1998 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 6)), false, 1)); 1999 2000 // Multiple tiles: 2001 // with border 2002 // positions 0, 2, 3, 4 2003 EXPECT_EQ( 2004 4, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true)); 2005 EXPECT_EQ( 2006 2, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 0)); 2007 EXPECT_EQ( 2008 1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 1)); 2009 EXPECT_EQ( 2010 1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 2)); 2011 EXPECT_EQ( 2012 2, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 3)); 2013 EXPECT_EQ(origin.y() + 0, 2014 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 0)); 2015 EXPECT_EQ(origin.y() + 2, 2016 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 1)); 2017 EXPECT_EQ(origin.y() + 3, 2018 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 2)); 2019 EXPECT_EQ(origin.y() + 4, 2020 PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 3)); 2021 EXPECT_EQ( 2022 2, SizeY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 0)); 2023 EXPECT_EQ( 2024 1, SizeY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 1)); 2025 EXPECT_EQ( 2026 1, SizeY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 2)); 2027 EXPECT_EQ( 2028 2, SizeY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 3)); 2029 EXPECT_EQ( 2030 origin.y() + 0, 2031 PosY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 0)); 2032 EXPECT_EQ( 2033 origin.y() + 2, 2034 PosY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 1)); 2035 EXPECT_EQ( 2036 origin.y() + 3, 2037 PosY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 2)); 2038 EXPECT_EQ( 2039 origin.y() + 4, 2040 PosY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 3)); 2041} 2042 2043TEST_P(TilingDataTest, SetTotalSize) { 2044 gfx::Point origin = GetParam(); 2045 2046 TilingData data(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), false); 2047 EXPECT_EQ(origin.x(), data.tiling_rect().x()); 2048 EXPECT_EQ(origin.y(), data.tiling_rect().y()); 2049 EXPECT_EQ(5, data.tiling_rect().width()); 2050 EXPECT_EQ(5, data.tiling_rect().height()); 2051 EXPECT_EQ(1, data.num_tiles_x()); 2052 EXPECT_EQ(5, data.TileSizeX(0)); 2053 EXPECT_EQ(1, data.num_tiles_y()); 2054 EXPECT_EQ(5, data.TileSizeY(0)); 2055 2056 data.SetTilingRect(gfx::Rect(36, 82, 6, 5)); 2057 EXPECT_EQ(36, data.tiling_rect().x()); 2058 EXPECT_EQ(82, data.tiling_rect().y()); 2059 EXPECT_EQ(6, data.tiling_rect().width()); 2060 EXPECT_EQ(5, data.tiling_rect().height()); 2061 EXPECT_EQ(2, data.num_tiles_x()); 2062 EXPECT_EQ(5, data.TileSizeX(0)); 2063 EXPECT_EQ(1, data.TileSizeX(1)); 2064 EXPECT_EQ(1, data.num_tiles_y()); 2065 EXPECT_EQ(5, data.TileSizeY(0)); 2066 2067 data.SetTilingRect(gfx::Rect(4, 22, 5, 12)); 2068 EXPECT_EQ(4, data.tiling_rect().x()); 2069 EXPECT_EQ(22, data.tiling_rect().y()); 2070 EXPECT_EQ(5, data.tiling_rect().width()); 2071 EXPECT_EQ(12, data.tiling_rect().height()); 2072 EXPECT_EQ(1, data.num_tiles_x()); 2073 EXPECT_EQ(5, data.TileSizeX(0)); 2074 EXPECT_EQ(3, data.num_tiles_y()); 2075 EXPECT_EQ(5, data.TileSizeY(0)); 2076 EXPECT_EQ(5, data.TileSizeY(1)); 2077 EXPECT_EQ(2, data.TileSizeY(2)); 2078} 2079 2080TEST_P(TilingDataTest, SetMaxTextureSizeNoBorders) { 2081 gfx::Point origin = GetParam(); 2082 2083 TilingData data(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 32)), false); 2084 EXPECT_EQ(2, data.num_tiles_x()); 2085 EXPECT_EQ(4, data.num_tiles_y()); 2086 2087 data.SetMaxTextureSize(gfx::Size(32, 32)); 2088 EXPECT_EQ(gfx::Size(32, 32), data.max_texture_size()); 2089 EXPECT_EQ(1, data.num_tiles_x()); 2090 EXPECT_EQ(1, data.num_tiles_y()); 2091 2092 data.SetMaxTextureSize(gfx::Size(2, 2)); 2093 EXPECT_EQ(gfx::Size(2, 2), data.max_texture_size()); 2094 EXPECT_EQ(8, data.num_tiles_x()); 2095 EXPECT_EQ(16, data.num_tiles_y()); 2096 2097 data.SetMaxTextureSize(gfx::Size(5, 5)); 2098 EXPECT_EQ(gfx::Size(5, 5), data.max_texture_size()); 2099 EXPECT_EQ(4, data.num_tiles_x()); 2100 EXPECT_EQ(7, data.num_tiles_y()); 2101 2102 data.SetMaxTextureSize(gfx::Size(8, 5)); 2103 EXPECT_EQ(gfx::Size(8, 5), data.max_texture_size()); 2104 EXPECT_EQ(2, data.num_tiles_x()); 2105 EXPECT_EQ(7, data.num_tiles_y()); 2106} 2107 2108TEST_P(TilingDataTest, SetMaxTextureSizeBorders) { 2109 gfx::Point origin = GetParam(); 2110 2111 TilingData data(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 32)), true); 2112 EXPECT_EQ(3, data.num_tiles_x()); 2113 EXPECT_EQ(5, data.num_tiles_y()); 2114 2115 data.SetMaxTextureSize(gfx::Size(32, 32)); 2116 EXPECT_EQ(gfx::Size(32, 32), data.max_texture_size()); 2117 EXPECT_EQ(1, data.num_tiles_x()); 2118 EXPECT_EQ(1, data.num_tiles_y()); 2119 2120 data.SetMaxTextureSize(gfx::Size(2, 2)); 2121 EXPECT_EQ(gfx::Size(2, 2), data.max_texture_size()); 2122 EXPECT_EQ(0, data.num_tiles_x()); 2123 EXPECT_EQ(0, data.num_tiles_y()); 2124 2125 data.SetMaxTextureSize(gfx::Size(5, 5)); 2126 EXPECT_EQ(gfx::Size(5, 5), data.max_texture_size()); 2127 EXPECT_EQ(5, data.num_tiles_x()); 2128 EXPECT_EQ(10, data.num_tiles_y()); 2129 2130 data.SetMaxTextureSize(gfx::Size(8, 5)); 2131 EXPECT_EQ(gfx::Size(8, 5), data.max_texture_size()); 2132 EXPECT_EQ(3, data.num_tiles_x()); 2133 EXPECT_EQ(10, data.num_tiles_y()); 2134} 2135 2136TEST_P(TilingDataTest, ExpandRectToTileBoundsWithBordersEmpty) { 2137 gfx::Point origin = GetParam(); 2138 TilingData empty_total_size( 2139 gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(8, 8)), true); 2140 EXPECT_RECT_EQ( 2141 gfx::Rect(), 2142 empty_total_size.ExpandRectToTileBoundsWithBorders(gfx::Rect())); 2143 EXPECT_RECT_EQ(gfx::Rect(), 2144 empty_total_size.ExpandRectToTileBoundsWithBorders( 2145 gfx::Rect(100, 100, 100, 100))); 2146 EXPECT_RECT_EQ(gfx::Rect(), 2147 empty_total_size.ExpandRectToTileBoundsWithBorders( 2148 gfx::Rect(0, 0, 100, 100))); 2149 2150 TilingData empty_max_texture_size( 2151 gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(0, 0)), true); 2152 EXPECT_RECT_EQ( 2153 gfx::Rect(), 2154 empty_max_texture_size.ExpandRectToTileBoundsWithBorders(gfx::Rect())); 2155 EXPECT_RECT_EQ(gfx::Rect(), 2156 empty_max_texture_size.ExpandRectToTileBoundsWithBorders( 2157 gfx::Rect(100, 100, 100, 100))); 2158 EXPECT_RECT_EQ(gfx::Rect(), 2159 empty_max_texture_size.ExpandRectToTileBoundsWithBorders( 2160 gfx::Rect(0, 0, 100, 100))); 2161} 2162 2163TEST_P(TilingDataTest, ExpandRectToTileBoundsWithBorders) { 2164 gfx::Point origin = GetParam(); 2165 TilingData data(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(16, 32)), true); 2166 2167 // Small rect at origin rounds up to tile 0, 0. 2168 gfx::Rect at_origin_src(origin, gfx::Size(1, 1)); 2169 gfx::Rect at_origin_result(data.TileBoundsWithBorder(0, 0)); 2170 EXPECT_NE(at_origin_src, at_origin_result); 2171 EXPECT_RECT_EQ(at_origin_result, 2172 data.ExpandRectToTileBoundsWithBorders(at_origin_src)); 2173 2174 // Arbitrary internal rect. 2175 gfx::Rect rect_src(origin.x() + 6, origin.y() + 6, 1, 3); 2176 // Tile 2, 2 => gfx::Rect(4, 4, 4, 4) 2177 // Tile 3, 4 => gfx::Rect(6, 8, 4, 4) 2178 gfx::Rect rect_result(gfx::UnionRects(data.TileBoundsWithBorder(2, 2), 2179 data.TileBoundsWithBorder(3, 4))); 2180 EXPECT_NE(rect_src, rect_result); 2181 EXPECT_RECT_EQ(rect_result, data.ExpandRectToTileBoundsWithBorders(rect_src)); 2182 2183 // On tile bounds rounds up to next tile (since border overlaps). 2184 gfx::Rect border_rect_src( 2185 gfx::UnionRects(data.TileBounds(1, 2), data.TileBounds(3, 4))); 2186 gfx::Rect border_rect_result(gfx::UnionRects( 2187 data.TileBoundsWithBorder(0, 1), data.TileBoundsWithBorder(4, 5))); 2188 EXPECT_RECT_EQ(border_rect_result, 2189 data.ExpandRectToTileBoundsWithBorders(border_rect_src)); 2190 2191 // Equal to tiling rect. 2192 EXPECT_RECT_EQ(data.tiling_rect(), 2193 data.ExpandRectToTileBoundsWithBorders(data.tiling_rect())); 2194 2195 // Containing, but larger than tiling rect. 2196 EXPECT_RECT_EQ(data.tiling_rect(), 2197 data.ExpandRectToTileBoundsWithBorders( 2198 gfx::Rect(origin, gfx::Size(100, 100)))); 2199 2200 // Non-intersecting with tiling rect. 2201 gfx::Rect non_intersect(origin.x() + 200, origin.y() + 200, 100, 100); 2202 EXPECT_FALSE(non_intersect.Intersects(data.tiling_rect())); 2203 EXPECT_RECT_EQ(gfx::Rect(), 2204 data.ExpandRectToTileBoundsWithBorders(non_intersect)); 2205 2206 TilingData data2(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(32, 64)), true); 2207 2208 // Inside other tile border texels doesn't include other tiles. 2209 gfx::Rect inner_rect_src(data2.TileBounds(1, 1)); 2210 inner_rect_src.Inset(data2.border_texels(), data.border_texels()); 2211 gfx::Rect inner_rect_result(data2.TileBoundsWithBorder(1, 1)); 2212 gfx::Rect expanded = data2.ExpandRectToTileBoundsWithBorders(inner_rect_src); 2213 EXPECT_EQ(inner_rect_result.ToString(), expanded.ToString()); 2214} 2215 2216TEST_P(TilingDataTest, ExpandRectToTileBounds) { 2217 gfx::Point origin = GetParam(); 2218 TilingData data(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(16, 32)), true); 2219 2220 // Small rect at origin rounds up to tile 0, 0. 2221 gfx::Rect at_origin_src(origin, gfx::Size(1, 1)); 2222 gfx::Rect at_origin_result(data.TileBounds(0, 0)); 2223 EXPECT_NE(at_origin_src, at_origin_result); 2224 EXPECT_RECT_EQ(at_origin_result, data.ExpandRectToTileBounds(at_origin_src)); 2225 2226 // Arbitrary internal rect. 2227 gfx::Rect rect_src(origin.x() + 6, origin.y() + 6, 1, 3); 2228 // Tile 2, 2 => gfx::Rect(4, 4, 4, 4) 2229 // Tile 3, 4 => gfx::Rect(6, 8, 4, 4) 2230 gfx::Rect rect_result( 2231 gfx::UnionRects(data.TileBounds(2, 2), data.TileBounds(3, 4))); 2232 EXPECT_NE(rect_src, rect_result); 2233 EXPECT_RECT_EQ(rect_result, data.ExpandRectToTileBounds(rect_src)); 2234 2235 // On tile bounds rounds up to next tile (since border overlaps). 2236 gfx::Rect border_rect_src( 2237 gfx::UnionRects(data.TileBounds(1, 2), data.TileBounds(3, 4))); 2238 gfx::Rect border_rect_result( 2239 gfx::UnionRects(data.TileBounds(0, 1), data.TileBounds(4, 5))); 2240 EXPECT_RECT_EQ(border_rect_result, 2241 data.ExpandRectToTileBounds(border_rect_src)); 2242 2243 // Equal to tiling rect. 2244 EXPECT_RECT_EQ(data.tiling_rect(), 2245 data.ExpandRectToTileBounds(data.tiling_rect())); 2246 2247 // Containing, but larger than tiling rect. 2248 EXPECT_RECT_EQ( 2249 data.tiling_rect(), 2250 data.ExpandRectToTileBounds(gfx::Rect(origin, gfx::Size(100, 100)))); 2251 2252 // Non-intersecting with tiling rect. 2253 gfx::Rect non_intersect(origin.x() + 200, origin.y() + 200, 100, 100); 2254 EXPECT_FALSE(non_intersect.Intersects(data.tiling_rect())); 2255 EXPECT_RECT_EQ(gfx::Rect(), data.ExpandRectToTileBounds(non_intersect)); 2256 2257 TilingData data2(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(32, 64)), true); 2258 2259 // Inside other tile border texels doesn't include other tiles. 2260 gfx::Rect inner_rect_src(data2.TileBounds(1, 1)); 2261 inner_rect_src.Inset(data2.border_texels(), data.border_texels()); 2262 gfx::Rect inner_rect_result(data2.TileBounds(1, 1)); 2263 gfx::Rect expanded = data2.ExpandRectToTileBounds(inner_rect_src); 2264 EXPECT_EQ(inner_rect_result.ToString(), expanded.ToString()); 2265} 2266 2267TEST_P(TilingDataTest, Assignment) { 2268 gfx::Point origin = GetParam(); 2269 2270 { 2271 TilingData source( 2272 gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 32)), true); 2273 TilingData dest = source; 2274 EXPECT_EQ(source.border_texels(), dest.border_texels()); 2275 EXPECT_EQ(source.max_texture_size(), dest.max_texture_size()); 2276 EXPECT_EQ(source.num_tiles_x(), dest.num_tiles_x()); 2277 EXPECT_EQ(source.num_tiles_y(), dest.num_tiles_y()); 2278 EXPECT_EQ(source.tiling_rect().x(), dest.tiling_rect().x()); 2279 EXPECT_EQ(source.tiling_rect().y(), dest.tiling_rect().y()); 2280 EXPECT_EQ(source.tiling_rect().width(), dest.tiling_rect().width()); 2281 EXPECT_EQ(source.tiling_rect().height(), dest.tiling_rect().height()); 2282 } 2283 { 2284 TilingData source( 2285 gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(6, 100)), false); 2286 TilingData dest(source); 2287 EXPECT_EQ(source.border_texels(), dest.border_texels()); 2288 EXPECT_EQ(source.max_texture_size(), dest.max_texture_size()); 2289 EXPECT_EQ(source.num_tiles_x(), dest.num_tiles_x()); 2290 EXPECT_EQ(source.num_tiles_y(), dest.num_tiles_y()); 2291 EXPECT_EQ(source.tiling_rect().x(), dest.tiling_rect().x()); 2292 EXPECT_EQ(source.tiling_rect().y(), dest.tiling_rect().y()); 2293 EXPECT_EQ(source.tiling_rect().width(), dest.tiling_rect().width()); 2294 EXPECT_EQ(source.tiling_rect().height(), dest.tiling_rect().height()); 2295 } 2296} 2297 2298TEST_P(TilingDataTest, SetBorderTexels) { 2299 gfx::Point origin = GetParam(); 2300 2301 TilingData data(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 32)), false); 2302 EXPECT_EQ(2, data.num_tiles_x()); 2303 EXPECT_EQ(4, data.num_tiles_y()); 2304 2305 data.SetHasBorderTexels(true); 2306 EXPECT_EQ(3, data.num_tiles_x()); 2307 EXPECT_EQ(5, data.num_tiles_y()); 2308 2309 data.SetHasBorderTexels(false); 2310 EXPECT_EQ(2, data.num_tiles_x()); 2311 EXPECT_EQ(4, data.num_tiles_y()); 2312} 2313 2314TEST_P(TilingDataTest, LargeBorders) { 2315 gfx::Point origin = GetParam(); 2316 2317 TilingData data( 2318 gfx::Size(100, 80), gfx::Rect(origin, gfx::Size(200, 145)), 30); 2319 EXPECT_EQ(30, data.border_texels()); 2320 2321 EXPECT_EQ(70, data.TileSizeX(0)); 2322 EXPECT_EQ(40, data.TileSizeX(1)); 2323 EXPECT_EQ(40, data.TileSizeX(2)); 2324 EXPECT_EQ(50, data.TileSizeX(3)); 2325 EXPECT_EQ(4, data.num_tiles_x()); 2326 2327 EXPECT_EQ(50, data.TileSizeY(0)); 2328 EXPECT_EQ(20, data.TileSizeY(1)); 2329 EXPECT_EQ(20, data.TileSizeY(2)); 2330 EXPECT_EQ(20, data.TileSizeY(3)); 2331 EXPECT_EQ(35, data.TileSizeY(4)); 2332 EXPECT_EQ(5, data.num_tiles_y()); 2333 2334 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 0, origin.y() + 0, 70, 50), 2335 data.TileBounds(0, 0)); 2336 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 70, origin.y() + 50, 40, 20), 2337 data.TileBounds(1, 1)); 2338 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 110, origin.y() + 110, 40, 35), 2339 data.TileBounds(2, 4)); 2340 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 150, origin.y() + 70, 50, 20), 2341 data.TileBounds(3, 2)); 2342 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 150, origin.y() + 110, 50, 35), 2343 data.TileBounds(3, 4)); 2344 2345 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 0, origin.y() + 0, 100, 80), 2346 data.TileBoundsWithBorder(0, 0)); 2347 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 40, origin.y() + 20, 100, 80), 2348 data.TileBoundsWithBorder(1, 1)); 2349 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 80, origin.y() + 80, 100, 65), 2350 data.TileBoundsWithBorder(2, 4)); 2351 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 120, origin.y() + 40, 80, 80), 2352 data.TileBoundsWithBorder(3, 2)); 2353 EXPECT_RECT_EQ(gfx::Rect(origin.x() + 120, origin.y() + 80, 80, 65), 2354 data.TileBoundsWithBorder(3, 4)); 2355 2356 EXPECT_EQ(0, data.TileXIndexFromSrcCoord(origin.x() + 0)); 2357 EXPECT_EQ(0, data.TileXIndexFromSrcCoord(origin.x() + 69)); 2358 EXPECT_EQ(1, data.TileXIndexFromSrcCoord(origin.x() + 70)); 2359 EXPECT_EQ(1, data.TileXIndexFromSrcCoord(origin.x() + 109)); 2360 EXPECT_EQ(2, data.TileXIndexFromSrcCoord(origin.x() + 110)); 2361 EXPECT_EQ(2, data.TileXIndexFromSrcCoord(origin.x() + 149)); 2362 EXPECT_EQ(3, data.TileXIndexFromSrcCoord(origin.x() + 150)); 2363 EXPECT_EQ(3, data.TileXIndexFromSrcCoord(origin.x() + 199)); 2364 2365 EXPECT_EQ(0, data.TileYIndexFromSrcCoord(origin.y() + 0)); 2366 EXPECT_EQ(0, data.TileYIndexFromSrcCoord(origin.y() + 49)); 2367 EXPECT_EQ(1, data.TileYIndexFromSrcCoord(origin.y() + 50)); 2368 EXPECT_EQ(1, data.TileYIndexFromSrcCoord(origin.y() + 69)); 2369 EXPECT_EQ(2, data.TileYIndexFromSrcCoord(origin.y() + 70)); 2370 EXPECT_EQ(2, data.TileYIndexFromSrcCoord(origin.y() + 89)); 2371 EXPECT_EQ(3, data.TileYIndexFromSrcCoord(origin.y() + 90)); 2372 EXPECT_EQ(3, data.TileYIndexFromSrcCoord(origin.y() + 109)); 2373 EXPECT_EQ(4, data.TileYIndexFromSrcCoord(origin.y() + 110)); 2374 EXPECT_EQ(4, data.TileYIndexFromSrcCoord(origin.y() + 144)); 2375 2376 EXPECT_EQ(0, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 0)); 2377 EXPECT_EQ(0, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 99)); 2378 EXPECT_EQ(1, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 100)); 2379 EXPECT_EQ(1, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 139)); 2380 EXPECT_EQ(2, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 140)); 2381 EXPECT_EQ(2, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 179)); 2382 EXPECT_EQ(3, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 180)); 2383 EXPECT_EQ(3, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 199)); 2384 2385 EXPECT_EQ(0, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 0)); 2386 EXPECT_EQ(0, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 79)); 2387 EXPECT_EQ(1, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 80)); 2388 EXPECT_EQ(1, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 99)); 2389 EXPECT_EQ(2, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 100)); 2390 EXPECT_EQ(2, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 119)); 2391 EXPECT_EQ(3, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 120)); 2392 EXPECT_EQ(3, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 139)); 2393 EXPECT_EQ(4, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 140)); 2394 EXPECT_EQ(4, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 144)); 2395 2396 EXPECT_EQ(0, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 0)); 2397 EXPECT_EQ(0, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 39)); 2398 EXPECT_EQ(1, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 40)); 2399 EXPECT_EQ(1, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 79)); 2400 EXPECT_EQ(2, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 80)); 2401 EXPECT_EQ(2, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 119)); 2402 EXPECT_EQ(3, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 120)); 2403 EXPECT_EQ(3, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 199)); 2404 2405 EXPECT_EQ(0, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 0)); 2406 EXPECT_EQ(0, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 19)); 2407 EXPECT_EQ(1, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 20)); 2408 EXPECT_EQ(1, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 39)); 2409 EXPECT_EQ(2, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 40)); 2410 EXPECT_EQ(2, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 59)); 2411 EXPECT_EQ(3, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 60)); 2412 EXPECT_EQ(3, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 79)); 2413 EXPECT_EQ(4, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 80)); 2414 EXPECT_EQ(4, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 144)); 2415} 2416 2417void TestIterate(const TilingData& data, 2418 gfx::Rect rect, 2419 int expect_left, 2420 int expect_top, 2421 int expect_right, 2422 int expect_bottom, 2423 bool include_borders) { 2424 EXPECT_GE(expect_left, 0); 2425 EXPECT_GE(expect_top, 0); 2426 EXPECT_LT(expect_right, data.num_tiles_x()); 2427 EXPECT_LT(expect_bottom, data.num_tiles_y()); 2428 2429 std::vector<std::pair<int, int> > original_expected; 2430 for (int x = 0; x < data.num_tiles_x(); ++x) { 2431 for (int y = 0; y < data.num_tiles_y(); ++y) { 2432 gfx::Rect bounds; 2433 if (include_borders) 2434 bounds = data.TileBoundsWithBorder(x, y); 2435 else 2436 bounds = data.TileBounds(x, y); 2437 if (x >= expect_left && x <= expect_right && 2438 y >= expect_top && y <= expect_bottom) { 2439 EXPECT_TRUE(bounds.Intersects(rect)); 2440 original_expected.push_back(std::make_pair(x, y)); 2441 } else { 2442 EXPECT_FALSE(bounds.Intersects(rect)); 2443 } 2444 } 2445 } 2446 2447 // Verify with vanilla iterator. 2448 { 2449 std::vector<std::pair<int, int> > expected = original_expected; 2450 for (TilingData::Iterator iter(&data, rect, include_borders); iter; 2451 ++iter) { 2452 bool found = false; 2453 for (size_t i = 0; i < expected.size(); ++i) { 2454 if (expected[i] == iter.index()) { 2455 expected[i] = expected.back(); 2456 expected.pop_back(); 2457 found = true; 2458 break; 2459 } 2460 } 2461 EXPECT_TRUE(found); 2462 } 2463 EXPECT_EQ(0u, expected.size()); 2464 } 2465 2466 // Make sure this also works with a difference iterator and an empty ignore. 2467 // The difference iterator always includes borders, so ignore it otherwise. 2468 if (include_borders) { 2469 std::vector<std::pair<int, int> > expected = original_expected; 2470 for (TilingData::DifferenceIterator iter(&data, rect, gfx::Rect()); 2471 iter; ++iter) { 2472 bool found = false; 2473 for (size_t i = 0; i < expected.size(); ++i) { 2474 if (expected[i] == iter.index()) { 2475 expected[i] = expected.back(); 2476 expected.pop_back(); 2477 found = true; 2478 break; 2479 } 2480 } 2481 EXPECT_TRUE(found); 2482 } 2483 EXPECT_EQ(0u, expected.size()); 2484 } 2485} 2486 2487void TestIterateBorders(const TilingData& data, 2488 gfx::Rect rect, 2489 int expect_left, 2490 int expect_top, 2491 int expect_right, 2492 int expect_bottom) { 2493 bool include_borders = true; 2494 TestIterate(data, 2495 rect, 2496 expect_left, 2497 expect_top, 2498 expect_right, 2499 expect_bottom, 2500 include_borders); 2501} 2502 2503void TestIterateNoBorders(const TilingData& data, 2504 gfx::Rect rect, 2505 int expect_left, 2506 int expect_top, 2507 int expect_right, 2508 int expect_bottom) { 2509 bool include_borders = false; 2510 TestIterate(data, 2511 rect, 2512 expect_left, 2513 expect_top, 2514 expect_right, 2515 expect_bottom, 2516 include_borders); 2517} 2518 2519void TestIterateAll(const TilingData& data, 2520 gfx::Rect rect, 2521 int expect_left, 2522 int expect_top, 2523 int expect_right, 2524 int expect_bottom) { 2525 TestIterateBorders( 2526 data, rect, expect_left, expect_top, expect_right, expect_bottom); 2527 TestIterateNoBorders( 2528 data, rect, expect_left, expect_top, expect_right, expect_bottom); 2529} 2530 2531TEST_P(TilingDataTest, IteratorNoBorderTexels) { 2532 gfx::Point origin = GetParam(); 2533 2534 TilingData data( 2535 gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(40, 25)), false); 2536 // The following Coordinates are relative to the origin. 2537 // X border index by src coord: [0-10), [10-20), [20, 30), [30, 40) 2538 // Y border index by src coord: [0-10), [10-20), [20, 25) 2539 TestIterateAll(data, gfx::Rect(origin.x(), origin.y(), 40, 25), 0, 0, 3, 2); 2540 TestIterateAll( 2541 data, gfx::Rect(origin.x() + 15, origin.y() + 15, 8, 8), 1, 1, 2, 2); 2542 2543 // Oversized. 2544 TestIterateAll(data, 2545 gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000), 2546 0, 2547 0, 2548 3, 2549 2); 2550 TestIterateAll( 2551 data, gfx::Rect(origin.x() - 100, origin.y() + 20, 1000, 1), 0, 2, 3, 2); 2552 TestIterateAll( 2553 data, gfx::Rect(origin.x() + 29, origin.y() - 100, 31, 1000), 2, 0, 3, 2); 2554 // Nonintersecting. 2555 TestIterateAll(data, 2556 gfx::Rect(origin.x() + 60, origin.y() + 80, 100, 100), 2557 0, 2558 0, 2559 -1, 2560 -1); 2561} 2562 2563TEST_P(TilingDataTest, BordersIteratorOneBorderTexel) { 2564 gfx::Point origin = GetParam(); 2565 2566 TilingData data( 2567 gfx::Size(10, 20), gfx::Rect(origin, gfx::Size(25, 45)), true); 2568 // The following Coordinates are relative to the origin. 2569 // X border index by src coord: [0-10), [8-18), [16-25) 2570 // Y border index by src coord: [0-20), [18-38), [36-45) 2571 TestIterateBorders( 2572 data, gfx::Rect(origin.x(), origin.y(), 25, 45), 0, 0, 2, 2); 2573 TestIterateBorders( 2574 data, gfx::Rect(origin.x() + 18, origin.y() + 19, 3, 17), 2, 0, 2, 1); 2575 TestIterateBorders( 2576 data, gfx::Rect(origin.x() + 10, origin.y() + 20, 6, 16), 1, 1, 1, 1); 2577 TestIterateBorders( 2578 data, gfx::Rect(origin.x() + 9, origin.y() + 19, 8, 18), 0, 0, 2, 2); 2579 // Oversized. 2580 TestIterateBorders(data, 2581 gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000), 2582 0, 2583 0, 2584 2, 2585 2); 2586 TestIterateBorders( 2587 data, gfx::Rect(origin.x() - 100, origin.y() + 20, 1000, 1), 0, 1, 2, 1); 2588 TestIterateBorders( 2589 data, gfx::Rect(origin.x() + 18, origin.y() - 100, 6, 1000), 2, 0, 2, 2); 2590 // Nonintersecting. 2591 TestIterateBorders(data, 2592 gfx::Rect(origin.x() + 60, origin.y() + 80, 100, 100), 2593 0, 2594 0, 2595 -1, 2596 -1); 2597} 2598 2599TEST_P(TilingDataTest, NoBordersIteratorOneBorderTexel) { 2600 gfx::Point origin = GetParam(); 2601 2602 TilingData data( 2603 gfx::Size(10, 20), gfx::Rect(origin, gfx::Size(25, 45)), true); 2604 // The following Coordinates are relative to the origin. 2605 // X index by src coord: [0-9), [9-17), [17-25) 2606 // Y index by src coord: [0-19), [19-37), [37-45) 2607 TestIterateNoBorders( 2608 data, gfx::Rect(origin.x(), origin.y(), 25, 45), 0, 0, 2, 2); 2609 TestIterateNoBorders( 2610 data, gfx::Rect(origin.x() + 17, origin.y() + 19, 3, 18), 2, 1, 2, 1); 2611 TestIterateNoBorders( 2612 data, gfx::Rect(origin.x() + 17, origin.y() + 19, 3, 19), 2, 1, 2, 2); 2613 TestIterateNoBorders( 2614 data, gfx::Rect(origin.x() + 8, origin.y() + 18, 9, 19), 0, 0, 1, 1); 2615 TestIterateNoBorders( 2616 data, gfx::Rect(origin.x() + 9, origin.y() + 19, 9, 19), 1, 1, 2, 2); 2617 // Oversized. 2618 TestIterateNoBorders( 2619 data, 2620 gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000), 2621 0, 2622 0, 2623 2, 2624 2); 2625 TestIterateNoBorders( 2626 data, gfx::Rect(origin.x() - 100, origin.y() + 20, 1000, 1), 0, 1, 2, 1); 2627 TestIterateNoBorders( 2628 data, gfx::Rect(origin.x() + 18, origin.y() - 100, 6, 1000), 2, 0, 2, 2); 2629 // Nonintersecting. 2630 TestIterateNoBorders(data, 2631 gfx::Rect(origin.x() + 60, origin.y() + 80, 100, 100), 2632 0, 2633 0, 2634 -1, 2635 -1); 2636} 2637 2638TEST_P(TilingDataTest, BordersIteratorManyBorderTexels) { 2639 gfx::Point origin = GetParam(); 2640 2641 TilingData data(gfx::Size(50, 60), gfx::Rect(origin, gfx::Size(65, 110)), 20); 2642 // The following Coordinates are relative to the origin. 2643 // X border index by src coord: [0-50), [10-60), [20-65) 2644 // Y border index by src coord: [0-60), [20-80), [40-100), [60-110) 2645 TestIterateBorders( 2646 data, gfx::Rect(origin.x(), origin.y(), 65, 110), 0, 0, 2, 3); 2647 TestIterateBorders( 2648 data, gfx::Rect(origin.x() + 50, origin.y() + 60, 15, 65), 1, 1, 2, 3); 2649 TestIterateBorders( 2650 data, gfx::Rect(origin.x() + 60, origin.y() + 30, 2, 10), 2, 0, 2, 1); 2651 // Oversized. 2652 TestIterateBorders(data, 2653 gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000), 2654 0, 2655 0, 2656 2, 2657 3); 2658 TestIterateBorders( 2659 data, gfx::Rect(origin.x() - 100, origin.y() + 10, 1000, 10), 0, 0, 2, 0); 2660 TestIterateBorders( 2661 data, gfx::Rect(origin.x() + 10, origin.y() - 100, 10, 1000), 0, 0, 1, 3); 2662 // Nonintersecting. 2663 TestIterateBorders(data, 2664 gfx::Rect(origin.x() + 65, origin.y() + 110, 100, 100), 2665 0, 2666 0, 2667 -1, 2668 -1); 2669} 2670 2671TEST_P(TilingDataTest, NoBordersIteratorManyBorderTexels) { 2672 gfx::Point origin = GetParam(); 2673 2674 TilingData data(gfx::Size(50, 60), gfx::Rect(origin, gfx::Size(65, 110)), 20); 2675 // The following Coordinates are relative to the origin. 2676 // X index by src coord: [0-30), [30-40), [40, 65) 2677 // Y index by src coord: [0-40), [40-60), [60, 80), [80-110) 2678 TestIterateNoBorders( 2679 data, gfx::Rect(origin.x(), origin.y(), 65, 110), 0, 0, 2, 3); 2680 TestIterateNoBorders( 2681 data, gfx::Rect(origin.x() + 30, origin.y() + 40, 15, 65), 1, 1, 2, 3); 2682 TestIterateNoBorders( 2683 data, gfx::Rect(origin.x() + 60, origin.y() + 20, 2, 21), 2, 0, 2, 1); 2684 // Oversized. 2685 TestIterateNoBorders( 2686 data, 2687 gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000), 2688 0, 2689 0, 2690 2, 2691 3); 2692 TestIterateNoBorders( 2693 data, gfx::Rect(origin.x() - 100, origin.y() + 10, 1000, 10), 0, 0, 2, 0); 2694 TestIterateNoBorders( 2695 data, gfx::Rect(origin.x() + 10, origin.y() - 100, 10, 1000), 0, 0, 0, 3); 2696 // Nonintersecting. 2697 TestIterateNoBorders(data, 2698 gfx::Rect(origin.x() + 65, origin.y() + 110, 100, 100), 2699 0, 2700 0, 2701 -1, 2702 -1); 2703} 2704 2705TEST_P(TilingDataTest, IteratorOneTile) { 2706 gfx::Point origin = GetParam(); 2707 2708 TilingData no_border( 2709 gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), false); 2710 TestIterateAll( 2711 no_border, gfx::Rect(origin.x(), origin.y(), 30, 40), 0, 0, 0, 0); 2712 TestIterateAll(no_border, 2713 gfx::Rect(origin.x() + 10, origin.y() + 10, 20, 20), 2714 0, 2715 0, 2716 0, 2717 0); 2718 TestIterateAll(no_border, 2719 gfx::Rect(origin.x() + 30, origin.y() + 40, 100, 100), 2720 0, 2721 0, 2722 -1, 2723 -1); 2724 2725 TilingData one_border( 2726 gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), true); 2727 TestIterateAll( 2728 one_border, gfx::Rect(origin.x(), origin.y(), 30, 40), 0, 0, 0, 0); 2729 TestIterateAll(one_border, 2730 gfx::Rect(origin.x() + 10, origin.y() + 10, 20, 20), 2731 0, 2732 0, 2733 0, 2734 0); 2735 TestIterateAll(one_border, 2736 gfx::Rect(origin.x() + 30, origin.y() + 40, 100, 100), 2737 0, 2738 0, 2739 -1, 2740 -1); 2741 2742 TilingData big_border( 2743 gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), 50); 2744 TestIterateAll( 2745 big_border, gfx::Rect(origin.x(), origin.y(), 30, 40), 0, 0, 0, 0); 2746 TestIterateAll(big_border, 2747 gfx::Rect(origin.x() + 10, origin.y() + 10, 20, 20), 2748 0, 2749 0, 2750 0, 2751 0); 2752 TestIterateAll(big_border, 2753 gfx::Rect(origin.x() + 30, origin.y() + 40, 100, 100), 2754 0, 2755 0, 2756 -1, 2757 -1); 2758} 2759 2760TEST(TilingDataTest, IteratorNoTiles) { 2761 TilingData data(gfx::Size(100, 100), gfx::Rect(), false); 2762 TestIterateAll(data, gfx::Rect(0, 0, 100, 100), 0, 0, -1, -1); 2763} 2764 2765void TestDiff( 2766 const TilingData& data, 2767 gfx::Rect consider, 2768 gfx::Rect ignore, 2769 size_t num_tiles) { 2770 2771 std::vector<std::pair<int, int> > expected; 2772 for (int y = 0; y < data.num_tiles_y(); ++y) { 2773 for (int x = 0; x < data.num_tiles_x(); ++x) { 2774 gfx::Rect bounds = data.TileBoundsWithBorder(x, y); 2775 if (bounds.Intersects(consider) && !bounds.Intersects(ignore)) 2776 expected.push_back(std::make_pair(x, y)); 2777 } 2778 } 2779 2780 // Sanity check the test. 2781 EXPECT_EQ(num_tiles, expected.size()); 2782 2783 for (TilingData::DifferenceIterator iter(&data, consider, ignore); 2784 iter; ++iter) { 2785 bool found = false; 2786 for (size_t i = 0; i < expected.size(); ++i) { 2787 if (expected[i] == iter.index()) { 2788 expected[i] = expected.back(); 2789 expected.pop_back(); 2790 found = true; 2791 break; 2792 } 2793 } 2794 EXPECT_TRUE(found); 2795 } 2796 EXPECT_EQ(0u, expected.size()); 2797} 2798 2799TEST_P(TilingDataTest, DifferenceIteratorIgnoreGeometry) { 2800 // This test is checking that the iterator can handle different geometries of 2801 // ignore rects relative to the consider rect. The consider rect indices 2802 // themselves are mostly tested by the non-difference iterator tests, so the 2803 // full rect is mostly used here for simplicity. 2804 2805 gfx::Point origin = GetParam(); 2806 2807 // The following Coordinates are relative to the origin. 2808 // X border index by src coord: [0-10), [10-20), [20, 30), [30, 40) 2809 // Y border index by src coord: [0-10), [10-20), [20, 25) 2810 TilingData data( 2811 gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(40, 25)), false); 2812 2813 // Fully ignored 2814 TestDiff(data, 2815 gfx::Rect(origin.x(), origin.y(), 40, 25), 2816 gfx::Rect(origin.x(), origin.y(), 40, 25), 2817 0); 2818 TestDiff(data, 2819 gfx::Rect(origin.x(), origin.y(), 40, 25), 2820 gfx::Rect(origin.x() - 100, origin.y() - 100, 200, 200), 2821 0); 2822 TestDiff(data, 2823 gfx::Rect(origin.x(), origin.y(), 40, 25), 2824 gfx::Rect(origin.x() + 9, origin.y() + 9, 30, 15), 2825 0); 2826 TestDiff(data, 2827 gfx::Rect(origin.x() + 15, origin.y() + 15, 8, 8), 2828 gfx::Rect(origin.x() + 15, origin.y() + 15, 8, 8), 2829 0); 2830 2831 // Fully un-ignored 2832 TestDiff(data, 2833 gfx::Rect(origin.x(), origin.y(), 40, 25), 2834 gfx::Rect(origin.x() - 30, origin.y() - 20, 8, 8), 2835 12); 2836 TestDiff(data, gfx::Rect(origin.x(), origin.y(), 40, 25), gfx::Rect(), 12); 2837 2838 // Top left, remove 2x2 tiles 2839 TestDiff(data, 2840 gfx::Rect(origin.x(), origin.y(), 40, 25), 2841 gfx::Rect(origin.x(), origin.y(), 20, 19), 2842 8); 2843 // Bottom right, remove 2x2 tiles 2844 TestDiff(data, 2845 gfx::Rect(origin.x(), origin.y(), 40, 25), 2846 gfx::Rect(origin.x() + 20, origin.y() + 15, 20, 6), 2847 8); 2848 // Bottom left, remove 2x2 tiles 2849 TestDiff(data, 2850 gfx::Rect(origin.x(), origin.y(), 40, 25), 2851 gfx::Rect(origin.x(), origin.y() + 15, 20, 6), 2852 8); 2853 // Top right, remove 2x2 tiles 2854 TestDiff(data, 2855 gfx::Rect(origin.x(), origin.y(), 40, 25), 2856 gfx::Rect(origin.x() + 20, origin.y(), 20, 19), 2857 8); 2858 // Center, remove only one tile 2859 TestDiff(data, 2860 gfx::Rect(origin.x(), origin.y(), 40, 25), 2861 gfx::Rect(origin.x() + 10, origin.y() + 10, 5, 5), 2862 11); 2863 2864 // Left column, flush left, removing two columns 2865 TestDiff(data, 2866 gfx::Rect(origin.x(), origin.y(), 40, 25), 2867 gfx::Rect(origin.x(), origin.y(), 11, 25), 2868 6); 2869 // Middle column, removing two columns 2870 TestDiff(data, 2871 gfx::Rect(origin.x(), origin.y(), 40, 25), 2872 gfx::Rect(origin.x() + 11, origin.y(), 11, 25), 2873 6); 2874 // Right column, flush right, removing one column 2875 TestDiff(data, 2876 gfx::Rect(origin.x(), origin.y(), 40, 25), 2877 gfx::Rect(origin.x() + 30, origin.y(), 2, 25), 2878 9); 2879 2880 // Top row, flush top, removing one row 2881 TestDiff(data, 2882 gfx::Rect(origin.x(), origin.y(), 40, 25), 2883 gfx::Rect(origin.x(), origin.y() + 5, 40, 5), 2884 8); 2885 // Middle row, removing one row 2886 TestDiff(data, 2887 gfx::Rect(origin.x(), origin.y(), 40, 25), 2888 gfx::Rect(origin.x(), origin.y() + 13, 40, 5), 2889 8); 2890 // Bottom row, flush bottom, removing two rows 2891 TestDiff(data, 2892 gfx::Rect(origin.x(), origin.y(), 40, 25), 2893 gfx::Rect(origin.x(), origin.y() + 13, 40, 12), 2894 4); 2895 2896 // Non-intersecting, but still touching two of the same tiles. 2897 TestDiff(data, 2898 gfx::Rect(origin.x() + 8, origin.y(), 32, 25), 2899 gfx::Rect(origin.x(), origin.y() + 12, 5, 12), 2900 10); 2901 2902 // Intersecting, but neither contains the other. 2x3 with one overlap. 2903 TestDiff(data, 2904 gfx::Rect(origin.x() + 5, origin.y() + 2, 20, 10), 2905 gfx::Rect(origin.x() + 25, origin.y() + 15, 5, 10), 2906 5); 2907} 2908 2909TEST_P(TilingDataTest, DifferenceIteratorManyBorderTexels) { 2910 gfx::Point origin = GetParam(); 2911 2912 // The following Coordinates are relative to the origin. 2913 // X border index by src coord: [0-50), [10-60), [20-65) 2914 // Y border index by src coord: [0-60), [20-80), [40-100), [60-110) 2915 TilingData data(gfx::Size(50, 60), gfx::Rect(origin, gfx::Size(65, 110)), 20); 2916 2917 // Ignore one column, three rows 2918 TestDiff(data, 2919 gfx::Rect(origin.x(), origin.y() + 30, 55, 80), 2920 gfx::Rect(origin.x() + 5, origin.y() + 30, 5, 15), 2921 9); 2922 2923 // Knock out three columns, leaving only one. 2924 TestDiff(data, 2925 gfx::Rect(origin.x() + 10, origin.y() + 30, 55, 80), 2926 gfx::Rect(origin.x() + 30, origin.y() + 59, 20, 1), 2927 3); 2928 2929 // Overlap all tiles with ignore rect. 2930 TestDiff(data, 2931 gfx::Rect(origin.x(), origin.y(), 65, 110), 2932 gfx::Rect(origin.x() + 30, origin.y() + 59, 1, 2), 2933 0); 2934} 2935 2936TEST_P(TilingDataTest, DifferenceIteratorOneTile) { 2937 gfx::Point origin = GetParam(); 2938 2939 TilingData no_border( 2940 gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), false); 2941 TestDiff( 2942 no_border, gfx::Rect(origin.x(), origin.y(), 30, 40), gfx::Rect(), 1); 2943 TestDiff(no_border, 2944 gfx::Rect(origin.x() + 5, origin.y() + 5, 100, 100), 2945 gfx::Rect(origin.x() + 5, origin.y() + 5, 1, 1), 2946 0); 2947 2948 TilingData one_border( 2949 gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), true); 2950 TestDiff( 2951 one_border, gfx::Rect(origin.x(), origin.y(), 30, 40), gfx::Rect(), 1); 2952 TestDiff(one_border, 2953 gfx::Rect(origin.x() + 5, origin.y() + 5, 100, 100), 2954 gfx::Rect(origin.x() + 5, origin.y() + 5, 1, 1), 2955 0); 2956 2957 TilingData big_border( 2958 gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), 50); 2959 TestDiff( 2960 big_border, gfx::Rect(origin.x(), origin.y(), 30, 40), gfx::Rect(), 1); 2961 TestDiff(big_border, 2962 gfx::Rect(origin.x() + 5, origin.y() + 5, 100, 100), 2963 gfx::Rect(origin.x() + 5, origin.y() + 5, 1, 1), 2964 0); 2965} 2966 2967TEST(TilingDataTest, DifferenceIteratorNoTiles) { 2968 TilingData data(gfx::Size(100, 100), gfx::Rect(), false); 2969 TestDiff(data, gfx::Rect(0, 0, 100, 100), gfx::Rect(0, 0, 5, 5), 0); 2970} 2971 2972void TestSpiralIterate(int source_line_number, 2973 const TilingData& tiling_data, 2974 const gfx::Rect& consider, 2975 const gfx::Rect& ignore, 2976 const gfx::Rect& center, 2977 const std::vector<std::pair<int, int> >& expected) { 2978 std::vector<std::pair<int, int> > actual; 2979 for (TilingData::SpiralDifferenceIterator it( 2980 &tiling_data, consider, ignore, center); 2981 it; 2982 ++it) { 2983 actual.push_back(it.index()); 2984 } 2985 2986 EXPECT_EQ(expected.size(), actual.size()) << "error from line " 2987 << source_line_number; 2988 for (size_t i = 0; i < std::min(expected.size(), actual.size()); ++i) { 2989 EXPECT_EQ(expected[i].first, actual[i].first) 2990 << "i: " << i << " error from line: " << source_line_number; 2991 EXPECT_EQ(expected[i].second, actual[i].second) 2992 << "i: " << i << " error from line: " << source_line_number; 2993 } 2994} 2995 2996TEST_P(TilingDataTest, SpiralDifferenceIteratorNoIgnoreFullConsider) { 2997 gfx::Point origin = GetParam(); 2998 TilingData tiling_data( 2999 gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(30, 30)), false); 3000 gfx::Rect consider(origin.x(), origin.y(), 30, 30); 3001 gfx::Rect ignore; 3002 std::vector<std::pair<int, int> > expected; 3003 3004 // Center is in the center of the tiling. 3005 gfx::Rect center(origin.x() + 15, origin.y() + 15, 1, 1); 3006 3007 // Layout of the tiling data, and expected return order: 3008 // x 0 1 2 3009 // y.------ 3010 // 0| 4 3 2 3011 // 1| 5 * 1 3012 // 2| 6 7 8 3013 expected.push_back(std::make_pair(2, 1)); 3014 expected.push_back(std::make_pair(2, 0)); 3015 expected.push_back(std::make_pair(1, 0)); 3016 expected.push_back(std::make_pair(0, 0)); 3017 expected.push_back(std::make_pair(0, 1)); 3018 expected.push_back(std::make_pair(0, 2)); 3019 expected.push_back(std::make_pair(1, 2)); 3020 expected.push_back(std::make_pair(2, 2)); 3021 3022 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3023 3024 // Center is off to the right side of the tiling (and far away). 3025 center = gfx::Rect(origin.x() + 100, origin.y() + 15, 1, 1); 3026 3027 // Layout of the tiling data, and expected return order: 3028 // x 0 1 2 3029 // y.------ 3030 // 0| 7 4 1 3031 // 1| 8 5 2 * 3032 // 2| 9 6 3 3033 expected.clear(); 3034 expected.push_back(std::make_pair(2, 0)); 3035 expected.push_back(std::make_pair(2, 1)); 3036 expected.push_back(std::make_pair(2, 2)); 3037 expected.push_back(std::make_pair(1, 0)); 3038 expected.push_back(std::make_pair(1, 1)); 3039 expected.push_back(std::make_pair(1, 2)); 3040 expected.push_back(std::make_pair(0, 0)); 3041 expected.push_back(std::make_pair(0, 1)); 3042 expected.push_back(std::make_pair(0, 2)); 3043 3044 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3045 3046 // Center is the bottom right corner of the tiling. 3047 center = gfx::Rect(origin.x() + 25, origin.y() + 25, 1, 1); 3048 3049 // Layout of the tiling data, and expected return order: 3050 // x 0 1 2 3051 // y.------ 3052 // 0| 6 5 4 3053 // 1| 7 2 1 3054 // 2| 8 3 * 3055 expected.clear(); 3056 expected.push_back(std::make_pair(2, 1)); 3057 expected.push_back(std::make_pair(1, 1)); 3058 expected.push_back(std::make_pair(1, 2)); 3059 expected.push_back(std::make_pair(2, 0)); 3060 expected.push_back(std::make_pair(1, 0)); 3061 expected.push_back(std::make_pair(0, 0)); 3062 expected.push_back(std::make_pair(0, 1)); 3063 expected.push_back(std::make_pair(0, 2)); 3064 3065 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3066 3067 // Center is off the top left side of the tiling. 3068 center = gfx::Rect(origin.x() - 60, origin.y() - 50, 1, 1); 3069 3070 // Layout of the tiling data, and expected return order: 3071 // * x 0 1 2 3072 // y.------ 3073 // 0| 1 2 6 3074 // 1| 3 4 5 3075 // 2| 7 8 9 3076 expected.clear(); 3077 expected.push_back(std::make_pair(0, 0)); 3078 expected.push_back(std::make_pair(1, 0)); 3079 expected.push_back(std::make_pair(0, 1)); 3080 expected.push_back(std::make_pair(1, 1)); 3081 expected.push_back(std::make_pair(2, 1)); 3082 expected.push_back(std::make_pair(2, 0)); 3083 expected.push_back(std::make_pair(0, 2)); 3084 expected.push_back(std::make_pair(1, 2)); 3085 expected.push_back(std::make_pair(2, 2)); 3086 3087 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3088 3089 // Two tile center. 3090 center = gfx::Rect(origin.x() + 15, origin.y() + 15, 1, 10); 3091 3092 // Layout of the tiling data, and expected return order: 3093 // x 0 1 2 3094 // y.------ 3095 // 0| 5 4 3 3096 // 1| 6 * 2 3097 // 2| 7 * 1 3098 expected.clear(); 3099 expected.push_back(std::make_pair(2, 2)); 3100 expected.push_back(std::make_pair(2, 1)); 3101 expected.push_back(std::make_pair(2, 0)); 3102 expected.push_back(std::make_pair(1, 0)); 3103 expected.push_back(std::make_pair(0, 0)); 3104 expected.push_back(std::make_pair(0, 1)); 3105 expected.push_back(std::make_pair(0, 2)); 3106 3107 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3108} 3109 3110TEST_P(TilingDataTest, SpiralDifferenceIteratorSmallConsider) { 3111 gfx::Point origin = GetParam(); 3112 TilingData tiling_data( 3113 gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(50, 50)), false); 3114 gfx::Rect ignore; 3115 std::vector<std::pair<int, int> > expected; 3116 gfx::Rect center(origin.x() + 15, origin.y() + 15, 1, 1); 3117 3118 // Consider is one cell. 3119 gfx::Rect consider(origin.x(), origin.y(), 1, 1); 3120 3121 // Layout of the tiling data, and expected return order: 3122 // x 0 1 2 3 4 3123 // y.---------- 3124 // 0| 1 3125 // 1| * 3126 // 2| 3127 // 3| 3128 // 4| 3129 expected.push_back(std::make_pair(0, 0)); 3130 3131 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3132 3133 // Consider is bottom right corner. 3134 consider = gfx::Rect(origin.x() + 25, origin.y() + 25, 10, 10); 3135 3136 // Layout of the tiling data, and expected return order: 3137 // x 0 1 2 3 4 3138 // y.---------- 3139 // 0| 3140 // 1| * 3141 // 2| 1 2 3142 // 3| 3 4 3143 // 4| 3144 expected.clear(); 3145 expected.push_back(std::make_pair(2, 2)); 3146 expected.push_back(std::make_pair(3, 2)); 3147 expected.push_back(std::make_pair(2, 3)); 3148 expected.push_back(std::make_pair(3, 3)); 3149 3150 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3151 3152 // Consider is one column. 3153 consider = gfx::Rect(origin.x() + 11, origin.y(), 1, 100); 3154 3155 // Layout of the tiling data, and expected return order: 3156 // x 0 1 2 3 4 3157 // y.---------- 3158 // 0| 2 3159 // 1| * 3160 // 2| 3 3161 // 3| 4 3162 // 4| 5 3163 expected.clear(); 3164 expected.push_back(std::make_pair(1, 0)); 3165 expected.push_back(std::make_pair(1, 2)); 3166 expected.push_back(std::make_pair(1, 3)); 3167 expected.push_back(std::make_pair(1, 4)); 3168 3169 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3170} 3171 3172TEST_P(TilingDataTest, SpiralDifferenceIteratorHasIgnore) { 3173 gfx::Point origin = GetParam(); 3174 TilingData tiling_data( 3175 gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(50, 50)), false); 3176 gfx::Rect consider(origin.x(), origin.y(), 50, 50); 3177 std::vector<std::pair<int, int> > expected; 3178 gfx::Rect center(origin.x() + 15, origin.y() + 15, 1, 1); 3179 3180 // Full ignore. 3181 gfx::Rect ignore(origin.x(), origin.y(), 50, 50); 3182 3183 // Layout of the tiling data, and expected return order: 3184 // x 0 1 2 3 4 3185 // y.---------- 3186 // 0| . . . . . 3187 // 1| . * . . . 3188 // 2| . . . . . 3189 // 3| . . . . . 3190 // 4| . . . . . 3191 expected.clear(); 3192 3193 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3194 3195 // 3 column ignore. 3196 ignore = gfx::Rect(origin.x() + 15, origin.y(), 20, 100); 3197 3198 // Layout of the tiling data, and expected return order: 3199 // x 0 1 2 3 4 3200 // y.---------- 3201 // 0| 1 . . . 8 3202 // 1| 2 * . . 7 3203 // 2| 3 . . . 6 3204 // 3| 4 . . . 5 3205 // 4| 9 . . . 10 3206 expected.clear(); 3207 3208 expected.push_back(std::make_pair(0, 0)); 3209 expected.push_back(std::make_pair(0, 1)); 3210 expected.push_back(std::make_pair(0, 2)); 3211 expected.push_back(std::make_pair(0, 3)); 3212 expected.push_back(std::make_pair(4, 3)); 3213 expected.push_back(std::make_pair(4, 2)); 3214 expected.push_back(std::make_pair(4, 1)); 3215 expected.push_back(std::make_pair(4, 0)); 3216 expected.push_back(std::make_pair(0, 4)); 3217 expected.push_back(std::make_pair(4, 4)); 3218 3219 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3220 3221 // Ignore covers the top half. 3222 ignore = gfx::Rect(origin.x(), origin.y(), 50, 25); 3223 3224 // Layout of the tiling data, and expected return order: 3225 // x 0 1 2 3 4 3226 // y.---------- 3227 // 0| . . . . . 3228 // 1| . * . . . 3229 // 2| . . . . . 3230 // 3| 1 2 3 4 5 3231 // 4| 6 7 8 9 10 3232 expected.clear(); 3233 3234 expected.push_back(std::make_pair(0, 3)); 3235 expected.push_back(std::make_pair(1, 3)); 3236 expected.push_back(std::make_pair(2, 3)); 3237 expected.push_back(std::make_pair(3, 3)); 3238 expected.push_back(std::make_pair(4, 3)); 3239 expected.push_back(std::make_pair(0, 4)); 3240 expected.push_back(std::make_pair(1, 4)); 3241 expected.push_back(std::make_pair(2, 4)); 3242 expected.push_back(std::make_pair(3, 4)); 3243 expected.push_back(std::make_pair(4, 4)); 3244 3245 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3246} 3247 3248TEST_P(TilingDataTest, SpiralDifferenceIteratorRectangleCenter) { 3249 gfx::Point origin = GetParam(); 3250 TilingData tiling_data( 3251 gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(50, 50)), false); 3252 gfx::Rect consider(origin.x(), origin.y(), 50, 50); 3253 std::vector<std::pair<int, int> > expected; 3254 gfx::Rect ignore; 3255 3256 // Two cell center 3257 gfx::Rect center(origin.x() + 25, origin.y() + 25, 1, 10); 3258 3259 // Layout of the tiling data, and expected return order: 3260 // x 0 1 2 3 4 3261 // y.---------- 3262 // 0| J I H G F 3263 // 1| K 5 4 3 E 3264 // 2| L 6 * 2 D 3265 // 3| M 7 * 1 C 3266 // 4| N 8 9 A B 3267 expected.clear(); 3268 3269 expected.push_back(std::make_pair(3, 3)); 3270 expected.push_back(std::make_pair(3, 2)); 3271 expected.push_back(std::make_pair(3, 1)); 3272 expected.push_back(std::make_pair(2, 1)); 3273 expected.push_back(std::make_pair(1, 1)); 3274 expected.push_back(std::make_pair(1, 2)); 3275 expected.push_back(std::make_pair(1, 3)); 3276 expected.push_back(std::make_pair(1, 4)); 3277 expected.push_back(std::make_pair(2, 4)); 3278 expected.push_back(std::make_pair(3, 4)); 3279 expected.push_back(std::make_pair(4, 4)); 3280 expected.push_back(std::make_pair(4, 3)); 3281 expected.push_back(std::make_pair(4, 2)); 3282 expected.push_back(std::make_pair(4, 1)); 3283 expected.push_back(std::make_pair(4, 0)); 3284 expected.push_back(std::make_pair(3, 0)); 3285 expected.push_back(std::make_pair(2, 0)); 3286 expected.push_back(std::make_pair(1, 0)); 3287 expected.push_back(std::make_pair(0, 0)); 3288 expected.push_back(std::make_pair(0, 1)); 3289 expected.push_back(std::make_pair(0, 2)); 3290 expected.push_back(std::make_pair(0, 3)); 3291 expected.push_back(std::make_pair(0, 4)); 3292 3293 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3294 3295 // Three by two center. 3296 center = gfx::Rect(origin.x() + 15, origin.y() + 25, 20, 10); 3297 3298 // Layout of the tiling data, and expected return order: 3299 // x 0 1 2 3 4 3300 // y.---------- 3301 // 0| J I H G F 3302 // 1| 7 6 5 4 3 3303 // 2| 8 * * * 2 3304 // 3| 9 * * * 1 3305 // 4| A B C D E 3306 expected.clear(); 3307 3308 expected.push_back(std::make_pair(4, 3)); 3309 expected.push_back(std::make_pair(4, 2)); 3310 expected.push_back(std::make_pair(4, 1)); 3311 expected.push_back(std::make_pair(3, 1)); 3312 expected.push_back(std::make_pair(2, 1)); 3313 expected.push_back(std::make_pair(1, 1)); 3314 expected.push_back(std::make_pair(0, 1)); 3315 expected.push_back(std::make_pair(0, 2)); 3316 expected.push_back(std::make_pair(0, 3)); 3317 expected.push_back(std::make_pair(0, 4)); 3318 expected.push_back(std::make_pair(1, 4)); 3319 expected.push_back(std::make_pair(2, 4)); 3320 expected.push_back(std::make_pair(3, 4)); 3321 expected.push_back(std::make_pair(4, 4)); 3322 expected.push_back(std::make_pair(4, 0)); 3323 expected.push_back(std::make_pair(3, 0)); 3324 expected.push_back(std::make_pair(2, 0)); 3325 expected.push_back(std::make_pair(1, 0)); 3326 expected.push_back(std::make_pair(0, 0)); 3327 3328 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3329 3330 // Column center off the left side. 3331 center = gfx::Rect(origin.x() - 50, origin.y(), 30, 50); 3332 3333 // Layout of the tiling data, and expected return order: 3334 // x 0 1 2 3 4 3335 // y.---------- 3336 // * 0| 5 A F K P 3337 // * 1| 4 9 E J O 3338 // * 2| 3 8 D I N 3339 // * 3| 2 7 C H M 3340 // * 4| 1 6 B G L 3341 expected.clear(); 3342 3343 expected.push_back(std::make_pair(0, 4)); 3344 expected.push_back(std::make_pair(0, 3)); 3345 expected.push_back(std::make_pair(0, 2)); 3346 expected.push_back(std::make_pair(0, 1)); 3347 expected.push_back(std::make_pair(0, 0)); 3348 expected.push_back(std::make_pair(1, 4)); 3349 expected.push_back(std::make_pair(1, 3)); 3350 expected.push_back(std::make_pair(1, 2)); 3351 expected.push_back(std::make_pair(1, 1)); 3352 expected.push_back(std::make_pair(1, 0)); 3353 expected.push_back(std::make_pair(2, 4)); 3354 expected.push_back(std::make_pair(2, 3)); 3355 expected.push_back(std::make_pair(2, 2)); 3356 expected.push_back(std::make_pair(2, 1)); 3357 expected.push_back(std::make_pair(2, 0)); 3358 expected.push_back(std::make_pair(3, 4)); 3359 expected.push_back(std::make_pair(3, 3)); 3360 expected.push_back(std::make_pair(3, 2)); 3361 expected.push_back(std::make_pair(3, 1)); 3362 expected.push_back(std::make_pair(3, 0)); 3363 expected.push_back(std::make_pair(4, 4)); 3364 expected.push_back(std::make_pair(4, 3)); 3365 expected.push_back(std::make_pair(4, 2)); 3366 expected.push_back(std::make_pair(4, 1)); 3367 expected.push_back(std::make_pair(4, 0)); 3368 3369 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3370} 3371 3372TEST_P(TilingDataTest, SpiralDifferenceIteratorEdgeCases) { 3373 gfx::Point origin = GetParam(); 3374 TilingData tiling_data( 3375 gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(30, 30)), false); 3376 std::vector<std::pair<int, int> > expected; 3377 gfx::Rect center; 3378 gfx::Rect consider; 3379 gfx::Rect ignore; 3380 3381 // Ignore contains, but is not equal to, consider and center. 3382 ignore = gfx::Rect(origin.x() + 15, origin.y(), 20, 30); 3383 consider = gfx::Rect(origin.x() + 20, origin.y() + 10, 10, 20); 3384 center = gfx::Rect(origin.x() + 25, origin.y(), 5, 5); 3385 3386 // Layout of the tiling data, and expected return order: 3387 // x 0 1 2 3388 // y.------ 3389 // 0| . * 3390 // 1| . . 3391 // 2| . . 3392 expected.clear(); 3393 3394 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3395 3396 // Center intersects with consider. 3397 ignore = gfx::Rect(); 3398 center = gfx::Rect(origin.x(), origin.y() + 15, 30, 15); 3399 consider = gfx::Rect(origin.x(), origin.y(), 15, 30); 3400 3401 // Layout of the tiling data, and expected return order: 3402 // x 0 1 2 3403 // y.------ 3404 // 0| 2 1 3405 // 1| * * * 3406 // 2| * * * 3407 expected.clear(); 3408 3409 expected.push_back(std::make_pair(1, 0)); 3410 expected.push_back(std::make_pair(0, 0)); 3411 3412 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3413 3414 // Consider and ignore are non-intersecting. 3415 ignore = gfx::Rect(origin.x(), origin.y(), 5, 30); 3416 consider = gfx::Rect(origin.x() + 25, origin.y(), 5, 30); 3417 center = gfx::Rect(origin.x() + 15, origin.y(), 1, 1); 3418 3419 // Layout of the tiling data, and expected return order: 3420 // x 0 1 2 3421 // y.------ 3422 // 0| . * 1 3423 // 1| . 2 3424 // 2| . 3 3425 expected.clear(); 3426 3427 expected.push_back(std::make_pair(2, 0)); 3428 expected.push_back(std::make_pair(2, 1)); 3429 expected.push_back(std::make_pair(2, 2)); 3430 3431 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3432 3433 // Center intersects with ignore. 3434 consider = gfx::Rect(origin.x(), origin.y(), 30, 30); 3435 center = gfx::Rect(origin.x() + 15, origin.y(), 1, 30); 3436 ignore = gfx::Rect(origin.x(), origin.y() + 15, 30, 1); 3437 3438 // Layout of the tiling data, and expected return order: 3439 // x 0 1 2 3440 // y.------ 3441 // 0| 3 * 2 3442 // 1| . * . 3443 // 2| 4 * 1 3444 expected.clear(); 3445 3446 expected.push_back(std::make_pair(2, 2)); 3447 expected.push_back(std::make_pair(2, 0)); 3448 expected.push_back(std::make_pair(0, 0)); 3449 expected.push_back(std::make_pair(0, 2)); 3450 3451 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3452 3453 // Center and ignore are the same. 3454 consider = gfx::Rect(origin.x(), origin.y(), 30, 30); 3455 center = gfx::Rect(origin.x() + 15, origin.y(), 1, 30); 3456 ignore = center; 3457 3458 // Layout of the tiling data, and expected return order: 3459 // x 0 1 2 3460 // y.------ 3461 // 0| 4 * 3 3462 // 1| 5 * 2 3463 // 2| 6 * 1 3464 expected.clear(); 3465 3466 expected.push_back(std::make_pair(2, 2)); 3467 expected.push_back(std::make_pair(2, 1)); 3468 expected.push_back(std::make_pair(2, 0)); 3469 expected.push_back(std::make_pair(0, 0)); 3470 expected.push_back(std::make_pair(0, 1)); 3471 expected.push_back(std::make_pair(0, 2)); 3472 3473 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3474 3475 // Empty tiling data. 3476 TilingData empty_data(gfx::Size(0, 0), gfx::Rect(0, 0, 0, 0), false); 3477 3478 expected.clear(); 3479 TestSpiralIterate(__LINE__, empty_data, consider, ignore, center, expected); 3480 3481 // Empty consider. 3482 ignore = gfx::Rect(); 3483 center = gfx::Rect(1, 1, 1, 1); 3484 consider = gfx::Rect(); 3485 3486 expected.clear(); 3487 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3488 3489 // Empty center. Note: This arbitrarily puts the center to be off the top-left 3490 // corner. 3491 consider = gfx::Rect(origin.x(), origin.y(), 30, 30); 3492 ignore = gfx::Rect(); 3493 center = gfx::Rect(); 3494 3495 // Layout of the tiling data, and expected return order: 3496 // * x 0 1 2 3497 // y.------ 3498 // 0| 1 2 6 3499 // 1| 3 4 5 3500 // 2| 7 8 9 3501 expected.clear(); 3502 3503 expected.push_back(std::make_pair(0, 0)); 3504 expected.push_back(std::make_pair(1, 0)); 3505 expected.push_back(std::make_pair(0, 1)); 3506 expected.push_back(std::make_pair(1, 1)); 3507 expected.push_back(std::make_pair(2, 1)); 3508 expected.push_back(std::make_pair(2, 0)); 3509 expected.push_back(std::make_pair(0, 2)); 3510 expected.push_back(std::make_pair(1, 2)); 3511 expected.push_back(std::make_pair(2, 2)); 3512 3513 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3514 3515 // Every rect is empty. 3516 ignore = gfx::Rect(); 3517 center = gfx::Rect(); 3518 consider = gfx::Rect(); 3519 3520 expected.clear(); 3521 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3522 3523 // Center is just to the left of cover, and off of the tiling's left side. 3524 consider = gfx::Rect(origin.x(), origin.y(), 30, 30); 3525 ignore = gfx::Rect(); 3526 center = gfx::Rect(origin.x() - 20, origin.y(), 19, 30); 3527 3528 // Layout of the tiling data, and expected return order: 3529 // x 0 1 2 3530 // y.------ 3531 // *0| 3 6 9 3532 // *1| 2 5 8 3533 // *2| 1 4 7 3534 expected.clear(); 3535 3536 expected.push_back(std::make_pair(0, 2)); 3537 expected.push_back(std::make_pair(0, 1)); 3538 expected.push_back(std::make_pair(0, 0)); 3539 expected.push_back(std::make_pair(1, 2)); 3540 expected.push_back(std::make_pair(1, 1)); 3541 expected.push_back(std::make_pair(1, 0)); 3542 expected.push_back(std::make_pair(2, 2)); 3543 expected.push_back(std::make_pair(2, 1)); 3544 expected.push_back(std::make_pair(2, 0)); 3545 3546 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 3547} 3548 3549INSTANTIATE_TEST_CASE_P(TilingData, 3550 TilingDataTest, 3551 ::testing::Values(gfx::Point(42, 17), 3552 gfx::Point(0, 0), 3553 gfx::Point(-8, 15), 3554 gfx::Point(-12, 4), 3555 gfx::Point(-16, -35), 3556 gfx::Point(-10000, -15000))); 3557} // namespace 3558 3559} // namespace cc 3560