103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file. 403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "cc/base/simple_enclosed_region.h" 603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include <algorithm> 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include <vector> 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/logging.h" 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "cc/base/region.h" 1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace cc { 1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace { 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)bool ExpectRegionEq(const gfx::Rect& rect, const SimpleEnclosedRegion& region) { 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::vector<gfx::Rect> actual_rects; 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::vector<gfx::Rect> expected_rects; 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!rect.IsEmpty()) 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) expected_rects.push_back(rect); 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (size_t i = 0; i < region.GetRegionComplexity(); ++i) 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) actual_rects.push_back(region.GetRect(i)); 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (rect.IsEmpty() != region.IsEmpty()) { 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) LOG(ERROR) << "Expected: " << rect.IsEmpty() 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) << " Actual: " << region.IsEmpty(); 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (expected_rects.size() != actual_rects.size()) { 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) LOG(ERROR) << "Expected: " << expected_rects.size() 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) << " Actual: " << actual_rects.size(); 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::sort(actual_rects.begin(), actual_rects.end()); 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::sort(expected_rects.begin(), expected_rects.end()); 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (size_t i = 0; i < expected_rects.size(); ++i) { 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (expected_rects[i] != actual_rects[i]) { 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) LOG(ERROR) << "Expected: " << expected_rects[i].ToString() 4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) << " Actual: " << actual_rects[i].ToString(); 4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return true; 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, Create) { 5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r1; 5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r1.IsEmpty()); 5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r1)); 5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r2(gfx::Rect(2, 3, 4, 5)); 5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r2)); 6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r3(2, 3, 4, 5); 6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r3)); 6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r4(4, 5); 6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(4, 5), r4)); 6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r5(Region(gfx::Rect(2, 3, 4, 5))); 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r5)); 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r6(r5); 7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r6)); 7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, Assign) { 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r; 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.IsEmpty()); 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(2, 3, 4, 5); 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r)); 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = SimpleEnclosedRegion(3, 4, 5, 6); 8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(3, 4, 5, 6), r)); 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, Clear) { 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r(1, 2, 3, 4); 8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.IsEmpty()); 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Clear(); 8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.IsEmpty()); 9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, GetRegionComplexity) { 9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion empty; 9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(0u, empty.GetRegionComplexity()); 9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion stuff; 9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) stuff.Union(gfx::Rect(1, 2, 3, 4)); 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1u, stuff.GetRegionComplexity()); 9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // The SimpleEnclosedRegion only holds up to 1 rect. 10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) stuff.Union(gfx::Rect(5, 6, 7, 8)); 10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1u, stuff.GetRegionComplexity()); 10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, Contains) { 10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r(1, 2, 5, 6); 10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 10803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(0, 2))); 10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(1, 1))); 11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(1, 2))); 11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 11203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(6, 2))); 11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(5, 1))); 11403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(5, 2))); 11503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 11603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(0, 7))); 11703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(1, 8))); 11803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(1, 7))); 11903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 12003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(6, 7))); 12103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Point(5, 8))); 12203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Point(5, 7))); 12303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 12403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(0, 2, 1, 1))); 12503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(1, 1, 1, 1))); 12603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Rect(1, 2, 1, 1))); 12703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(0, 1, 2, 2))); 12803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 12903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(6, 2, 1, 1))); 13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(5, 1, 1, 1))); 13103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Rect(5, 2, 1, 1))); 13203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(5, 1, 2, 2))); 13303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 13403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(0, 7, 1, 1))); 13503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(1, 8, 1, 1))); 13603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Rect(1, 7, 1, 1))); 13703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(0, 7, 2, 2))); 13803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(6, 7, 1, 1))); 14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(5, 8, 1, 1))); 14103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(gfx::Rect(5, 7, 1, 1))); 14203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(gfx::Rect(5, 7, 2, 2))); 14303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 14403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gfx::Rect q(1, 2, 5, 6); 14503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(q)) << q.ToString(); 14603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(-1, 0, 0, 0); 14703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(q)) << q.ToString(); 14803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(1, -1, 0, 0); 14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(q)) << q.ToString(); 15003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 1, -1, 0); 15103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(q)) << q.ToString(); 15203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 0, 1, -1); 15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(q)) << q.ToString(); 15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 15503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(1, 0, 0, 1); 15603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(q)) << q.ToString(); 15703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(-1, 1, 0, 0); 15803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(q)) << q.ToString(); 15903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, -1, 1, 0); 16003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(q)) << q.ToString(); 16103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 0, -1, 1); 16203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(q)) << q.ToString(); 16303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 16403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(0, 2, 1, 1))); 16503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(1, 1, 1, 1))); 16603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(1, 2, 1, 1))); 16703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(0, 1, 2, 2))); 16803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 16903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(6, 2, 1, 1))); 17003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(5, 1, 1, 1))); 17103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(5, 2, 1, 1))); 17203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(5, 1, 2, 2))); 17303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 17403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(0, 7, 1, 1))); 17503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(1, 8, 1, 1))); 17603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(1, 7, 1, 1))); 17703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(0, 7, 2, 2))); 17803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 17903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(6, 7, 1, 1))); 18003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(5, 8, 1, 1))); 18103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(5, 7, 1, 1))); 18203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(5, 7, 2, 2))); 18303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 18403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q = gfx::Rect(1, 2, 5, 6); 18503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString(); 18603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(-1, 0, 0, 0); 18703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString(); 18803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(1, -1, 0, 0); 18903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString(); 19003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 1, -1, 0); 19103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString(); 19203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 0, 1, -1); 19303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString(); 19403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(1, 0, 0, 1); 19603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString(); 19703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(-1, 1, 0, 0); 19803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString(); 19903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, -1, 1, 0); 20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString(); 20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 0, -1, 1); 20203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString(); 20303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 20403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 20503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, Intersects) { 20603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r(1, 2, 5, 6); 20703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 20803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(gfx::Rect(0, 2, 1, 1))); 20903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(gfx::Rect(1, 1, 1, 1))); 21003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(gfx::Rect(1, 2, 1, 1))); 21103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(gfx::Rect(0, 1, 2, 2))); 21203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 21303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(gfx::Rect(6, 2, 1, 1))); 21403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(gfx::Rect(5, 1, 1, 1))); 21503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(gfx::Rect(5, 2, 1, 1))); 21603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(gfx::Rect(5, 1, 2, 2))); 21703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 21803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(gfx::Rect(0, 7, 1, 1))); 21903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(gfx::Rect(1, 8, 1, 1))); 22003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(gfx::Rect(1, 7, 1, 1))); 22103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(gfx::Rect(0, 7, 2, 2))); 22203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 22303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(gfx::Rect(6, 7, 1, 1))); 22403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(gfx::Rect(5, 8, 1, 1))); 22503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(gfx::Rect(5, 7, 1, 1))); 22603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(gfx::Rect(5, 7, 2, 2))); 22703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 22803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gfx::Rect q(1, 2, 5, 6); 22903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(q)) << q.ToString(); 23003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(-1, 0, 0, 0); 23103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(q)) << q.ToString(); 23203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(1, -1, 0, 0); 23303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(q)) << q.ToString(); 23403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 1, -1, 0); 23503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(q)) << q.ToString(); 23603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 0, 1, -1); 23703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(q)) << q.ToString(); 23803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 23903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(1, 0, 0, 1); 24003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(q)) << q.ToString(); 24103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(-1, 1, 0, 0); 24203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(q)) << q.ToString(); 24303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, -1, 1, 0); 24403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(q)) << q.ToString(); 24503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 0, -1, 1); 24603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(q)) << q.ToString(); 24703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 24803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(0, 2, 1, 1))); 24903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(1, 1, 1, 1))); 25003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(1, 2, 1, 1))); 25103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(0, 1, 2, 2))); 25203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 25303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(6, 2, 1, 1))); 25403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(5, 1, 1, 1))); 25503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(5, 2, 1, 1))); 25603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(5, 1, 2, 2))); 25703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 25803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(0, 7, 1, 1))); 25903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(1, 8, 1, 1))); 26003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(1, 7, 1, 1))); 26103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(0, 7, 2, 2))); 26203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 26303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(6, 7, 1, 1))); 26403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(5, 8, 1, 1))); 26503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(5, 7, 1, 1))); 26603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(5, 7, 2, 2))); 26703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 26803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q = gfx::Rect(1, 2, 5, 6); 26903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString(); 27003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(-1, 0, 0, 0); 27103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString(); 27203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(1, -1, 0, 0); 27303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString(); 27403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 1, -1, 0); 27503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString(); 27603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 0, 1, -1); 27703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString(); 27803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 27903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(1, 0, 0, 1); 28003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString(); 28103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(-1, 1, 0, 0); 28203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString(); 28303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, -1, 1, 0); 28403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString(); 28503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) q.Inset(0, 0, -1, 1); 28603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString(); 28703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 28803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 28903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, Equals) { 29003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r(1, 2, 3, 4); 29103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.Equals(SimpleEnclosedRegion(1, 2, 3, 4))); 29203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(2, 2, 3, 4))); 29303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(1, 3, 3, 4))); 29403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(1, 2, 4, 4))); 29503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(1, 2, 3, 5))); 29603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(2, 2, 2, 4))); 29703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(1, 3, 3, 3))); 29803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 29903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 30003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, Bounds) { 30103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r; 30203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(gfx::Rect(), r.bounds()); 30303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(3, 4, 5, 6); 30403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(gfx::Rect(3, 4, 5, 6), r.bounds()); 30503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(1, 2, 12, 13)); 30603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(gfx::Rect(1, 2, 12, 13), r.bounds()); 30703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 30803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 30903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, GetRect) { 31003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r(3, 4, 5, 6); 31103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(gfx::Rect(3, 4, 5, 6), r.GetRect(0)); 31203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(1, 2, 12, 13)); 31303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(gfx::Rect(1, 2, 12, 13), r.GetRect(0)); 31403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 31503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 31603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, Union) { 31703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r; 31803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r)); 31903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 32003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Empty Union anything = anything. 32103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(4, 5, 6, 7)); 32203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(4, 5, 6, 7), r)); 32303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 32403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Anything Union empty = anything. 32503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect()); 32603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(4, 5, 6, 7), r)); 32703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 32803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Anything Union contained rect = Anything. 32903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(5, 6, 4, 5)); 33003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(4, 5, 6, 7), r)); 33103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 33203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Anything Union containing rect = containing rect. 33303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(2, 3, 8, 9)); 33403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 8, 9), r)); 33503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(2, 3, 9, 10)); 33603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 9, 10), r)); 33703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 33803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Union with a smaller disjoint rect is ignored. 33903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(20, 21, 9, 9)); 34003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 9, 10), r)); 34103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 34203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Union with a smaller overlapping rect is ignored. 34303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(3, 4, 9, 9)); 34403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 9, 10), r)); 34503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 34603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Union with an equal sized rect can be either one. 34703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(4, 4, 9, 10)); 34803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(1u, r.GetRegionComplexity()); 34903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(r.bounds() == gfx::Rect(2, 3, 9, 10) || 35003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.bounds() == gfx::Rect(4, 4, 9, 10)); 35103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 35203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Union with a larger disjoint rect is taken. 35303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(20, 21, 12, 13)); 35403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(20, 21, 12, 13), r)); 35503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 35603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Union with a larger overlapping rect is taken. 35703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(19, 19, 12, 14)); 35803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(19, 19, 12, 14), r)); 35903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 36003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // True also when the rect covers one edge of the existing region. 36103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 36203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(12, 7, 9, 16)); 36303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(12, 7, 9, 16), r)); 36403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 36503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 36603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(9, 7, 9, 16)); 36703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(9, 7, 9, 16), r)); 36803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 36903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 37003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(7, 12, 16, 9)); 37103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(7, 12, 16, 9), r)); 37203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 37303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 37403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(7, 9, 16, 9)); 37503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(7, 9, 16, 9), r)); 37603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 37703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // But if the existing region can be expanded to make a larger rect, then it 37803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // will. Union area is 9*12 = 108. By merging, we make a rect with an area of 37903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // 10*11 = 110. The resulting rect is expanded as far as possible while 38003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // remaining enclosed in the Union. 38103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 38203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(12, 9, 9, 12)); 38303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 11, 10), r)); 38403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 38503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 38603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(9, 9, 9, 12)); 38703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(9, 10, 11, 10), r)); 38803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 38903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 39003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(9, 12, 12, 9)); 39103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 11), r)); 39203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 39303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 39403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(9, 9, 12, 9)); 39503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 9, 10, 11), r)); 39603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 39703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(12, 9, 9, 12); 39803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(10, 10, 10, 10)); 39903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 11, 10), r)); 40003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 40103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(9, 9, 9, 12); 40203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(10, 10, 10, 10)); 40303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(9, 10, 11, 10), r)); 40403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 40503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(9, 12, 12, 9); 40603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(10, 10, 10, 10)); 40703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 11), r)); 40803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 40903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(9, 9, 12, 9); 41003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Union(gfx::Rect(10, 10, 10, 10)); 41103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 9, 10, 11), r)); 41203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 41303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 41403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(SimpleEnclosedRegionTest, Subtract) { 41503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SimpleEnclosedRegion r; 41603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r)); 41703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 41803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Empty Subtract anything = empty. 41903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(4, 5, 6, 7)); 42003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r)); 42103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 42203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Subtracting an enclosing rect = empty. 42303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 42403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(10, 10, 10, 10)); 42503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r)); 42603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 42703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 42803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(9, 9, 12, 12)); 42903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r)); 43003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 43103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Subtracting a rect that covers one side of the region will shrink that 43203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // side. 43303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 43403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(18, 10, 10, 10)); 43503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 8, 10), r)); 43603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 43703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 43803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(18, 8, 10, 14)); 43903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 8, 10), r)); 44003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 44103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 44203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(10, 18, 10, 10)); 44303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 8), r)); 44403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 44503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 44603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(8, 18, 14, 10)); 44703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 8), r)); 44803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 44903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 45003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(2, 10, 10, 10)); 45103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(12, 10, 8, 10), r)); 45203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 45303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 45403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(2, 8, 10, 14)); 45503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(12, 10, 8, 10), r)); 45603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 45703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 45803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(10, 2, 10, 10)); 45903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 12, 10, 8), r)); 46003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 46103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 46203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(8, 2, 14, 10)); 46303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 12, 10, 8), r)); 46403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 46503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Subtracting a rect that does not cover a full side will still shrink that 46603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // side. 46703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 46803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(18, 12, 10, 8)); 46903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 8, 10), r)); 47003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 47103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 47203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(18, 12, 10, 10)); 47303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 8, 10), r)); 47403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 47503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 47603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(12, 18, 8, 10)); 47703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 8), r)); 47803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 47903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 48003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(12, 18, 10, 10)); 48103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 8), r)); 48203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 48303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 48403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(2, 12, 10, 8)); 48503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(12, 10, 8, 10), r)); 48603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 48703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 48803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(2, 12, 10, 10)); 48903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(12, 10, 8, 10), r)); 49003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 49103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 49203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(12, 2, 8, 10)); 49303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 12, 10, 8), r)); 49403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 49503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 49603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(12, 2, 10, 10)); 49703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 12, 10, 8), r)); 49803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 49903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Subtracting a rect inside the region will make it choose the larger result. 50003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 50103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(11, 11, 7, 8)); 50203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(18, 10, 2, 10), r)); 50303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 50403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 50503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(11, 11, 8, 7)); 50603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 18, 10, 2), r)); 50703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 50803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 50903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(12, 11, 7, 8)); 51003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 2, 10), r)); 51103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 51203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 51303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(11, 12, 8, 7)); 51403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 2), r)); 51503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 51603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Subtracting a rect that cuts the region in two will choose the larger side. 51703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Here it's the top side. 51803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 51903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(10, 14, 10, 3)); 52003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r)); 52103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 52203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 52303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(0, 14, 30, 3)); 52403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r)); 52503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 52603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 52703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(10, 14, 8, 3)); 52803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r)); 52903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 53003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 53103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(0, 14, 18, 3)); 53203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r)); 53303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 53403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 53503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(12, 14, 18, 3)); 53603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r)); 53703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 53803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Here it's the bottom side. 53903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 54003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(10, 13, 10, 3)); 54103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r)); 54203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 54303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 54403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(0, 13, 30, 3)); 54503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r)); 54603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 54703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 54803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(10, 13, 8, 3)); 54903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r)); 55003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 55103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 55203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(0, 13, 18, 3)); 55303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r)); 55403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 55503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 55603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(12, 13, 18, 3)); 55703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r)); 55803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 55903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Here it's the left side. 56003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 56103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(14, 10, 3, 10)); 56203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r)); 56303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 56403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 56503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(14, 10, 3, 10)); 56603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r)); 56703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 56803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 56903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(14, 10, 3, 10)); 57003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r)); 57103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 57203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 57303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(14, 10, 3, 10)); 57403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r)); 57503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 57603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 57703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(14, 10, 3, 10)); 57803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r)); 57903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 58003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Here it's the right side. 58103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 58203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(13, 10, 3, 10)); 58303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r)); 58403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 58503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 58603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(13, 10, 3, 10)); 58703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r)); 58803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 58903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 59003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(13, 10, 3, 10)); 59103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r)); 59203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 59303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 59403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(13, 10, 3, 10)); 59503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r)); 59603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 59703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 59803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(13, 10, 3, 10)); 59903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r)); 60003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 60103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Subtracting a rect that leaves three possible choices will choose the 60203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // larger. 60303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 60403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(10, 14, 7, 3)); 60503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r)); 60603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 60703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 60803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(10, 14, 5, 3)); 60903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(15, 10, 5, 10), r)); 61003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 61103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 61203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(13, 14, 7, 3)); 61303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r)); 61403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 61503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 61603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(15, 14, 5, 3)); 61703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 5, 10), r)); 61803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 61903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 62003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(14, 10, 3, 7)); 62103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r)); 62203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 62303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 62403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(14, 10, 3, 5)); 62503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 15, 10, 5), r)); 62603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 62703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 62803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(14, 13, 3, 7)); 62903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r)); 63003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 63103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r = gfx::Rect(10, 10, 10, 10); 63203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) r.Subtract(gfx::Rect(14, 15, 3, 5)); 63303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 5), r)); 63403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 63503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 63603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} // namespace 63703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} // namespace cc 638