2015-04-28 12:07:19 +08:00
|
|
|
#include <SFML/Graphics/Rect.hpp>
|
2023-04-24 20:13:52 +08:00
|
|
|
|
2015-04-28 12:07:19 +08:00
|
|
|
#include <SFML/System/Vector2.hpp>
|
|
|
|
|
2023-11-13 13:03:45 +08:00
|
|
|
#include <catch2/catch_template_test_macros.hpp>
|
2021-12-29 13:03:15 +08:00
|
|
|
|
2022-07-05 00:20:58 +08:00
|
|
|
#include <GraphicsUtil.hpp>
|
2022-07-25 14:36:05 +08:00
|
|
|
#include <type_traits>
|
|
|
|
|
2023-11-13 13:03:45 +08:00
|
|
|
TEMPLATE_TEST_CASE("[Graphics] sf::Rect", "", int, float)
|
2015-04-28 12:07:19 +08:00
|
|
|
{
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Type traits")
|
|
|
|
{
|
2023-11-13 13:03:45 +08:00
|
|
|
STATIC_CHECK(std::is_copy_constructible_v<sf::Rect<TestType>>);
|
|
|
|
STATIC_CHECK(std::is_copy_assignable_v<sf::Rect<TestType>>);
|
|
|
|
STATIC_CHECK(std::is_nothrow_move_constructible_v<sf::Rect<TestType>>);
|
|
|
|
STATIC_CHECK(std::is_nothrow_move_assignable_v<sf::Rect<TestType>>);
|
2023-01-18 12:51:08 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("Construction")
|
2015-04-28 12:07:19 +08:00
|
|
|
{
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Default constructor")
|
2015-04-28 12:07:19 +08:00
|
|
|
{
|
2023-11-13 13:03:45 +08:00
|
|
|
constexpr sf::Rect<TestType> rectangle;
|
2024-06-16 00:42:23 +08:00
|
|
|
STATIC_CHECK(rectangle.position.x == 0);
|
|
|
|
STATIC_CHECK(rectangle.position.y == 0);
|
|
|
|
STATIC_CHECK(rectangle.size.x == 0);
|
|
|
|
STATIC_CHECK(rectangle.size.y == 0);
|
2015-04-28 12:07:19 +08:00
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("(left, top, width, height) constructor")
|
2015-04-28 12:07:19 +08:00
|
|
|
{
|
2023-11-13 13:03:45 +08:00
|
|
|
constexpr sf::Rect<TestType> rectangle({1, 2}, {3, 4});
|
2024-06-16 00:42:23 +08:00
|
|
|
STATIC_CHECK(rectangle.position.x == 1);
|
|
|
|
STATIC_CHECK(rectangle.position.y == 2);
|
|
|
|
STATIC_CHECK(rectangle.size.x == 3);
|
|
|
|
STATIC_CHECK(rectangle.size.y == 4);
|
2015-04-28 12:07:19 +08:00
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("(Vector2, Vector2) constructor")
|
2015-04-28 12:07:19 +08:00
|
|
|
{
|
2023-11-13 13:03:45 +08:00
|
|
|
constexpr sf::Vector2<TestType> position(1, 2);
|
|
|
|
constexpr sf::Vector2<TestType> dimension(3, 4);
|
|
|
|
constexpr sf::Rect<TestType> rectangle(position, dimension);
|
2023-01-18 12:51:08 +08:00
|
|
|
|
2024-06-16 00:42:23 +08:00
|
|
|
STATIC_CHECK(rectangle.position.x == 1);
|
|
|
|
STATIC_CHECK(rectangle.position.y == 2);
|
|
|
|
STATIC_CHECK(rectangle.size.x == 3);
|
|
|
|
STATIC_CHECK(rectangle.size.y == 4);
|
2015-04-28 12:07:19 +08:00
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Conversion constructor")
|
2015-04-28 12:07:19 +08:00
|
|
|
{
|
2023-01-18 12:51:08 +08:00
|
|
|
constexpr sf::FloatRect sourceRectangle({1.0f, 2.0f}, {3.0f, 4.0f});
|
|
|
|
constexpr sf::IntRect rectangle(sourceRectangle);
|
2015-04-28 12:07:19 +08:00
|
|
|
|
2024-06-16 00:42:23 +08:00
|
|
|
STATIC_CHECK(rectangle.position.x == static_cast<int>(sourceRectangle.position.x));
|
|
|
|
STATIC_CHECK(rectangle.position.y == static_cast<int>(sourceRectangle.position.y));
|
|
|
|
STATIC_CHECK(rectangle.size.x == static_cast<int>(sourceRectangle.size.x));
|
|
|
|
STATIC_CHECK(rectangle.size.y == static_cast<int>(sourceRectangle.size.y));
|
2015-04-28 12:07:19 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("contains(Vector2)")
|
2015-04-28 12:07:19 +08:00
|
|
|
{
|
2023-11-13 13:03:45 +08:00
|
|
|
constexpr sf::Rect<TestType> rectangle({0, 0}, {10, 10});
|
|
|
|
|
|
|
|
STATIC_CHECK(rectangle.contains(sf::Vector2<TestType>(0, 0)) == true);
|
|
|
|
STATIC_CHECK(rectangle.contains(sf::Vector2<TestType>(9, 0)) == true);
|
|
|
|
STATIC_CHECK(rectangle.contains(sf::Vector2<TestType>(0, 9)) == true);
|
|
|
|
STATIC_CHECK(rectangle.contains(sf::Vector2<TestType>(9, 9)) == true);
|
|
|
|
STATIC_CHECK(rectangle.contains(sf::Vector2<TestType>(9, 10)) == false);
|
|
|
|
STATIC_CHECK(rectangle.contains(sf::Vector2<TestType>(10, 9)) == false);
|
|
|
|
STATIC_CHECK(rectangle.contains(sf::Vector2<TestType>(10, 10)) == false);
|
|
|
|
STATIC_CHECK(rectangle.contains(sf::Vector2<TestType>(15, 15)) == false);
|
2015-04-28 12:07:19 +08:00
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("findIntersection()")
|
2015-04-28 12:07:19 +08:00
|
|
|
{
|
2023-11-13 13:03:45 +08:00
|
|
|
constexpr sf::Rect<TestType> rectangle({0, 0}, {10, 10});
|
|
|
|
constexpr sf::Rect<TestType> intersectingRectangle({5, 5}, {10, 10});
|
2023-01-18 12:51:08 +08:00
|
|
|
|
|
|
|
constexpr auto intersectionResult = rectangle.findIntersection(intersectingRectangle);
|
|
|
|
STATIC_REQUIRE(intersectionResult.has_value());
|
2024-06-16 00:42:23 +08:00
|
|
|
STATIC_CHECK(intersectionResult->position.x == 5);
|
|
|
|
STATIC_CHECK(intersectionResult->position.y == 5);
|
|
|
|
STATIC_CHECK(intersectionResult->size.x == 5);
|
|
|
|
STATIC_CHECK(intersectionResult->size.y == 5);
|
2023-01-18 12:51:08 +08:00
|
|
|
|
2023-11-13 13:03:45 +08:00
|
|
|
constexpr sf::Rect<TestType> nonIntersectingRectangle({-5, -5}, {5, 5});
|
2023-01-18 12:51:08 +08:00
|
|
|
STATIC_CHECK_FALSE(rectangle.findIntersection(nonIntersectingRectangle).has_value());
|
2015-04-28 12:07:19 +08:00
|
|
|
}
|
|
|
|
|
2023-11-13 12:05:30 +08:00
|
|
|
SECTION("getCenter()")
|
|
|
|
{
|
2023-11-13 13:03:45 +08:00
|
|
|
STATIC_CHECK(sf::Rect<TestType>({}, {}).getCenter() == sf::Vector2<TestType>());
|
|
|
|
STATIC_CHECK(sf::Rect<TestType>({1, 2}, {4, 6}).getCenter() == sf::Vector2<TestType>(3, 5));
|
2023-11-13 12:05:30 +08:00
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("Operators")
|
2022-06-25 07:00:59 +08:00
|
|
|
{
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("operator==")
|
2022-06-25 07:00:59 +08:00
|
|
|
{
|
2023-11-13 13:03:45 +08:00
|
|
|
STATIC_CHECK(sf::Rect<TestType>() == sf::Rect<TestType>());
|
|
|
|
STATIC_CHECK(sf::Rect<TestType>({1, 3}, {2, 5}) == sf::Rect<TestType>({1, 3}, {2, 5}));
|
2022-06-25 07:00:59 +08:00
|
|
|
|
2023-11-13 13:03:45 +08:00
|
|
|
STATIC_CHECK_FALSE(sf::Rect<TestType>({1, 0}, {0, 0}) == sf::Rect<TestType>({0, 0}, {0, 0}));
|
|
|
|
STATIC_CHECK_FALSE(sf::Rect<TestType>({0, 1}, {0, 0}) == sf::Rect<TestType>({0, 0}, {0, 0}));
|
|
|
|
STATIC_CHECK_FALSE(sf::Rect<TestType>({0, 0}, {1, 0}) == sf::Rect<TestType>({0, 0}, {0, 0}));
|
|
|
|
STATIC_CHECK_FALSE(sf::Rect<TestType>({0, 0}, {0, 1}) == sf::Rect<TestType>({0, 0}, {0, 0}));
|
2022-06-25 07:00:59 +08:00
|
|
|
}
|
|
|
|
|
2023-01-18 12:51:08 +08:00
|
|
|
SECTION("operator!=")
|
2022-06-25 07:00:59 +08:00
|
|
|
{
|
2023-11-13 13:03:45 +08:00
|
|
|
STATIC_CHECK(sf::Rect<TestType>({1, 0}, {0, 0}) != sf::Rect<TestType>({0, 0}, {0, 0}));
|
|
|
|
STATIC_CHECK(sf::Rect<TestType>({0, 1}, {0, 0}) != sf::Rect<TestType>({0, 0}, {0, 0}));
|
|
|
|
STATIC_CHECK(sf::Rect<TestType>({0, 0}, {1, 0}) != sf::Rect<TestType>({0, 0}, {0, 0}));
|
|
|
|
STATIC_CHECK(sf::Rect<TestType>({0, 0}, {0, 1}) != sf::Rect<TestType>({0, 0}, {0, 0}));
|
2022-06-25 07:00:59 +08:00
|
|
|
|
2023-11-13 13:03:45 +08:00
|
|
|
STATIC_CHECK_FALSE(sf::Rect<TestType>() != sf::Rect<TestType>());
|
|
|
|
STATIC_CHECK_FALSE(sf::Rect<TestType>({1, 3}, {2, 5}) != sf::Rect<TestType>({1, 3}, {2, 5}));
|
2022-06-25 07:00:59 +08:00
|
|
|
}
|
2015-04-28 12:07:19 +08:00
|
|
|
}
|
|
|
|
}
|