// Copyright 2016 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 "pdf/range_set.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace chrome_pdf {

TEST(RangeSetTest, Union) {
  {
    RangeSet range_set;
    EXPECT_EQ("{}", range_set.ToString());
    range_set.Union(gfx::Range(50, 100));
    EXPECT_EQ("{[50,100)}", range_set.ToString());
    range_set.Union(gfx::Range(80, 150));
    EXPECT_EQ("{[50,150)}", range_set.ToString());
    range_set.Union(gfx::Range(0, 70));
    EXPECT_EQ("{[0,150)}", range_set.ToString());
    range_set.Union(gfx::Range(70, 120));
    EXPECT_EQ("{[0,150)}", range_set.ToString());
    range_set.Union(gfx::Range(200, 150));
    EXPECT_EQ("{[0,150)[151,201)}", range_set.ToString());
    range_set.Union(gfx::Range(150, 151));
    EXPECT_EQ("{[0,201)}", range_set.ToString());
    range_set.Union(gfx::Range(0, 300));
    EXPECT_EQ("{[0,300)}", range_set.ToString());
    range_set.Union(gfx::Range(500, 600));
    EXPECT_EQ("{[0,300)[500,600)}", range_set.ToString());
  }
  {
    RangeSet range_set_1;
    range_set_1.Union(gfx::Range(0, 10));
    range_set_1.Union(gfx::Range(20, 30));
    range_set_1.Union(gfx::Range(40, 50));

    EXPECT_EQ("{[0,10)[20,30)[40,50)}", range_set_1.ToString());
    range_set_1.Union(range_set_1);
    EXPECT_EQ("{[0,10)[20,30)[40,50)}", range_set_1.ToString());

    RangeSet range_set_2;
    range_set_2.Union(gfx::Range(10, 20));
    range_set_2.Union(gfx::Range(30, 40));
    range_set_2.Union(gfx::Range(50, 60));

    EXPECT_EQ("{[10,20)[30,40)[50,60)}", range_set_2.ToString());
    range_set_1.Union(range_set_2);
    EXPECT_EQ("{[0,60)}", range_set_1.ToString());
    EXPECT_EQ(RangeSet(gfx::Range(0, 60)), range_set_1);
  }
}

TEST(RangeSetTest, Contains) {
  RangeSet range_set;
  range_set.Union(gfx::Range(10, 20));
  range_set.Union(gfx::Range(30, 40));
  range_set.Union(gfx::Range(50, 60));
  EXPECT_TRUE(range_set.Contains(range_set));

  {
    EXPECT_FALSE(range_set.Contains(9));
    EXPECT_FALSE(range_set.Contains(29));
    EXPECT_FALSE(range_set.Contains(49));

    EXPECT_TRUE(range_set.Contains(10));
    EXPECT_TRUE(range_set.Contains(30));
    EXPECT_TRUE(range_set.Contains(50));

    EXPECT_TRUE(range_set.Contains(15));
    EXPECT_TRUE(range_set.Contains(35));
    EXPECT_TRUE(range_set.Contains(55));

    EXPECT_TRUE(range_set.Contains(19));
    EXPECT_TRUE(range_set.Contains(39));
    EXPECT_TRUE(range_set.Contains(59));

    EXPECT_FALSE(range_set.Contains(20));
    EXPECT_FALSE(range_set.Contains(40));
    EXPECT_FALSE(range_set.Contains(60));
  }
  {
    EXPECT_FALSE(range_set.Contains(gfx::Range(0, 10)));
    EXPECT_FALSE(range_set.Contains(gfx::Range(20, 30)));
    EXPECT_FALSE(range_set.Contains(gfx::Range(40, 50)));

    EXPECT_FALSE(range_set.Contains(gfx::Range(5, 15)));
    EXPECT_FALSE(range_set.Contains(gfx::Range(25, 35)));
    EXPECT_FALSE(range_set.Contains(gfx::Range(45, 55)));

    EXPECT_TRUE(range_set.Contains(gfx::Range(10, 15)));
    EXPECT_TRUE(range_set.Contains(gfx::Range(30, 35)));
    EXPECT_TRUE(range_set.Contains(gfx::Range(50, 55)));

    EXPECT_TRUE(range_set.Contains(gfx::Range(15, 20)));
    EXPECT_TRUE(range_set.Contains(gfx::Range(35, 40)));
    EXPECT_TRUE(range_set.Contains(gfx::Range(55, 60)));

    EXPECT_TRUE(range_set.Contains(gfx::Range(10, 20)));
    EXPECT_TRUE(range_set.Contains(gfx::Range(30, 40)));
    EXPECT_TRUE(range_set.Contains(gfx::Range(50, 60)));

    EXPECT_FALSE(range_set.Contains(gfx::Range(15, 25)));
    EXPECT_FALSE(range_set.Contains(gfx::Range(35, 45)));
    EXPECT_FALSE(range_set.Contains(gfx::Range(55, 65)));

    EXPECT_FALSE(range_set.Contains(gfx::Range(20, 25)));
    EXPECT_FALSE(range_set.Contains(gfx::Range(40, 45)));
    EXPECT_FALSE(range_set.Contains(gfx::Range(60, 65)));

    EXPECT_FALSE(range_set.Contains(gfx::Range(0, 100)));
  }
  {
    RangeSet range_set_2 = range_set;
    EXPECT_TRUE(range_set_2.Contains(range_set));
    range_set_2.Union(gfx::Range(100, 200));
    EXPECT_TRUE(range_set_2.Contains(range_set));
    EXPECT_FALSE(range_set.Contains(range_set_2));
  }
}

