// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "cc/base/simple_enclosed_region.h"

#include <stddef.h>

#include <algorithm>
#include <vector>

#include "base/logging.h"
#include "cc/base/region.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cc {
namespace {

bool ExpectRegionEq(const gfx::Rect& rect, const SimpleEnclosedRegion& region) {
  std::vector<gfx::Rect> actual_rects;
  std::vector<gfx::Rect> expected_rects;

  if (!rect.IsEmpty())
    expected_rects.push_back(rect);

  for (size_t i = 0; i < region.GetRegionComplexity(); ++i)
    actual_rects.push_back(region.GetRect(i));

  if (rect.IsEmpty() != region.IsEmpty()) {
    LOG(ERROR) << "Expected: " << rect.IsEmpty()
               << " Actual: " << region.IsEmpty();
    return false;
  }

  if (expected_rects.size() != actual_rects.size()) {
    LOG(ERROR) << "Expected: " << expected_rects.size()
               << " Actual: " << actual_rects.size();
    return false;
  }

  std::sort(actual_rects.begin(), actual_rects.end());
  std::sort(expected_rects.begin(), expected_rects.end());

  for (size_t i = 0; i < expected_rects.size(); ++i) {
    if (expected_rects[i] != actual_rects[i]) {
      LOG(ERROR) << "Expected: " << expected_rects[i].ToString()
                 << " Actual: " << actual_rects[i].ToString();
      return false;
    }
  }

  return true;
}

TEST(SimpleEnclosedRegionTest, Create) {
  SimpleEnclosedRegion r1;
  EXPECT_TRUE(r1.IsEmpty());
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r1));

  SimpleEnclosedRegion r2(gfx::Rect(2, 3, 4, 5));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r2));

  SimpleEnclosedRegion r3(2, 3, 4, 5);
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r3));

  SimpleEnclosedRegion r4(4, 5);
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(4, 5), r4));

  SimpleEnclosedRegion r5(Region(gfx::Rect(2, 3, 4, 5)));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r5));

  SimpleEnclosedRegion r6(r5);
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r6));
}

TEST(SimpleEnclosedRegionTest, Assign) {
  SimpleEnclosedRegion r;
  EXPECT_TRUE(r.IsEmpty());

  r = gfx::Rect(2, 3, 4, 5);
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 4, 5), r));

  r = SimpleEnclosedRegion(3, 4, 5, 6);
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(3, 4, 5, 6), r));
}

TEST(SimpleEnclosedRegionTest, Clear) {
  SimpleEnclosedRegion r(1, 2, 3, 4);
  EXPECT_FALSE(r.IsEmpty());
  r.Clear();
  EXPECT_TRUE(r.IsEmpty());
}

TEST(SimpleEnclosedRegionTest, GetRegionComplexity) {
  SimpleEnclosedRegion empty;
  EXPECT_EQ(0u, empty.GetRegionComplexity());

  SimpleEnclosedRegion stuff;
  stuff.Union(gfx::Rect(1, 2, 3, 4));
  EXPECT_EQ(1u, stuff.GetRegionComplexity());

  // The SimpleEnclosedRegion only holds up to 1 rect.
  stuff.Union(gfx::Rect(5, 6, 7, 8));
  EXPECT_EQ(1u, stuff.GetRegionComplexity());
}

