point_f_unittest.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // Copyright 2021 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 "ui/gfx/geometry/point_f.h"
  5. #include "testing/gtest/include/gtest/gtest.h"
  6. #include "ui/gfx/geometry/point.h"
  7. #include "ui/gfx/geometry/point_conversions.h"
  8. namespace gfx {
  9. TEST(PointFTest, PointToPointF) {
  10. // Check that explicit conversion from integer to float compiles.
  11. Point a(10, 20);
  12. PointF b = PointF(a);
  13. EXPECT_EQ(static_cast<float>(a.x()), b.x());
  14. EXPECT_EQ(static_cast<float>(a.y()), b.y());
  15. }
  16. TEST(PointFTest, IsOrigin) {
  17. EXPECT_FALSE(PointF(0.1f, 0).IsOrigin());
  18. EXPECT_FALSE(PointF(0, 0.1f).IsOrigin());
  19. EXPECT_FALSE(PointF(0.1f, 2).IsOrigin());
  20. EXPECT_FALSE(PointF(-0.1f, 0).IsOrigin());
  21. EXPECT_FALSE(PointF(0, -0.1f).IsOrigin());
  22. EXPECT_FALSE(PointF(-0.1f, -2).IsOrigin());
  23. EXPECT_TRUE(PointF(0, 0).IsOrigin());
  24. }
  25. TEST(PointFTest, ToRoundedPoint) {
  26. EXPECT_EQ(Point(0, 0), ToRoundedPoint(PointF(0, 0)));
  27. EXPECT_EQ(Point(0, 0), ToRoundedPoint(PointF(0.0001f, 0.0001f)));
  28. EXPECT_EQ(Point(0, 0), ToRoundedPoint(PointF(0.4999f, 0.4999f)));
  29. EXPECT_EQ(Point(1, 1), ToRoundedPoint(PointF(0.5f, 0.5f)));
  30. EXPECT_EQ(Point(1, 1), ToRoundedPoint(PointF(0.9999f, 0.9999f)));
  31. EXPECT_EQ(Point(10, 10), ToRoundedPoint(PointF(10, 10)));
  32. EXPECT_EQ(Point(10, 10), ToRoundedPoint(PointF(10.0001f, 10.0001f)));
  33. EXPECT_EQ(Point(10, 10), ToRoundedPoint(PointF(10.4999f, 10.4999f)));
  34. EXPECT_EQ(Point(11, 11), ToRoundedPoint(PointF(10.5f, 10.5f)));
  35. EXPECT_EQ(Point(11, 11), ToRoundedPoint(PointF(10.9999f, 10.9999f)));
  36. EXPECT_EQ(Point(-10, -10), ToRoundedPoint(PointF(-10, -10)));
  37. EXPECT_EQ(Point(-10, -10), ToRoundedPoint(PointF(-10.0001f, -10.0001f)));
  38. EXPECT_EQ(Point(-10, -10), ToRoundedPoint(PointF(-10.4999f, -10.4999f)));
  39. EXPECT_EQ(Point(-11, -11), ToRoundedPoint(PointF(-10.5f, -10.5f)));
  40. EXPECT_EQ(Point(-11, -11), ToRoundedPoint(PointF(-10.9999f, -10.9999f)));
  41. }
  42. TEST(PointFTest, Scale) {
  43. EXPECT_EQ(PointF(2, -2), ScalePoint(PointF(1, -1), 2));
  44. EXPECT_EQ(PointF(2, -2), ScalePoint(PointF(1, -1), 2, 2));
  45. PointF zero;
  46. PointF one(1, -1);
  47. zero.Scale(2);
  48. zero.Scale(3, 1.5);
  49. one.Scale(2);
  50. one.Scale(3, 1.5);
  51. EXPECT_EQ(PointF(), zero);
  52. EXPECT_EQ(PointF(6, -3), one);
  53. }
  54. TEST(PointFTest, SetToMinMax) {
  55. PointF a;
  56. a = PointF(3.5f, 5.5f);
  57. EXPECT_EQ(PointF(3.5f, 5.5f), a);
  58. a.SetToMax(PointF(2.5f, 4.5f));
  59. EXPECT_EQ(PointF(3.5f, 5.5f), a);
  60. a.SetToMax(PointF(3.5f, 5.5f));
  61. EXPECT_EQ(PointF(3.5f, 5.5f), a);
  62. a.SetToMax(PointF(4.5f, 2.5f));
  63. EXPECT_EQ(PointF(4.5f, 5.5f), a);
  64. a.SetToMax(PointF(8.5f, 10.5f));
  65. EXPECT_EQ(PointF(8.5f, 10.5f), a);
  66. a.SetToMin(PointF(9.5f, 11.5f));
  67. EXPECT_EQ(PointF(8.5f, 10.5f), a);
  68. a.SetToMin(PointF(8.5f, 10.5f));
  69. EXPECT_EQ(PointF(8.5f, 10.5f), a);
  70. a.SetToMin(PointF(11.5f, 9.5f));
  71. EXPECT_EQ(PointF(8.5f, 9.5f), a);
  72. a.SetToMin(PointF(7.5f, 11.5f));
  73. EXPECT_EQ(PointF(7.5f, 9.5f), a);
  74. a.SetToMin(PointF(3.5f, 5.5f));
  75. EXPECT_EQ(PointF(3.5f, 5.5f), a);
  76. }
  77. TEST(PointFTest, IsWithinDistance) {
  78. PointF pt(10.f, 10.f);
  79. EXPECT_TRUE(pt.IsWithinDistance(PointF(10.f, 10.f), 0.0000000000001f));
  80. EXPECT_FALSE(pt.IsWithinDistance(PointF(8.f, 8.f), 1.f));
  81. pt = PointF(-10.f, -10.f);
  82. EXPECT_FALSE(
  83. pt.IsWithinDistance(PointF(10.f, 10.f), /*allowed_distance=*/10.f));
  84. EXPECT_TRUE(pt.IsWithinDistance(PointF(-9.9988f, -10.0013f), 0.0017689f));
  85. pt = PointF(std::numeric_limits<float>::max(),
  86. std::numeric_limits<float>::max());
  87. EXPECT_FALSE(pt.IsWithinDistance(PointF(std::numeric_limits<float>::min(),
  88. std::numeric_limits<float>::min()),
  89. 100.f));
  90. }
  91. TEST(PointFTest, Transpose) {
  92. gfx::PointF p(-1.5f, 2.5f);
  93. EXPECT_EQ(gfx::PointF(2.5f, -1.5f), TransposePoint(p));
  94. p.Transpose();
  95. EXPECT_EQ(gfx::PointF(2.5f, -1.5f), p);
  96. }
  97. TEST(PointFTest, ToString) {
  98. EXPECT_EQ("1,2", PointF(1, 2).ToString());
  99. EXPECT_EQ("1.03125,2.5", PointF(1.03125, 2.5).ToString());
  100. }
  101. } // namespace gfx