1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/basictypes.h" 6 #include "testing/gtest/include/gtest/gtest.h" 7 #include "ui/gfx/box_f.h" 8 9 namespace gfx { 10 11 TEST(BoxTest, Constructors) { 12 EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 0.f).ToString(), 13 BoxF().ToString()); 14 EXPECT_EQ(BoxF(0.f, 0.f, 0.f, -3.f, -5.f, -7.f).ToString(), 15 BoxF().ToString()); 16 17 EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 3.f, 5.f, 7.f).ToString(), 18 BoxF(3.f, 5.f, 7.f).ToString()); 19 EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 0.f).ToString(), 20 BoxF(-3.f, -5.f, -7.f).ToString()); 21 22 EXPECT_EQ(BoxF(2.f, 4.f, 6.f, 3.f, 5.f, 7.f).ToString(), 23 BoxF(Point3F(2.f, 4.f, 6.f), 3.f, 5.f, 7.f).ToString()); 24 EXPECT_EQ(BoxF(2.f, 4.f, 6.f, 0.f, 0.f, 0.f).ToString(), 25 BoxF(Point3F(2.f, 4.f, 6.f), -3.f, -5.f, -7.f).ToString()); 26 } 27 28 TEST(BoxTest, IsEmpty) { 29 EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 0.f).IsEmpty()); 30 EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 0.f, 0.f, 0.f).IsEmpty()); 31 32 EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 2.f, 0.f, 0.f).IsEmpty()); 33 EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 2.f, 0.f, 0.f).IsEmpty()); 34 EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 0.f, 2.f, 0.f).IsEmpty()); 35 EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 0.f, 2.f, 0.f).IsEmpty()); 36 EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 2.f).IsEmpty()); 37 EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 0.f, 0.f, 2.f).IsEmpty()); 38 39 EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 0.f, 2.f, 2.f).IsEmpty()); 40 EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 0.f, 2.f, 2.f).IsEmpty()); 41 EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 2.f, 0.f, 2.f).IsEmpty()); 42 EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 2.f, 0.f, 2.f).IsEmpty()); 43 EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 2.f, 2.f, 0.f).IsEmpty()); 44 EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 2.f, 2.f, 0.f).IsEmpty()); 45 46 EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 2.f, 2.f, 2.f).IsEmpty()); 47 EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 2.f, 2.f, 2.f).IsEmpty()); 48 } 49 50 TEST(BoxTest, Union) { 51 BoxF empty_box; 52 BoxF box1(0.f, 0.f, 0.f, 1.f, 1.f, 1.f); 53 BoxF box2(0.f, 0.f, 0.f, 4.f, 6.f, 8.f); 54 BoxF box3(3.f, 4.f, 5.f, 6.f, 4.f, 0.f); 55 56 EXPECT_EQ(empty_box.ToString(), UnionBoxes(empty_box, empty_box).ToString()); 57 EXPECT_EQ(box1.ToString(), UnionBoxes(empty_box, box1).ToString()); 58 EXPECT_EQ(box1.ToString(), UnionBoxes(box1, empty_box).ToString()); 59 EXPECT_EQ(box2.ToString(), UnionBoxes(empty_box, box2).ToString()); 60 EXPECT_EQ(box2.ToString(), UnionBoxes(box2, empty_box).ToString()); 61 EXPECT_EQ(box3.ToString(), UnionBoxes(empty_box, box3).ToString()); 62 EXPECT_EQ(box3.ToString(), UnionBoxes(box3, empty_box).ToString()); 63 64 // box_1 is contained in box_2 65 EXPECT_EQ(box2.ToString(), UnionBoxes(box1, box2).ToString()); 66 EXPECT_EQ(box2.ToString(), UnionBoxes(box2, box1).ToString()); 67 68 // box_1 and box_3 are disjoint 69 EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 5.f).ToString(), 70 UnionBoxes(box1, box3).ToString()); 71 EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 5.f).ToString(), 72 UnionBoxes(box3, box1).ToString()); 73 74 // box_2 and box_3 intersect, but neither contains the other 75 EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 8.f).ToString(), 76 UnionBoxes(box2, box3).ToString()); 77 EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 8.f).ToString(), 78 UnionBoxes(box3, box2).ToString()); 79 } 80 81 TEST(BoxTest, ExpandTo) { 82 BoxF box1; 83 BoxF box2(0.f, 0.f, 0.f, 1.f, 1.f, 1.f); 84 BoxF box3(1.f, 1.f, 1.f, 0.f, 0.f, 0.f); 85 86 Point3F point1(0.5f, 0.5f, 0.5f); 87 Point3F point2(-0.5f, -0.5f, -0.5f); 88 89 BoxF expected1_1(0.f, 0.f, 0.f, 0.5f, 0.5f, 0.5f); 90 BoxF expected1_2(-0.5f, -0.5f, -0.5f, 1.f, 1.f, 1.f); 91 92 BoxF expected2_1 = box2; 93 BoxF expected2_2(-0.5f, -0.5f, -0.5f, 1.5f, 1.5f, 1.5f); 94 95 BoxF expected3_1(0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f); 96 BoxF expected3_2(-0.5f, -0.5f, -0.5f, 1.5f, 1.5f, 1.5f); 97 98 box1.ExpandTo(point1); 99 EXPECT_EQ(expected1_1.ToString(), box1.ToString()); 100 box1.ExpandTo(point2); 101 EXPECT_EQ(expected1_2.ToString(), box1.ToString()); 102 103 box2.ExpandTo(point1); 104 EXPECT_EQ(expected2_1.ToString(), box2.ToString()); 105 box2.ExpandTo(point2); 106 EXPECT_EQ(expected2_2.ToString(), box2.ToString()); 107 108 box3.ExpandTo(point1); 109 EXPECT_EQ(expected3_1.ToString(), box3.ToString()); 110 box3.ExpandTo(point2); 111 EXPECT_EQ(expected3_2.ToString(), box3.ToString()); 112 } 113 114 TEST(BoxTest, Scale) { 115 BoxF box1(2.f, 3.f, 4.f, 5.f, 6.f, 7.f); 116 117 EXPECT_EQ(BoxF().ToString(), ScaleBox(box1, 0.f).ToString()); 118 EXPECT_EQ(box1.ToString(), ScaleBox(box1, 1.f).ToString()); 119 EXPECT_EQ(BoxF(4.f, 12.f, 24.f, 10.f, 24.f, 42.f).ToString(), 120 ScaleBox(box1, 2.f, 4.f, 6.f).ToString()); 121 122 BoxF box2 = box1; 123 box2.Scale(0.f); 124 EXPECT_EQ(BoxF().ToString(), box2.ToString()); 125 126 box2 = box1; 127 box2.Scale(1.f); 128 EXPECT_EQ(box1.ToString(), box2.ToString()); 129 130 box2.Scale(2.f, 4.f, 6.f); 131 EXPECT_EQ(BoxF(4.f, 12.f, 24.f, 10.f, 24.f, 42.f).ToString(), 132 box2.ToString()); 133 } 134 135 TEST(BoxTest, Equals) { 136 EXPECT_TRUE(BoxF() == BoxF()); 137 EXPECT_TRUE(BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f) == 138 BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f)); 139 EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 1.f)); 140 EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 0.f, 0.f, 1.f, 0.f)); 141 EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 0.f, 1.f, 0.f, 0.f)); 142 EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 1.f, 0.f, 0.f, 0.f)); 143 EXPECT_FALSE(BoxF() == BoxF(0.f, 1.f, 0.f, 0.f, 0.f, 0.f)); 144 EXPECT_FALSE(BoxF() == BoxF(1.f, 0.f, 0.f, 0.f, 0.f, 0.f)); 145 } 146 147 TEST(BoxTest, NotEquals) { 148 EXPECT_FALSE(BoxF() != BoxF()); 149 EXPECT_FALSE(BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f) != 150 BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f)); 151 EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 1.f)); 152 EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 0.f, 0.f, 1.f, 0.f)); 153 EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 0.f, 1.f, 0.f, 0.f)); 154 EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 1.f, 0.f, 0.f, 0.f)); 155 EXPECT_TRUE(BoxF() != BoxF(0.f, 1.f, 0.f, 0.f, 0.f, 0.f)); 156 EXPECT_TRUE(BoxF() != BoxF(1.f, 0.f, 0.f, 0.f, 0.f, 0.f)); 157 } 158 159 160 TEST(BoxTest, Offset) { 161 BoxF box1(2.f, 3.f, 4.f, 5.f, 6.f, 7.f); 162 163 EXPECT_EQ(box1.ToString(), (box1 + Vector3dF(0.f, 0.f, 0.f)).ToString()); 164 EXPECT_EQ(BoxF(3.f, 1.f, 0.f, 5.f, 6.f, 7.f).ToString(), 165 (box1 + Vector3dF(1.f, -2.f, -4.f)).ToString()); 166 167 BoxF box2 = box1; 168 box2 += Vector3dF(0.f, 0.f, 0.f); 169 EXPECT_EQ(box1.ToString(), box2.ToString()); 170 171 box2 += Vector3dF(1.f, -2.f, -4.f); 172 EXPECT_EQ(BoxF(3.f, 1.f, 0.f, 5.f, 6.f, 7.f).ToString(), 173 box2.ToString()); 174 } 175 176 } // namespace gfx 177