TEST(SimpleEnclosedRegionTest, Contains) {
  SimpleEnclosedRegion r(1, 2, 5, 6);

  EXPECT_FALSE(r.Contains(gfx::Point(0, 2)));
  EXPECT_FALSE(r.Contains(gfx::Point(1, 1)));
  EXPECT_TRUE(r.Contains(gfx::Point(1, 2)));

  EXPECT_FALSE(r.Contains(gfx::Point(6, 2)));
  EXPECT_FALSE(r.Contains(gfx::Point(5, 1)));
  EXPECT_TRUE(r.Contains(gfx::Point(5, 2)));

  EXPECT_FALSE(r.Contains(gfx::Point(0, 7)));
  EXPECT_FALSE(r.Contains(gfx::Point(1, 8)));
  EXPECT_TRUE(r.Contains(gfx::Point(1, 7)));

  EXPECT_FALSE(r.Contains(gfx::Point(6, 7)));
  EXPECT_FALSE(r.Contains(gfx::Point(5, 8)));
  EXPECT_TRUE(r.Contains(gfx::Point(5, 7)));

  EXPECT_FALSE(r.Contains(gfx::Rect(0, 2, 1, 1)));
  EXPECT_FALSE(r.Contains(gfx::Rect(1, 1, 1, 1)));
  EXPECT_TRUE(r.Contains(gfx::Rect(1, 2, 1, 1)));
  EXPECT_FALSE(r.Contains(gfx::Rect(0, 1, 2, 2)));

  EXPECT_FALSE(r.Contains(gfx::Rect(6, 2, 1, 1)));
  EXPECT_FALSE(r.Contains(gfx::Rect(5, 1, 1, 1)));
  EXPECT_TRUE(r.Contains(gfx::Rect(5, 2, 1, 1)));
  EXPECT_FALSE(r.Contains(gfx::Rect(5, 1, 2, 2)));

  EXPECT_FALSE(r.Contains(gfx::Rect(0, 7, 1, 1)));
  EXPECT_FALSE(r.Contains(gfx::Rect(1, 8, 1, 1)));
  EXPECT_TRUE(r.Contains(gfx::Rect(1, 7, 1, 1)));
  EXPECT_FALSE(r.Contains(gfx::Rect(0, 7, 2, 2)));

  EXPECT_FALSE(r.Contains(gfx::Rect(6, 7, 1, 1)));
  EXPECT_FALSE(r.Contains(gfx::Rect(5, 8, 1, 1)));
  EXPECT_TRUE(r.Contains(gfx::Rect(5, 7, 1, 1)));
  EXPECT_FALSE(r.Contains(gfx::Rect(5, 7, 2, 2)));

  gfx::Rect q(1, 2, 5, 6);
  EXPECT_TRUE(r.Contains(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, -1, 0, 0));
  EXPECT_FALSE(r.Contains(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(-1, 1, 0, 0));
  EXPECT_FALSE(r.Contains(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(1, 0, 0, -1));
  EXPECT_FALSE(r.Contains(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, 0, -1, 1));
  EXPECT_FALSE(r.Contains(q)) << q.ToString();

  q.Inset(gfx::Insets::TLBR(0, 1, 1, 0));
  EXPECT_TRUE(r.Contains(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(1, -1, 0, 0));
  EXPECT_TRUE(r.Contains(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(-1, 0, 0, 1));
  EXPECT_TRUE(r.Contains(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, 0, 1, -1));
  EXPECT_TRUE(r.Contains(q)) << q.ToString();

  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(0, 2, 1, 1)));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(1, 1, 1, 1)));
  EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(1, 2, 1, 1)));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(0, 1, 2, 2)));

  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(6, 2, 1, 1)));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(5, 1, 1, 1)));
  EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(5, 2, 1, 1)));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(5, 1, 2, 2)));

  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(0, 7, 1, 1)));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(1, 8, 1, 1)));
  EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(1, 7, 1, 1)));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(0, 7, 2, 2)));

  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(6, 7, 1, 1)));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(5, 8, 1, 1)));
  EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(5, 7, 1, 1)));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(5, 7, 2, 2)));

  q = gfx::Rect(1, 2, 5, 6);
  EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, -1, 0, 0));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(-1, 1, 0, 0));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(1, 0, 0, -1));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, 0, -1, 1));
  EXPECT_FALSE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString();

  q.Inset(gfx::Insets::TLBR(0, 1, 1, 0));
  EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(1, -1, 0, 0));
  EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(-1, 0, 0, 1));
  EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, 0, 1, -1));
  EXPECT_TRUE(r.Contains(SimpleEnclosedRegion(q))) << q.ToString();
}