TEST(RangeSetTest, Intersects) {
  RangeSet range_set;
  range_set.Union(gfx::Range(10, 20));
  range_set.Union(gfx::Range(30, 40));
  range_set.Union(gfx::Range(50, 60));
  EXPECT_TRUE(range_set.Intersects(range_set));
  {
    EXPECT_FALSE(range_set.Intersects(gfx::Range(0, 10)));
    EXPECT_FALSE(range_set.Intersects(gfx::Range(20, 30)));
    EXPECT_FALSE(range_set.Intersects(gfx::Range(40, 50)));

    EXPECT_TRUE(range_set.Intersects(gfx::Range(5, 15)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(25, 35)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(45, 55)));

    EXPECT_TRUE(range_set.Intersects(gfx::Range(10, 15)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(30, 35)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(50, 55)));

    EXPECT_TRUE(range_set.Intersects(gfx::Range(15, 20)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(35, 40)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(55, 60)));

    EXPECT_TRUE(range_set.Intersects(gfx::Range(10, 20)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(30, 40)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(50, 60)));

    EXPECT_TRUE(range_set.Intersects(gfx::Range(15, 25)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(35, 45)));
    EXPECT_TRUE(range_set.Intersects(gfx::Range(55, 65)));

    EXPECT_FALSE(range_set.Intersects(gfx::Range(20, 25)));
    EXPECT_FALSE(range_set.Intersects(gfx::Range(40, 45)));
    EXPECT_FALSE(range_set.Intersects(gfx::Range(60, 65)));

    EXPECT_TRUE(range_set.Intersects(gfx::Range(0, 100)));
  }
  {
    RangeSet range_set_2;
    range_set_2.Union(gfx::Range(5, 15));
    range_set_2.Union(gfx::Range(25, 35));
    range_set_2.Union(gfx::Range(45, 55));
    EXPECT_TRUE(range_set_2.Intersects(range_set));
  }
  {
    RangeSet range_set_2;
    range_set_2.Union(gfx::Range(5, 10));
    range_set_2.Union(gfx::Range(25, 30));
    range_set_2.Union(gfx::Range(45, 50));
    EXPECT_FALSE(range_set_2.Intersects(range_set));
  }
}

TEST(RangeSetTest, Intersect) {
  {
    RangeSet range_set;
    range_set.Union(gfx::Range(10, 20));
    range_set.Union(gfx::Range(30, 40));
    range_set.Union(gfx::Range(50, 60));

    EXPECT_EQ("{[10,20)[30,40)[50,60)}", range_set.ToString());
    range_set.Intersect(range_set);
    EXPECT_EQ("{[10,20)[30,40)[50,60)}", range_set.ToString());
    range_set.Intersect(gfx::Range(0, 100));
    EXPECT_EQ("{[10,20)[30,40)[50,60)}", range_set.ToString());
    range_set.Intersect(gfx::Range(0, 55));
    EXPECT_EQ("{[10,20)[30,40)[50,55)}", range_set.ToString());
    range_set.Intersect(gfx::Range(15, 100));
    EXPECT_EQ("{[15,20)[30,40)[50,55)}", range_set.ToString());
    range_set.Intersect(gfx::Range(17, 53));
    EXPECT_EQ("{[17,20)[30,40)[50,53)}", range_set.ToString());
    range_set.Intersect(gfx::Range(19, 45));
    EXPECT_EQ("{[19,20)[30,40)}", range_set.ToString());
    range_set.Intersect(gfx::Range(30, 45));
    EXPECT_EQ("{[30,40)}", range_set.ToString());
    range_set.Intersect(gfx::Range(35, 40));
    EXPECT_EQ("{[35,40)}", range_set.ToString());
    range_set.Intersect(gfx::Range(35, 35));
    EXPECT_TRUE(range_set.IsEmpty());
  }
  {
    RangeSet range_set;
    range_set.Union(gfx::Range(10, 20));
    range_set.Union(gfx::Range(30, 40));
    range_set.Union(gfx::Range(50, 60));

    RangeSet range_set_2;
    range_set_2.Union(gfx::Range(12, 17));
    range_set_2.Union(gfx::Range(25, 35));
    range_set_2.Union(gfx::Range(39, 55));
    range_set_2.Union(gfx::Range(59, 100));

    range_set.Intersect(range_set_2);
    EXPECT_EQ("{[12,17)[30,35)[39,40)[50,55)[59,60)}", range_set.ToString());
  }
}

