#include <catch.hpp>
#include "rive/math/mat2d.hpp"
#include "rive/math/math_types.hpp"

namespace rive
{
TEST_CASE("IAABB_join", "[IAABB]")
{
    CHECK(IAABB{1, -2, 99, 101}.join({0, 0, 100, 100}) == IAABB{0, -2, 100, 101});
    CHECK(IAABB{1, -2, 99, 101}.join({2, -3, 98, 103}) == IAABB{1, -3, 99, 103});
}

TEST_CASE("IAABB_intersect", "[IAABB]")
{
    CHECK(IAABB{1, -2, 99, 101}.intersect({0, 0, 100, 100}) == IAABB{1, 0, 99, 100});
    CHECK(IAABB{1, -2, 99, 101}.intersect({2, -3, 98, 103}) == IAABB{2, -2, 98, 101});
}

TEST_CASE("IAABB_empty", "[IAABB]")
{
    CHECK(IAABB{0, 0, 0, 0}.empty());
    CHECK(IAABB{0, 0, 0, 1}.empty());
    CHECK(IAABB{0, 0, 1, 0}.empty());
    CHECK(!IAABB{0, 0, 1, 1}.empty());
    CHECK(IAABB{0, 0, -1, -1}.empty());
    CHECK(IAABB{std::numeric_limits<int32_t>::max(),
                std::numeric_limits<int32_t>::max(),
                std::numeric_limits<int32_t>::min(),
                std::numeric_limits<int32_t>::min()}
              .empty());
}

TEST_CASE("isEmptyOrNaN", "[AABB]")
{
    auto inf = std::numeric_limits<float>::infinity();
    auto nan = std::numeric_limits<float>::quiet_NaN();
    CHECK(!AABB{0, 0, 1, 1}.isEmptyOrNaN());
    CHECK(!AABB{-inf, -inf, inf, inf}.isEmptyOrNaN());
    CHECK(AABB{0, 0, 0, 0}.isEmptyOrNaN());
    CHECK(AABB{0, 0, -1, -2}.isEmptyOrNaN());
    CHECK(AABB{inf, inf, -inf, -inf}.isEmptyOrNaN());
    CHECK(AABB{inf, -inf, -inf, inf}.isEmptyOrNaN());
    CHECK(AABB{-inf, inf, inf, -inf}.isEmptyOrNaN());
    CHECK(AABB{nan, 0, 10, 10}.isEmptyOrNaN());
    CHECK(AABB{0, nan, 10, 10}.isEmptyOrNaN());
    CHECK(AABB{0, 0, nan, 10}.isEmptyOrNaN());
    CHECK(AABB{0, 0, 10, nan}.isEmptyOrNaN());
    CHECK(AABB{nan, nan, 10, 10}.isEmptyOrNaN());
    CHECK(AABB{nan, nan, nan, 10}.isEmptyOrNaN());
    CHECK(AABB{nan, nan, nan, nan}.isEmptyOrNaN());
}
} // namespace rive
