blob: 50af47e91f6476c82dd0a4c636fa0ed930b92cae [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/gfx/geometry/point_f.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/point_conversions.h"
namespace gfx {
TEST(PointFTest, PointToPointF) {
// Check that explicit conversion from integer to float compiles.
Point a(10, 20);
PointF b = PointF(a);
EXPECT_EQ(static_cast<float>(a.x()), b.x());
EXPECT_EQ(static_cast<float>(a.y()), b.y());
}
TEST(PointFTest, IsOrigin) {
EXPECT_FALSE(PointF(0.1f, 0).IsOrigin());
EXPECT_FALSE(PointF(0, 0.1f).IsOrigin());
EXPECT_FALSE(PointF(0.1f, 2).IsOrigin());
EXPECT_FALSE(PointF(-0.1f, 0).IsOrigin());
EXPECT_FALSE(PointF(0, -0.1f).IsOrigin());
EXPECT_FALSE(PointF(-0.1f, -2).IsOrigin());
EXPECT_TRUE(PointF(0, 0).IsOrigin());
}
TEST(PointFTest, ToRoundedPoint) {
EXPECT_EQ(Point(0, 0), ToRoundedPoint(PointF(0, 0)));
EXPECT_EQ(Point(0, 0), ToRoundedPoint(PointF(0.0001f, 0.0001f)));
EXPECT_EQ(Point(0, 0), ToRoundedPoint(PointF(0.4999f, 0.4999f)));
EXPECT_EQ(Point(1, 1), ToRoundedPoint(PointF(0.5f, 0.5f)));
EXPECT_EQ(Point(1, 1), ToRoundedPoint(PointF(0.9999f, 0.9999f)));
EXPECT_EQ(Point(10, 10), ToRoundedPoint(PointF(10, 10)));
EXPECT_EQ(Point(10, 10), ToRoundedPoint(PointF(10.0001f, 10.0001f)));
EXPECT_EQ(Point(10, 10), ToRoundedPoint(PointF(10.4999f, 10.4999f)));
EXPECT_EQ(Point(11, 11), ToRoundedPoint(PointF(10.5f, 10.5f)));
EXPECT_EQ(Point(11, 11), ToRoundedPoint(PointF(10.9999f, 10.9999f)));
EXPECT_EQ(Point(-10, -10), ToRoundedPoint(PointF(-10, -10)));
EXPECT_EQ(Point(-10, -10), ToRoundedPoint(PointF(-10.0001f, -10.0001f)));
EXPECT_EQ(Point(-10, -10), ToRoundedPoint(PointF(-10.4999f, -10.4999f)));
EXPECT_EQ(Point(-11, -11), ToRoundedPoint(PointF(-10.5f, -10.5f)));
EXPECT_EQ(Point(-11, -11), ToRoundedPoint(PointF(-10.9999f, -10.9999f)));
}
TEST(PointFTest, Scale) {
EXPECT_EQ(PointF(2, -2), ScalePoint(PointF(1, -1), 2));
EXPECT_EQ(PointF(2, -2), ScalePoint(PointF(1, -1), 2, 2));
PointF zero;
PointF one(1, -1);
zero.Scale(2);
zero.Scale(3, 1.5);
one.Scale(2);
one.Scale(3, 1.5);
EXPECT_EQ(PointF(), zero);
EXPECT_EQ(PointF(6, -3), one);
}
TEST(PointFTest, SetToMinMax) {
PointF a;
a = PointF(3.5f, 5.5f);
EXPECT_EQ(PointF(3.5f, 5.5f), a);
a.SetToMax(PointF(2.5f, 4.5f));
EXPECT_EQ(PointF(3.5f, 5.5f), a);
a.SetToMax(PointF(3.5f, 5.5f));
EXPECT_EQ(PointF(3.5f, 5.5f), a);
a.SetToMax(PointF(4.5f, 2.5f));
EXPECT_EQ(PointF(4.5f, 5.5f), a);
a.SetToMax(PointF(8.5f, 10.5f));
EXPECT_EQ(PointF(8.5f, 10.5f), a);
a.SetToMin(PointF(9.5f, 11.5f));
EXPECT_EQ(PointF(8.5f, 10.5f), a);
a.SetToMin(PointF(8.5f, 10.5f));
EXPECT_EQ(PointF(8.5f, 10.5f), a);
a.SetToMin(PointF(11.5f, 9.5f));
EXPECT_EQ(PointF(8.5f, 9.5f), a);
a.SetToMin(PointF(7.5f, 11.5f));
EXPECT_EQ(PointF(7.5f, 9.5f), a);
a.SetToMin(PointF(3.5f, 5.5f));
EXPECT_EQ(PointF(3.5f, 5.5f), a);
}
TEST(PointFTest, IsWithinDistance) {
PointF pt(10.f, 10.f);
EXPECT_TRUE(pt.IsWithinDistance(PointF(10.f, 10.f), 0.0000000000001f));
EXPECT_FALSE(pt.IsWithinDistance(PointF(8.f, 8.f), 1.f));
pt = PointF(-10.f, -10.f);
EXPECT_FALSE(
pt.IsWithinDistance(PointF(10.f, 10.f), /*allowed_distance=*/10.f));
EXPECT_TRUE(pt.IsWithinDistance(PointF(-9.9988f, -10.0013f), 0.0017689f));
pt = PointF(std::numeric_limits<float>::max(),
std::numeric_limits<float>::max());
EXPECT_FALSE(pt.IsWithinDistance(PointF(std::numeric_limits<float>::min(),
std::numeric_limits<float>::min()),
100.f));
}
TEST(PointFTest, Transpose) {
gfx::PointF p(-1.5f, 2.5f);
EXPECT_EQ(gfx::PointF(2.5f, -1.5f), TransposePoint(p));
p.Transpose();
EXPECT_EQ(gfx::PointF(2.5f, -1.5f), p);
}
TEST(PointFTest, ToString) {
EXPECT_EQ("1,2", PointF(1, 2).ToString());
EXPECT_EQ("1.03125,2.5", PointF(1.03125, 2.5).ToString());
}
} // namespace gfx