TEST(RangeSetTest, Subtract) {
  {
    RangeSet range_set;
    range_set.Union(gfx::Range(10, 20));
    range_set.Union(gfx::Range(30, 40));
    range_set.Union(gfx::Range(50, 60));

    EXPECT_EQ("{[10,20)[30,40)[50,60)}", range_set.ToString());
    range_set.Subtract(gfx::Range(35, 35));
    EXPECT_EQ("{[10,20)[30,40)[50,60)}", range_set.ToString());
    range_set.Subtract(gfx::Range(0, 5));
    EXPECT_EQ("{[10,20)[30,40)[50,60)}", range_set.ToString());
    range_set.Subtract(gfx::Range(70, 80));
    EXPECT_EQ("{[10,20)[30,40)[50,60)}", range_set.ToString());
    range_set.Subtract(gfx::Range(35, 39));
    EXPECT_EQ("{[10,20)[30,35)[39,40)[50,60)}", range_set.ToString());
    range_set.Subtract(gfx::Range(15, 32));
    EXPECT_EQ("{[10,15)[32,35)[39,40)[50,60)}", range_set.ToString());
    range_set.Subtract(gfx::Range(15, 55));
    EXPECT_EQ("{[10,15)[55,60)}", range_set.ToString());
    range_set.Subtract(gfx::Range(0, 100));
    EXPECT_EQ("{}", range_set.ToString());
  }
  {
    RangeSet range_set;
    range_set.Union(gfx::Range(10, 20));
    range_set.Union(gfx::Range(30, 40));
    range_set.Union(gfx::Range(50, 60));
    range_set.Subtract(range_set);
    EXPECT_EQ("{}", range_set.ToString());
  }
  {
    RangeSet range_set;
    range_set.Union(gfx::Range(10, 20));
    range_set.Union(gfx::Range(30, 40));
    range_set.Union(gfx::Range(50, 60));

    RangeSet range_set_2;
    range_set_2.Union(gfx::Range(12, 17));
    range_set_2.Union(gfx::Range(25, 35));
    range_set_2.Union(gfx::Range(39, 55));
    range_set_2.Union(gfx::Range(59, 100));

    range_set.Subtract(range_set_2);
    EXPECT_EQ("{[10,12)[17,20)[35,39)[55,59)}", range_set.ToString());
  }
}

TEST(RangeSetTest, Xor) {
  {
    RangeSet range_set;
    range_set.Union(gfx::Range(10, 20));
    range_set.Union(gfx::Range(30, 40));
    range_set.Union(gfx::Range(50, 60));
    range_set.Xor(range_set);
    EXPECT_EQ("{}", range_set.ToString());
  }
  {
    RangeSet range_set;
    range_set.Union(gfx::Range(10, 20));
    range_set.Union(gfx::Range(30, 40));
    range_set.Union(gfx::Range(50, 60));

    RangeSet range_set_2;
    range_set_2.Union(gfx::Range(12, 17));
    range_set_2.Union(gfx::Range(25, 35));
    range_set_2.Union(gfx::Range(39, 55));
    range_set_2.Union(gfx::Range(59, 100));

    range_set.Xor(range_set_2);
    EXPECT_EQ("{[10,12)[17,20)[25,30)[35,39)[40,50)[55,59)[60,100)}",
              range_set.ToString());
  }
}

TEST(RangeSetTest, OperationsOnEmptySet) {
  RangeSet range_set;
  range_set.Intersect(gfx::Range(10, 20));
  range_set.Intersects(gfx::Range(10, 20));
  range_set.Subtract(gfx::Range(10, 20));
  range_set.Xor(gfx::Range(30, 40));
  range_set.Union(gfx::Range(10, 20));
}

}  // namespace chrome_pdf