TEST(SimpleEnclosedRegionTest, Intersects) {
  SimpleEnclosedRegion r(1, 2, 5, 6);

  EXPECT_FALSE(r.Intersects(gfx::Rect(0, 2, 1, 1)));
  EXPECT_FALSE(r.Intersects(gfx::Rect(1, 1, 1, 1)));
  EXPECT_TRUE(r.Intersects(gfx::Rect(1, 2, 1, 1)));
  EXPECT_TRUE(r.Intersects(gfx::Rect(0, 1, 2, 2)));

  EXPECT_FALSE(r.Intersects(gfx::Rect(6, 2, 1, 1)));
  EXPECT_FALSE(r.Intersects(gfx::Rect(5, 1, 1, 1)));
  EXPECT_TRUE(r.Intersects(gfx::Rect(5, 2, 1, 1)));
  EXPECT_TRUE(r.Intersects(gfx::Rect(5, 1, 2, 2)));

  EXPECT_FALSE(r.Intersects(gfx::Rect(0, 7, 1, 1)));
  EXPECT_FALSE(r.Intersects(gfx::Rect(1, 8, 1, 1)));
  EXPECT_TRUE(r.Intersects(gfx::Rect(1, 7, 1, 1)));
  EXPECT_TRUE(r.Intersects(gfx::Rect(0, 7, 2, 2)));

  EXPECT_FALSE(r.Intersects(gfx::Rect(6, 7, 1, 1)));
  EXPECT_FALSE(r.Intersects(gfx::Rect(5, 8, 1, 1)));
  EXPECT_TRUE(r.Intersects(gfx::Rect(5, 7, 1, 1)));
  EXPECT_TRUE(r.Intersects(gfx::Rect(5, 7, 2, 2)));

  gfx::Rect q(1, 2, 5, 6);
  EXPECT_TRUE(r.Intersects(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, -1, 0, 0));
  EXPECT_TRUE(r.Intersects(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(-1, 1, 0, 0));
  EXPECT_TRUE(r.Intersects(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(1, 0, 0, -1));
  EXPECT_TRUE(r.Intersects(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, 0, -1, 1));
  EXPECT_TRUE(r.Intersects(q)) << q.ToString();

  q.Inset(gfx::Insets::TLBR(0, 1, 1, 0));
  EXPECT_TRUE(r.Intersects(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(1, -1, 0, 0));
  EXPECT_TRUE(r.Intersects(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(-1, 0, 0, 1));
  EXPECT_TRUE(r.Intersects(q)) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, 0, 1, -1));
  EXPECT_TRUE(r.Intersects(q)) << q.ToString();

  EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(0, 2, 1, 1)));
  EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(1, 1, 1, 1)));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(1, 2, 1, 1)));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(0, 1, 2, 2)));

  EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(6, 2, 1, 1)));
  EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(5, 1, 1, 1)));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(5, 2, 1, 1)));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(5, 1, 2, 2)));

  EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(0, 7, 1, 1)));
  EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(1, 8, 1, 1)));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(1, 7, 1, 1)));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(0, 7, 2, 2)));

  EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(6, 7, 1, 1)));
  EXPECT_FALSE(r.Intersects(SimpleEnclosedRegion(5, 8, 1, 1)));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(5, 7, 1, 1)));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(5, 7, 2, 2)));

  q = gfx::Rect(1, 2, 5, 6);
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, -1, 0, 0));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(-1, 1, 0, 0));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(1, 0, 0, -1));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, 0, -1, 1));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString();

  q.Inset(gfx::Insets::TLBR(0, 1, 1, 0));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(1, -1, 0, 0));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(-1, 0, 0, 1));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString();
  q.Inset(gfx::Insets::TLBR(0, 0, 1, -1));
  EXPECT_TRUE(r.Intersects(SimpleEnclosedRegion(q))) << q.ToString();
}

TEST(SimpleEnclosedRegionTest, Equals) {
  SimpleEnclosedRegion r(1, 2, 3, 4);
  EXPECT_TRUE(r.Equals(SimpleEnclosedRegion(1, 2, 3, 4)));
  EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(2, 2, 3, 4)));
  EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(1, 3, 3, 4)));
  EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(1, 2, 4, 4)));
  EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(1, 2, 3, 5)));
  EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(2, 2, 2, 4)));
  EXPECT_FALSE(r.Equals(SimpleEnclosedRegion(1, 3, 3, 3)));
}

