15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/region.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace cc { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_INSIDE_RECT(r, x, y, w, h) \ 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(x, y))); \ 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(x + w - 1, y))); \ 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(x, y + h - 1))); \ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(x + w - 1, y + h - 1))); \ 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(x, y + h / 2))); \ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(x + w - 1, y + h / 2))); \ 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(x + w / 2, y))); \ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(x + w / 2, y + h - 1))); \ 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(x + w / 2, y + h / 2))); \ 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_LEFT_OF_RECT(r, x, y, w, h) \ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(x - 1, y))); \ 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(x - 1, y + h - 1))); \ 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_RIGHT_OF_RECT(r, x, y, w, h) \ 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(x + w, y))); \ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(x + w, y + h - 1))); \ 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_TOP_OF_RECT(r, x, y, w, h) \ 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(x, y - 1))); \ 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(x + w - 1, y - 1))); \ 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_BOTTOM_OF_RECT(r, x, y, w, h) \ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(x, y + h))); \ 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(x + w - 1, y + h))); \ 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RegionTest, ContainsPoint) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region r; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(0, 0))); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(35, 35, 1, 1)); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INSIDE_RECT(r, 35, 35, 1, 1); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_LEFT_OF_RECT(r, 35, 35, 1, 1); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_RIGHT_OF_RECT(r, 35, 35, 1, 1); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_TOP_OF_RECT(r, 35, 35, 1, 1); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_BOTTOM_OF_RECT(r, 35, 35, 1, 1); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(30, 30, 10, 10)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INSIDE_RECT(r, 30, 30, 10, 10); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_LEFT_OF_RECT(r, 30, 30, 10, 10); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_RIGHT_OF_RECT(r, 30, 30, 10, 10); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_TOP_OF_RECT(r, 30, 30, 10, 10); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_BOTTOM_OF_RECT(r, 30, 30, 10, 10); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(31, 40, 10, 10)); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(30, 40))); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(31, 40))); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(40, 39))); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(40, 40))); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INSIDE_RECT(r, 30, 30, 10, 10); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_LEFT_OF_RECT(r, 30, 30, 10, 10); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_RIGHT_OF_RECT(r, 30, 30, 10, 10); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_TOP_OF_RECT(r, 30, 30, 10, 10); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INSIDE_RECT(r, 31, 40, 10, 10); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_LEFT_OF_RECT(r, 31, 40, 10, 10); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_RIGHT_OF_RECT(r, 31, 40, 10, 10); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_BOTTOM_OF_RECT(r, 31, 40, 10, 10); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(42, 40, 10, 10)); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INSIDE_RECT(r, 42, 40, 10, 10); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_LEFT_OF_RECT(r, 42, 40, 10, 10); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_RIGHT_OF_RECT(r, 42, 40, 10, 10); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_TOP_OF_RECT(r, 42, 40, 10, 10); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_BOTTOM_OF_RECT(r, 42, 40, 10, 10); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INSIDE_RECT(r, 30, 30, 10, 10); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_LEFT_OF_RECT(r, 30, 30, 10, 10); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_RIGHT_OF_RECT(r, 30, 30, 10, 10); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_TOP_OF_RECT(r, 30, 30, 10, 10); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INSIDE_RECT(r, 31, 40, 10, 10); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_LEFT_OF_RECT(r, 31, 40, 10, 10); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_RIGHT_OF_RECT(r, 31, 40, 10, 10); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_BOTTOM_OF_RECT(r, 31, 40, 10, 10); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RegionTest, EmptySpan) { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region r; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(5, 0, 10, 10)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 5, 10, 10)); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Subtract(gfx::Rect(7, 7, 10, 0)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (Region::Iterator it(r); it.has_rect(); it.next()) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(it.rect().IsEmpty()); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_NO_INTERSECT(a, b) { \ 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region ar = a; \ 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region br = b; \ 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ar.Intersects(br)); \ 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(br.Intersects(ar)); \ 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ar.Intersects(b)); \ 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(br.Intersects(a)); \ 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_INTERSECT(a, b) { \ 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region ar = a; \ 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region br = b; \ 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ar.Intersects(br)); \ 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(br.Intersects(ar)); \ 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ar.Intersects(b)); \ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(br.Intersects(a)); \ 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RegionTest, IntersectsRegion) { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region r; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(gfx::Rect(), gfx::Rect()); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(gfx::Rect(), gfx::Rect(0, 0, 1, 1)); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(gfx::Rect(), gfx::Rect(1, 1, 1, 1)); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(gfx::Rect(-1, -1, 2, 2), gfx::Rect()); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 0, 1, 1)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(r, gfx::Rect()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 0, 1, 1)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 0, 2, 2)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(-1, 0, 2, 2)); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(-1, -1, 2, 2)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, -1, 2, 2)); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(-1, -1, 3, 3)); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 0, 3, 3)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(10, 0, 3, 3)); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 10, 13, 3)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(r, gfx::Rect()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(1, 1, 1, 1)); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 0, 2, 2)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(1, 0, 2, 2)); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(1, 1, 2, 2)); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 1, 2, 2)); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 0, 3, 3)); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(-1, -1, 2, 2)); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(2, -1, 2, 2)); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(2, 2, 2, 2)); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(-1, 2, 2, 2)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(11, 1, 1, 1)); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(10, 0, 2, 2)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(11, 0, 2, 2)); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(11, 1, 2, 2)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(10, 1, 2, 2)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(10, 0, 3, 3)); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(9, -1, 2, 2)); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(12, -1, 2, 2)); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(12, 2, 2, 2)); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(9, 2, 2, 2)); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, -1, 13, 5)); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(1, -1, 11, 5)); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(2, -1, 9, 5)); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(2, -1, 8, 5)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(3, -1, 8, 5)); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(r, gfx::Rect(3, -1, 7, 5)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 1, 13, 1)); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(1, 1, 11, 1)); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(2, 1, 9, 1)); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(2, 1, 8, 1)); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(3, 1, 8, 1)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(r, gfx::Rect(3, 1, 7, 1)); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 0, 13, 13)); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 1, 13, 11)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 2, 13, 9)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 2, 13, 8)); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_INTERSECT(r, gfx::Rect(0, 3, 13, 8)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(r, gfx::Rect(0, 3, 13, 7)); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RegionTest, ReadPastFullSpanVectorInIntersectsTest) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region r; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This region has enough spans to fill its allocated Vector exactly. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(400, 300, 1, 800)); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(785, 585, 1, 1)); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(787, 585, 1, 1)); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 587, 16, 162)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(26, 590, 300, 150)); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(196, 750, 1, 1)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 766, 1, 1)); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 782, 1, 1)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(745, 798, 1, 1)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(795, 882, 10, 585)); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(100, 1499, 586, 1)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(100, 1500, 585, 784)); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This query rect goes past the bottom of the Region, causing the 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // test to reach the last span and try go past it. It should not read 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // memory off the end of the span Vector. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_INTERSECT(r, gfx::Rect(0, 2184, 1, 150)); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_NO_CONTAINS(a, b) \ 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { \ 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region ar = a; \ 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region br = b; \ 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ar.Contains(br)); \ 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ar.Contains(b)); \ 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_CONTAINS(a, b) \ 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { \ 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region ar = a; \ 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region br = b; \ 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ar.Contains(br)); \ 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ar.Contains(b)); \ 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RegionTest, ContainsRegion) { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CONTAINS(gfx::Rect(), gfx::Rect()); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CONTAINS(gfx::Rect(0, 0, 1, 1), gfx::Rect()); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect()); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(), gfx::Rect(0, 0, 1, 1)); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(), gfx::Rect(1, 1, 1, 1)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(11, 10, 1, 1)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(10, 11, 1, 1)); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(9, 10, 1, 1)); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(10, 9, 1, 1)); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(9, 9, 2, 2)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(10, 9, 2, 2)); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(9, 10, 2, 2)); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(10, 10, 2, 2)); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(9, 9, 3, 3)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Region h_lines; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 10; i < 20; i += 2) 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) h_lines.Union(gfx::Rect(i, 10, 1, 10)); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_CONTAINS(gfx::Rect(10, 10, 9, 10), h_lines); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 9, 9), h_lines); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 11, 9, 9), h_lines); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 8, 10), h_lines); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(11, 10, 8, 10), h_lines); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Region v_lines; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 10; i < 20; i += 2) 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) v_lines.Union(gfx::Rect(10, i, 10, 1)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_CONTAINS(gfx::Rect(10, 10, 10, 9), v_lines); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 9, 9), v_lines); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(11, 10, 9, 9), v_lines); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 10, 8), v_lines); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 11, 10, 8), v_lines); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region grid; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 10; i < 20; i += 2) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int j = 10; j < 20; j += 2) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) grid.Union(gfx::Rect(i, j, 1, 1)); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CONTAINS(gfx::Rect(10, 10, 9, 9), grid); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 9, 8), grid); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 11, 9, 8), grid); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(10, 10, 8, 9), grid); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(gfx::Rect(11, 10, 8, 9), grid); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_CONTAINS(h_lines, h_lines); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_CONTAINS(v_lines, v_lines); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(v_lines, h_lines); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(h_lines, v_lines); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CONTAINS(grid, grid); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_CONTAINS(h_lines, grid); 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_CONTAINS(v_lines, grid); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(grid, h_lines); 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_NO_CONTAINS(grid, v_lines); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 10; i < 20; i += 2) 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_CONTAINS(h_lines, gfx::Rect(i, 10, 1, 10)); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 10; i < 20; i += 2) 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEST_CONTAINS(v_lines, gfx::Rect(10, i, 10, 1)); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 10; i < 20; i += 2) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int j = 10; j < 20; j += 2) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CONTAINS(grid, gfx::Rect(i, j, 1, 1)); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region container; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 40, 20)); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 20, 41, 20)); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 10, 10)); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 30, 10, 10)); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(30, 30, 10, 10)); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(30, 0, 10, 10)); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 10, 10)); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 30, 10, 10)); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(30, 0, 10, 40)); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(30, 0, 10, 10)); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(30, 30, 10, 10)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 10, 40)); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 10, 40)); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(30, 0, 10, 40)); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 40, 40)); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(10, -1, 20, 10)); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 40, 40)); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(10, 31, 20, 10)); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 40, 20)); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 20, 41, 20)); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(-1, 10, 10, 20)); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 40, 20)); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 20, 41, 20)); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(31, 10, 10, 20)); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 40, 40)); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Subtract(gfx::Rect(0, 20, 60, 0)); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(31, 10, 10, 20)); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 0, 60, 20)); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(30, 20, 10, 20)); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 39)); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 40)); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 41)); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(29, 0, 10, 39)); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CONTAINS(container, gfx::Rect(30, 0, 10, 40)); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(31, 0, 10, 41)); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(49, 0, 10, 39)); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(50, 0, 10, 40)); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(51, 0, 10, 41)); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Clear(); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(30, 0, 10, 20)); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.Union(gfx::Rect(0, 20, 60, 20)); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 39)); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 40)); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 41)); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(29, 0, 10, 39)); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CONTAINS(container, gfx::Rect(30, 0, 10, 40)); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(31, 0, 10, 41)); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(49, 0, 10, 39)); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(50, 0, 10, 40)); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_NO_CONTAINS(container, gfx::Rect(51, 0, 10, 41)); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RegionTest, Union) { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region r; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region r2; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A rect uniting a contained rect does not change the region. 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r2 = r = gfx::Rect(0, 0, 50, 50); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r2.Union(gfx::Rect(20, 20, 10, 10)); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(r, r2); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A rect uniting a containing rect gives back the containing rect. 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r = gfx::Rect(0, 0, 50, 50); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 0, 100, 100)); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(Region(gfx::Rect(0, 0, 100, 100)), r); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A complex region uniting a contained rect does not change the region. 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r = gfx::Rect(0, 0, 50, 50); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(100, 0, 50, 50)); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r2 = r; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r2.Union(gfx::Rect(20, 20, 10, 10)); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(r, r2); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A complex region uniting a containing rect gives back the containing rect. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r = gfx::Rect(0, 0, 50, 50); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(100, 0, 50, 50)); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 0, 500, 500)); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(Region(gfx::Rect(0, 0, 500, 500)), r); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RegionTest, IsEmpty) { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Region().IsEmpty()); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Region(gfx::Rect()).IsEmpty()); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Region(Region()).IsEmpty()); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Region(gfx::Rect(10, 10, 10, 0)).IsEmpty()); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Region(gfx::Rect(10, 10, 0, 10)).IsEmpty()); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Region(gfx::Rect(-10, 10, 10, 0)).IsEmpty()); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Region(gfx::Rect(-10, 10, 0, 10)).IsEmpty()); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Region(gfx::Rect(-1, -1, 1, 1)).IsEmpty()); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Region(gfx::Rect(0, 0, 1, 1)).IsEmpty()); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Region(gfx::Rect(0, 0, 2, 2)).IsEmpty()); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(SkIRect::MakeXYWH(10, 10, 10, 0).isEmpty()); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(SkIRect::MakeXYWH(10, 10, 0, 10).isEmpty()); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(SkIRect::MakeXYWH(-10, 10, 10, 0).isEmpty()); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(SkIRect::MakeXYWH(-10, 10, 0, 10).isEmpty()); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(SkIRect::MakeXYWH(-1, -1, 1, 1).isEmpty()); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(SkIRect::MakeXYWH(0, 0, 1, 1).isEmpty()); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(SkIRect::MakeXYWH(0, 0, 2, 2).isEmpty()); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RegionTest, Clear) { 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region r; 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r = gfx::Rect(0, 0, 50, 50); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.IsEmpty()); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Clear(); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.IsEmpty()); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r = gfx::Rect(0, 0, 50, 50); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(100, 0, 50, 50)); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Union(gfx::Rect(0, 0, 500, 500)); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(r.IsEmpty()); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r.Clear(); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r.IsEmpty()); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RegionSwap, Swap) { 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Region r1, r2, r3; 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r1 = gfx::Rect(0, 0, 50, 50); 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) r1.Swap(&r2); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(r1.IsEmpty()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(r2.ToString(), Region(gfx::Rect(0, 0, 50, 50)).ToString()); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r1 = gfx::Rect(0, 0, 50, 50); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r1.Union(gfx::Rect(100, 0, 50, 50)); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r1.Union(gfx::Rect(0, 0, 500, 500)); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r3 = r1; 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) r1.Swap(&r2); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(r1.ToString(), Region(gfx::Rect(0, 0, 50, 50)).ToString()); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(r2.ToString(), r3.ToString()); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace cc 455