box_unittest.cc 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. #include "testing/gtest/include/gtest/gtest.h"
  5. #include "ui/gfx/geometry/box_f.h"
  6. namespace gfx {
  7. TEST(BoxTest, Constructors) {
  8. EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 0.f).ToString(),
  9. BoxF().ToString());
  10. EXPECT_EQ(BoxF(0.f, 0.f, 0.f, -3.f, -5.f, -7.f).ToString(),
  11. BoxF().ToString());
  12. EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 3.f, 5.f, 7.f).ToString(),
  13. BoxF(3.f, 5.f, 7.f).ToString());
  14. EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 0.f).ToString(),
  15. BoxF(-3.f, -5.f, -7.f).ToString());
  16. EXPECT_EQ(BoxF(2.f, 4.f, 6.f, 3.f, 5.f, 7.f).ToString(),
  17. BoxF(Point3F(2.f, 4.f, 6.f), 3.f, 5.f, 7.f).ToString());
  18. EXPECT_EQ(BoxF(2.f, 4.f, 6.f, 0.f, 0.f, 0.f).ToString(),
  19. BoxF(Point3F(2.f, 4.f, 6.f), -3.f, -5.f, -7.f).ToString());
  20. }
  21. TEST(BoxTest, IsEmpty) {
  22. EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 0.f).IsEmpty());
  23. EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 0.f, 0.f, 0.f).IsEmpty());
  24. EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 2.f, 0.f, 0.f).IsEmpty());
  25. EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 2.f, 0.f, 0.f).IsEmpty());
  26. EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 0.f, 2.f, 0.f).IsEmpty());
  27. EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 0.f, 2.f, 0.f).IsEmpty());
  28. EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 2.f).IsEmpty());
  29. EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 0.f, 0.f, 2.f).IsEmpty());
  30. EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 0.f, 2.f, 2.f).IsEmpty());
  31. EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 0.f, 2.f, 2.f).IsEmpty());
  32. EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 2.f, 0.f, 2.f).IsEmpty());
  33. EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 2.f, 0.f, 2.f).IsEmpty());
  34. EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 2.f, 2.f, 0.f).IsEmpty());
  35. EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 2.f, 2.f, 0.f).IsEmpty());
  36. EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 2.f, 2.f, 2.f).IsEmpty());
  37. EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 2.f, 2.f, 2.f).IsEmpty());
  38. }
  39. TEST(BoxTest, Union) {
  40. BoxF empty_box;
  41. BoxF box1(0.f, 0.f, 0.f, 1.f, 1.f, 1.f);
  42. BoxF box2(0.f, 0.f, 0.f, 4.f, 6.f, 8.f);
  43. BoxF box3(3.f, 4.f, 5.f, 6.f, 4.f, 0.f);
  44. EXPECT_EQ(empty_box.ToString(), UnionBoxes(empty_box, empty_box).ToString());
  45. EXPECT_EQ(box1.ToString(), UnionBoxes(empty_box, box1).ToString());
  46. EXPECT_EQ(box1.ToString(), UnionBoxes(box1, empty_box).ToString());
  47. EXPECT_EQ(box2.ToString(), UnionBoxes(empty_box, box2).ToString());
  48. EXPECT_EQ(box2.ToString(), UnionBoxes(box2, empty_box).ToString());
  49. EXPECT_EQ(box3.ToString(), UnionBoxes(empty_box, box3).ToString());
  50. EXPECT_EQ(box3.ToString(), UnionBoxes(box3, empty_box).ToString());
  51. // box_1 is contained in box_2
  52. EXPECT_EQ(box2.ToString(), UnionBoxes(box1, box2).ToString());
  53. EXPECT_EQ(box2.ToString(), UnionBoxes(box2, box1).ToString());
  54. // box_1 and box_3 are disjoint
  55. EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 5.f).ToString(),
  56. UnionBoxes(box1, box3).ToString());
  57. EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 5.f).ToString(),
  58. UnionBoxes(box3, box1).ToString());
  59. // box_2 and box_3 intersect, but neither contains the other
  60. EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 8.f).ToString(),
  61. UnionBoxes(box2, box3).ToString());
  62. EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 8.f).ToString(),
  63. UnionBoxes(box3, box2).ToString());
  64. }
  65. TEST(BoxTest, ExpandTo) {
  66. BoxF box1;
  67. BoxF box2(0.f, 0.f, 0.f, 1.f, 1.f, 1.f);
  68. BoxF box3(1.f, 1.f, 1.f, 0.f, 0.f, 0.f);
  69. Point3F point1(0.5f, 0.5f, 0.5f);
  70. Point3F point2(-0.5f, -0.5f, -0.5f);
  71. BoxF expected1_1(0.f, 0.f, 0.f, 0.5f, 0.5f, 0.5f);
  72. BoxF expected1_2(-0.5f, -0.5f, -0.5f, 1.f, 1.f, 1.f);
  73. BoxF expected2_1 = box2;
  74. BoxF expected2_2(-0.5f, -0.5f, -0.5f, 1.5f, 1.5f, 1.5f);
  75. BoxF expected3_1(0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f);
  76. BoxF expected3_2(-0.5f, -0.5f, -0.5f, 1.5f, 1.5f, 1.5f);
  77. box1.ExpandTo(point1);
  78. EXPECT_EQ(expected1_1.ToString(), box1.ToString());
  79. box1.ExpandTo(point2);
  80. EXPECT_EQ(expected1_2.ToString(), box1.ToString());
  81. box2.ExpandTo(point1);
  82. EXPECT_EQ(expected2_1.ToString(), box2.ToString());
  83. box2.ExpandTo(point2);
  84. EXPECT_EQ(expected2_2.ToString(), box2.ToString());
  85. box3.ExpandTo(point1);
  86. EXPECT_EQ(expected3_1.ToString(), box3.ToString());
  87. box3.ExpandTo(point2);
  88. EXPECT_EQ(expected3_2.ToString(), box3.ToString());
  89. }
  90. TEST(BoxTest, Scale) {
  91. BoxF box1(2.f, 3.f, 4.f, 5.f, 6.f, 7.f);
  92. EXPECT_EQ(BoxF().ToString(), ScaleBox(box1, 0.f).ToString());
  93. EXPECT_EQ(box1.ToString(), ScaleBox(box1, 1.f).ToString());
  94. EXPECT_EQ(BoxF(4.f, 12.f, 24.f, 10.f, 24.f, 42.f).ToString(),
  95. ScaleBox(box1, 2.f, 4.f, 6.f).ToString());
  96. BoxF box2 = box1;
  97. box2.Scale(0.f);
  98. EXPECT_EQ(BoxF().ToString(), box2.ToString());
  99. box2 = box1;
  100. box2.Scale(1.f);
  101. EXPECT_EQ(box1.ToString(), box2.ToString());
  102. box2.Scale(2.f, 4.f, 6.f);
  103. EXPECT_EQ(BoxF(4.f, 12.f, 24.f, 10.f, 24.f, 42.f).ToString(),
  104. box2.ToString());
  105. }
  106. TEST(BoxTest, Equals) {
  107. EXPECT_TRUE(BoxF() == BoxF());
  108. EXPECT_TRUE(BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f) ==
  109. BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f));
  110. EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 1.f));
  111. EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 0.f, 0.f, 1.f, 0.f));
  112. EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 0.f, 1.f, 0.f, 0.f));
  113. EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 1.f, 0.f, 0.f, 0.f));
  114. EXPECT_FALSE(BoxF() == BoxF(0.f, 1.f, 0.f, 0.f, 0.f, 0.f));
  115. EXPECT_FALSE(BoxF() == BoxF(1.f, 0.f, 0.f, 0.f, 0.f, 0.f));
  116. }
  117. TEST(BoxTest, NotEquals) {
  118. EXPECT_FALSE(BoxF() != BoxF());
  119. EXPECT_FALSE(BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f) !=
  120. BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f));
  121. EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 1.f));
  122. EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 0.f, 0.f, 1.f, 0.f));
  123. EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 0.f, 1.f, 0.f, 0.f));
  124. EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 1.f, 0.f, 0.f, 0.f));
  125. EXPECT_TRUE(BoxF() != BoxF(0.f, 1.f, 0.f, 0.f, 0.f, 0.f));
  126. EXPECT_TRUE(BoxF() != BoxF(1.f, 0.f, 0.f, 0.f, 0.f, 0.f));
  127. }
  128. TEST(BoxTest, Offset) {
  129. BoxF box1(2.f, 3.f, 4.f, 5.f, 6.f, 7.f);
  130. EXPECT_EQ(box1.ToString(), (box1 + Vector3dF(0.f, 0.f, 0.f)).ToString());
  131. EXPECT_EQ(BoxF(3.f, 1.f, 0.f, 5.f, 6.f, 7.f).ToString(),
  132. (box1 + Vector3dF(1.f, -2.f, -4.f)).ToString());
  133. BoxF box2 = box1;
  134. box2 += Vector3dF(0.f, 0.f, 0.f);
  135. EXPECT_EQ(box1.ToString(), box2.ToString());
  136. box2 += Vector3dF(1.f, -2.f, -4.f);
  137. EXPECT_EQ(BoxF(3.f, 1.f, 0.f, 5.f, 6.f, 7.f).ToString(),
  138. box2.ToString());
  139. }
  140. } // namespace gfx