TEST(SimpleEnclosedRegionTest, Bounds) {
  SimpleEnclosedRegion r;
  EXPECT_EQ(gfx::Rect(), r.bounds());
  r = gfx::Rect(3, 4, 5, 6);
  EXPECT_EQ(gfx::Rect(3, 4, 5, 6), r.bounds());
  r.Union(gfx::Rect(1, 2, 12, 13));
  EXPECT_EQ(gfx::Rect(1, 2, 12, 13), r.bounds());
}

TEST(SimpleEnclosedRegionTest, GetRect) {
  SimpleEnclosedRegion r(3, 4, 5, 6);
  EXPECT_EQ(gfx::Rect(3, 4, 5, 6), r.GetRect(0));
  r.Union(gfx::Rect(1, 2, 12, 13));
  EXPECT_EQ(gfx::Rect(1, 2, 12, 13), r.GetRect(0));
}

TEST(SimpleEnclosedRegionTest, Union) {
  SimpleEnclosedRegion r;
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r));

  // Empty Union anything = anything.
  r.Union(gfx::Rect(4, 5, 6, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(4, 5, 6, 7), r));

  // Anything Union empty = anything.
  r.Union(gfx::Rect());
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(4, 5, 6, 7), r));

  // Anything Union contained rect = Anything.
  r.Union(gfx::Rect(5, 6, 4, 5));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(4, 5, 6, 7), r));

  // Anything Union containing rect = containing rect.
  r.Union(gfx::Rect(2, 3, 8, 9));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 8, 9), r));
  r.Union(gfx::Rect(2, 3, 9, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 9, 10), r));

  // Union with a second disjoint rect with area larger than half of the first
  // one.
  // +---+     +--+
  // |   |     |  |
  // +---+     +--+
  r.Union(gfx::Rect(20, 20, 6, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(20, 20, 6, 10), r));

  // Union with a second disjoint rect with area smaller than half of the first
  // one.
  // +----+     +--+
  // |    |     +--+
  // +----+
  r.Union(gfx::Rect(2, 3, 3, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(20, 20, 6, 10), r));

  // Union with a second disjoint rect with area larger than the first one.
  // +---+     +-------+
  // |   |     |       |
  // +---+     +-------+
  r.Union(gfx::Rect(2, 3, 15, 15));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 3, 15, 15), r));

  // Union with rect which extends from the first one:
  // +----------+
  // |  1  |  2 |
  // +-----+----+
  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(20, 10, 5, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 15, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(10, 5, 10, 5));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 5, 10, 15), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(5, 10, 5, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(5, 10, 15, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(10, 20, 10, 5));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 15), r));

  // Union with rect which overlaps and extends from the first one:
  // +----+--+---+
  // |  1 |  |2  |
  // |    |  |   |
  // +----+--+---+
  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(10, 2, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 2, 10, 18), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(2, 10, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(2, 10, 18, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(10, 18, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 18), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(18, 10, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 18, 10), r));

  // Union with a second rect which overlaps with the first one and
  // area(rect 1) + area(overlap) > area(rect 2)*2 and
  // area(rect 1) < area(rect 2)*2.
  //       +---+
  //   +---|+ 2|
  //   |   +---+
  //   | 1  |
  //   +----+    (same figure for next test case.)
  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(14, 12, 8, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(11, 9, 8, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(9, 12, 8, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Union(gfx::Rect(13, 11, 8, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 10), r));

  // Union with a second rect which overlaps with the first one and
  // area(rect 1) + area(overlap) < area(rect 2)*2 and
  // area(rect 1) > area(rect 2).
  r = gfx::Rect(10, 10, 5, 5);
  r.Union(gfx::Rect(7, 7, 4, 4));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(7, 7, 4, 4), r));

  r = gfx::Rect(10, 10, 5, 5);
  r.Union(gfx::Rect(14, 7, 4, 4));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(14, 7, 4, 4), r));

  r = gfx::Rect(10, 10, 5, 5);
  r.Union(gfx::Rect(7, 14, 4, 4));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(7, 14, 4, 4), r));

  r = gfx::Rect(10, 10, 5, 5);
  r.Union(gfx::Rect(14, 14, 4, 4));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(14, 14, 4, 4), r));

  // Union with a second rect which overlaps with the first one and the new
  // unioned rect should combine both rect.
  //  +---+-+-----------+
  //  |  1| |    2      |
  //  |   +-|-----------+
  //  +-----+
  r = gfx::Rect(10, 10, 5, 5);
  r.Union(gfx::Rect(5, 11, 7, 4));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(5, 11, 10, 4), r));

  r = gfx::Rect(10, 10, 5, 5);
  r.Union(gfx::Rect(13, 10, 7, 4));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r));

  r = gfx::Rect(10, 10, 5, 5);
  r.Union(gfx::Rect(10, 12, 4, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 9), r));

  r = gfx::Rect(10, 10, 5, 5);
  r.Union(gfx::Rect(11, 11, 4, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(11, 10, 4, 8), r));
}

