| // Copyright 2013 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 "cobalt/math/box_f.h" |
| |
| #include "base/basictypes.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace cobalt { |
| namespace math { |
| |
| TEST(BoxTest, Constructors) { |
| EXPECT_EQ(BoxF(0.f, 0.f, 0.f).ToString(), BoxF().ToString()); |
| EXPECT_EQ(BoxF(-3.f, -5.f, -7.f).ToString(), BoxF().ToString()); |
| EXPECT_EQ(BoxF(Point3F(), -3.f, -5.f, -7.f).ToString(), BoxF().ToString()); |
| |
| EXPECT_EQ(BoxF(Point3F(), 3.f, 5.f, 7.f).ToString(), |
| BoxF(3.f, 5.f, 7.f).ToString()); |
| EXPECT_EQ(BoxF(Point3F(), 0.f, 0.f, 0.f).ToString(), |
| BoxF(-3.f, -5.f, -7.f).ToString()); |
| |
| EXPECT_EQ(BoxF(Point3F(2.f, 4.f, 6.f), 0.f, 0.f, 0.f).ToString(), |
| BoxF(Point3F(2.f, 4.f, 6.f), -3.f, -5.f, -7.f).ToString()); |
| } |
| |
| TEST(BoxTest, IsEmpty) { |
| EXPECT_TRUE(BoxF().IsEmpty()); |
| EXPECT_TRUE(BoxF(Point3F(1.f, 2.f, 3.f), 0.f, 0.f, 0.f).IsEmpty()); |
| |
| EXPECT_TRUE(BoxF(2.f, 0.f, 0.f).IsEmpty()); |
| EXPECT_TRUE(BoxF(0.f, 2.f, 0.f).IsEmpty()); |
| EXPECT_TRUE(BoxF(0.f, 0.f, 2.f).IsEmpty()); |
| EXPECT_TRUE(BoxF(Point3F(1.f, 2.f, 3.f), 2.f, 0.f, 0.f).IsEmpty()); |
| EXPECT_TRUE(BoxF(Point3F(1.f, 2.f, 3.f), 0.f, 2.f, 0.f).IsEmpty()); |
| EXPECT_TRUE(BoxF(Point3F(1.f, 2.f, 3.f), 0.f, 0.f, 2.f).IsEmpty()); |
| |
| EXPECT_FALSE(BoxF(0.f, 2.f, 2.f).IsEmpty()); |
| EXPECT_FALSE(BoxF(2.f, 0.f, 2.f).IsEmpty()); |
| EXPECT_FALSE(BoxF(2.f, 2.f, 0.f).IsEmpty()); |
| EXPECT_FALSE(BoxF(Point3F(1.f, 2.f, 3.f), 0.f, 2.f, 2.f).IsEmpty()); |
| EXPECT_FALSE(BoxF(Point3F(1.f, 2.f, 3.f), 2.f, 0.f, 2.f).IsEmpty()); |
| EXPECT_FALSE(BoxF(Point3F(1.f, 2.f, 3.f), 2.f, 2.f, 0.f).IsEmpty()); |
| |
| EXPECT_FALSE(BoxF(2.f, 2.f, 2.f).IsEmpty()); |
| EXPECT_FALSE(BoxF(Point3F(1.f, 2.f, 3.f), 2.f, 2.f, 2.f).IsEmpty()); |
| } |
| |
| TEST(BoxTest, Union) { |
| BoxF empty_box; |
| BoxF box1(1.f, 1.f, 1.f); |
| BoxF box2(4.f, 6.f, 8.f); |
| BoxF box3(Point3F(3.f, 4.f, 5.f), 6.f, 4.f, 0.f); |
| |
| EXPECT_EQ(empty_box.ToString(), UnionBoxes(empty_box, empty_box).ToString()); |
| EXPECT_EQ(box1.ToString(), UnionBoxes(empty_box, box1).ToString()); |
| EXPECT_EQ(box1.ToString(), UnionBoxes(box1, empty_box).ToString()); |
| EXPECT_EQ(box2.ToString(), UnionBoxes(empty_box, box2).ToString()); |
| EXPECT_EQ(box2.ToString(), UnionBoxes(box2, empty_box).ToString()); |
| EXPECT_EQ(box3.ToString(), UnionBoxes(empty_box, box3).ToString()); |
| EXPECT_EQ(box3.ToString(), UnionBoxes(box3, empty_box).ToString()); |
| |
| // box_1 is contained in box_2 |
| EXPECT_EQ(box2.ToString(), UnionBoxes(box1, box2).ToString()); |
| EXPECT_EQ(box2.ToString(), UnionBoxes(box2, box1).ToString()); |
| |
| // box_1 and box_3 are disjoint |
| EXPECT_EQ(BoxF(9.f, 8.f, 5.f).ToString(), UnionBoxes(box1, box3).ToString()); |
| EXPECT_EQ(BoxF(9.f, 8.f, 5.f).ToString(), UnionBoxes(box3, box1).ToString()); |
| |
| // box_2 and box_3 intersect, but neither contains the other |
| EXPECT_EQ(BoxF(9.f, 8.f, 8.f).ToString(), UnionBoxes(box2, box3).ToString()); |
| EXPECT_EQ(BoxF(9.f, 8.f, 8.f).ToString(), UnionBoxes(box3, box2).ToString()); |
| } |
| |
| TEST(BoxTest, ExpandTo) { |
| BoxF box1; |
| BoxF box2(1.f, 1.f, 1.f); |
| BoxF box3(Point3F(1.f, 1.f, 1.f), 0.f, 0.f, 0.f); |
| |
| Point3F point1(0.5f, 0.5f, 0.5f); |
| Point3F point2(-0.5f, -0.5f, -0.5f); |
| |
| BoxF expected1_1(0.5f, 0.5f, 0.5f); |
| BoxF expected1_2(Point3F(-0.5f, -0.5f, -0.5f), 1.f, 1.f, 1.f); |
| |
| BoxF expected2_1 = box2; |
| BoxF expected2_2(Point3F(-0.5f, -0.5f, -0.5f), 1.5f, 1.5f, 1.5f); |
| |
| BoxF expected3_1(Point3F(0.5f, 0.5f, 0.5f), 0.5f, 0.5f, 0.5f); |
| BoxF expected3_2(Point3F(-0.5f, -0.5f, -0.5f), 1.5f, 1.5f, 1.5f); |
| |
| box1.ExpandTo(point1); |
| EXPECT_EQ(expected1_1.ToString(), box1.ToString()); |
| box1.ExpandTo(point2); |
| EXPECT_EQ(expected1_2.ToString(), box1.ToString()); |
| |
| box2.ExpandTo(point1); |
| EXPECT_EQ(expected2_1.ToString(), box2.ToString()); |
| box2.ExpandTo(point2); |
| EXPECT_EQ(expected2_2.ToString(), box2.ToString()); |
| |
| box3.ExpandTo(point1); |
| EXPECT_EQ(expected3_1.ToString(), box3.ToString()); |
| box3.ExpandTo(point2); |
| EXPECT_EQ(expected3_2.ToString(), box3.ToString()); |
| } |
| |
| TEST(BoxTest, Scale) { |
| BoxF box1(Point3F(2.f, 3.f, 4.f), 5.f, 6.f, 7.f); |
| |
| EXPECT_EQ(BoxF().ToString(), ScaleBox(box1, 0.f).ToString()); |
| EXPECT_EQ(box1.ToString(), ScaleBox(box1, 1.f).ToString()); |
| EXPECT_EQ(BoxF(Point3F(4.f, 12.f, 24.f), 10.f, 24.f, 42.f).ToString(), |
| ScaleBox(box1, 2.f, 4.f, 6.f).ToString()); |
| |
| BoxF box2 = box1; |
| box2.Scale(0.f); |
| EXPECT_EQ(BoxF().ToString(), box2.ToString()); |
| |
| box2 = box1; |
| box2.Scale(1.f); |
| EXPECT_EQ(box1.ToString(), box2.ToString()); |
| |
| box2.Scale(2.f, 4.f, 6.f); |
| EXPECT_EQ(BoxF(Point3F(4.f, 12.f, 24.f), 10.f, 24.f, 42.f).ToString(), |
| box2.ToString()); |
| } |
| |
| TEST(BoxTest, Equals) { |
| EXPECT_TRUE(BoxF() == BoxF()); |
| EXPECT_TRUE(BoxF(Point3F(2.f, 3.f, 4.f), 6.f, 8.f, 10.f) == |
| BoxF(Point3F(2.f, 3.f, 4.f), 6.f, 8.f, 10.f)); |
| EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 1.f)); |
| EXPECT_FALSE(BoxF() == BoxF(0.f, 1.f, 0.f)); |
| EXPECT_FALSE(BoxF() == BoxF(1.f, 0.f, 0.f)); |
| EXPECT_FALSE(BoxF() == BoxF(Point3F(0.f, 0.f, 1.f), 0.f, 0.f, 0.f)); |
| EXPECT_FALSE(BoxF() == BoxF(Point3F(0.f, 1.f, 0.f), 0.f, 0.f, 0.f)); |
| EXPECT_FALSE(BoxF() == BoxF(Point3F(1.f, 0.f, 0.f), 0.f, 0.f, 0.f)); |
| } |
| |
| TEST(BoxTest, NotEquals) { |
| EXPECT_FALSE(BoxF() != BoxF()); |
| EXPECT_FALSE(BoxF(Point3F(2.f, 3.f, 4.f), 6.f, 8.f, 10.f) != |
| BoxF(Point3F(2.f, 3.f, 4.f), 6.f, 8.f, 10.f)); |
| EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 1.f)); |
| EXPECT_TRUE(BoxF() != BoxF(0.f, 1.f, 0.f)); |
| EXPECT_TRUE(BoxF() != BoxF(1.f, 0.f, 0.f)); |
| EXPECT_TRUE(BoxF() != BoxF(Point3F(0.f, 0.f, 1.f), 0.f, 0.f, 0.f)); |
| EXPECT_TRUE(BoxF() != BoxF(Point3F(0.f, 1.f, 0.f), 0.f, 0.f, 0.f)); |
| EXPECT_TRUE(BoxF() != BoxF(Point3F(1.f, 0.f, 0.f), 0.f, 0.f, 0.f)); |
| } |
| |
| TEST(BoxTest, Offset) { |
| BoxF box1(Point3F(2.f, 3.f, 4.f), 5.f, 6.f, 7.f); |
| |
| EXPECT_EQ(box1.ToString(), (box1 + Vector3dF(0.f, 0.f, 0.f)).ToString()); |
| EXPECT_EQ(BoxF(Point3F(3.f, 1.f, 0.f), 5.f, 6.f, 7.f).ToString(), |
| (box1 + Vector3dF(1.f, -2.f, -4.f)).ToString()); |
| |
| BoxF box2 = box1; |
| box2 += Vector3dF(0.f, 0.f, 0.f); |
| EXPECT_EQ(box1.ToString(), box2.ToString()); |
| |
| box2 += Vector3dF(1.f, -2.f, -4.f); |
| EXPECT_EQ(BoxF(Point3F(3.f, 1.f, 0.f), 5.f, 6.f, 7.f).ToString(), |
| box2.ToString()); |
| } |
| |
| } // namespace math |
| } // namespace cobalt |