blob: 782ca3b9f6bcad8fcb59023855c32c11ef2dc474 [file] [log] [blame]
#include <catch.hpp>
#include "rive/math/mat4.hpp"
#include "rive/math/mat2d.hpp"
TEST_CASE("Mat2D to Mat4 works", "[mat4]")
{
rive::Mat2D matrix2D(0.1f, 0.2f, 0.0f, 2.0f, 22.0f, 33.0f);
rive::Mat4 matrix4x4 = matrix2D;
REQUIRE(matrix4x4[0] == 0.1f);
REQUIRE(matrix4x4[1] == 0.2f);
REQUIRE(matrix4x4[4] == 0.0f);
REQUIRE(matrix4x4[5] == 2.0f);
REQUIRE(matrix4x4[12] == 22.0f);
REQUIRE(matrix4x4[13] == 33.0f);
}
TEST_CASE("Mat4 times Mat2 works", "[mat4]")
{
rive::Mat2D matrix2D(0.1f, 0.2f, 0.0f, 2.0f, 22.0f, 33.0f);
rive::Mat4 identity4x4;
rive::Mat4 matrix4x4 = identity4x4 * matrix2D;
REQUIRE(matrix4x4[0] == 0.1f);
REQUIRE(matrix4x4[1] == 0.2f);
REQUIRE(matrix4x4[4] == 0.0f);
REQUIRE(matrix4x4[5] == 2.0f);
REQUIRE(matrix4x4[12] == 22.0f);
REQUIRE(matrix4x4[13] == 33.0f);
}
TEST_CASE("Mat4 times Mat4 works", "[mat4]")
{
rive::Mat4 a(
// clang-format off
5.0f, 7.0f, 9.0f, 10.0f,
2.0f, 3.0f, 3.0f, 8.0f,
8.0f, 10.0f, 2.0f, 3.0f,
3.0f, 3.0f, 4.0f, 8.0f
// clang-format on
);
rive::Mat4 b(
// clang-format off
3.0f, 10.0f, 12.0f, 18.0f,
12.0f, 1.0f, 4.0f, 9.0f,
9.0f, 10.0f, 12.0f, 2.0f,
3.0f, 12.0f, 4.0f, 10.0f
// clang-format on
);
auto result = b * a;
REQUIRE(result[0] == 210.0f);
REQUIRE(result[1] == 267.0f);
REQUIRE(result[2] == 236.0f);
REQUIRE(result[3] == 271.0f);
REQUIRE(result[4] == 93.0f);
REQUIRE(result[5] == 149.0f);
REQUIRE(result[6] == 104.0f);
REQUIRE(result[7] == 149.0f);
REQUIRE(result[8] == 171.0f);
REQUIRE(result[9] == 146.0f);
REQUIRE(result[10] == 172.0f);
REQUIRE(result[11] == 268.0f);
REQUIRE(result[12] == 105.0f);
REQUIRE(result[13] == 169.0f);
REQUIRE(result[14] == 128.0f);
REQUIRE(result[15] == 169.0f);
}