TEST(SimpleEnclosedRegionTest, Subtract) {
  SimpleEnclosedRegion r;
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r));

  // Empty Subtract anything = empty.
  r.Subtract(gfx::Rect(4, 5, 6, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r));

  // Subtracting an enclosing rect = empty.
  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(10, 10, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(9, 9, 12, 12));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(), r));

  // Subtracting a rect that covers one side of the region will shrink that
  // side.
  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(18, 10, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 8, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(18, 8, 10, 14));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 8, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(10, 18, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 8), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(8, 18, 14, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 8), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(2, 10, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(12, 10, 8, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(2, 8, 10, 14));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(12, 10, 8, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(10, 2, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 12, 10, 8), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(8, 2, 14, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 12, 10, 8), r));

  // Subtracting a rect that does not cover a full side will still shrink that
  // side.
  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(18, 12, 10, 8));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 8, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(18, 12, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 8, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(12, 18, 8, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 8), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(12, 18, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 8), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(2, 12, 10, 8));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(12, 10, 8, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(2, 12, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(12, 10, 8, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(12, 2, 8, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 12, 10, 8), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(12, 2, 10, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 12, 10, 8), r));

  // Subtracting a rect inside the region will make it choose the larger result.
  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(11, 11, 7, 8));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(18, 10, 2, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(11, 11, 8, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 18, 10, 2), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(12, 11, 7, 8));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 2, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(11, 12, 8, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 2), r));

  // Subtracting a rect that cuts the region in two will choose the larger side.
  // Here it's the top side.
  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(10, 14, 10, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(0, 14, 30, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(10, 14, 8, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(0, 14, 18, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(12, 14, 18, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r));

  // Here it's the bottom side.
  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(10, 13, 10, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(0, 13, 30, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(10, 13, 8, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(0, 13, 18, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(12, 13, 18, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 16, 10, 4), r));

  // Here it's the left side.
  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(14, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(14, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(14, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(14, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(14, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r));

  // Here it's the right side.
  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(13, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(13, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(13, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(13, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(13, 10, 3, 10));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(16, 10, 4, 10), r));

  // Subtracting a rect that leaves three possible choices will choose the
  // larger.
  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(10, 14, 7, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(10, 14, 5, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(15, 10, 5, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(13, 14, 7, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 4), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(15, 14, 5, 3));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 5, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(14, 10, 3, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(14, 10, 3, 5));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 15, 10, 5), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(14, 13, 3, 7));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 4, 10), r));

  r = gfx::Rect(10, 10, 10, 10);
  r.Subtract(gfx::Rect(14, 15, 3, 5));
  EXPECT_TRUE(ExpectRegionEq(gfx::Rect(10, 10, 10, 5), r));
}

}  // namespace
}  // namespace cc
