19 TEST_CASE(
"ConstructorTest_ShouldCreateIdentityMatrix")
22 const RotationMatrix3x3 rot_mat;
25 CHECK(rot_mat.element[0][0] == doctest::Approx(1.0f));
26 CHECK(rot_mat.element[0][1] == doctest::Approx(0.0f));
27 CHECK(rot_mat.element[0][2] == doctest::Approx(0.0f));
29 CHECK(rot_mat.element[1][0] == doctest::Approx(0.0f));
30 CHECK(rot_mat.element[1][1] == doctest::Approx(1.0f));
31 CHECK(rot_mat.element[1][2] == doctest::Approx(0.0f));
33 CHECK(rot_mat.element[2][0] == doctest::Approx(0.0f));
34 CHECK(rot_mat.element[2][1] == doctest::Approx(0.0f));
35 CHECK(rot_mat.element[2][2] == doctest::Approx(1.0f));
38 TEST_CASE(
"ConstructorTest_ShouldCreateArbitraryMatrix")
41 const RotationMatrix3x3 rot_mat(1.0f, 2.0f, 3.0f,
46 CHECK(rot_mat.element[0][0] == doctest::Approx(1.0f));
47 CHECK(rot_mat.element[0][1] == doctest::Approx(2.0f));
48 CHECK(rot_mat.element[0][2] == doctest::Approx(3.0f));
50 CHECK(rot_mat.element[1][0] == doctest::Approx(4.0f));
51 CHECK(rot_mat.element[1][1] == doctest::Approx(5.0f));
52 CHECK(rot_mat.element[1][2] == doctest::Approx(6.0f));
54 CHECK(rot_mat.element[2][0] == doctest::Approx(7.0f));
55 CHECK(rot_mat.element[2][1] == doctest::Approx(8.0f));
56 CHECK(rot_mat.element[2][2] == doctest::Approx(9.0f));
59 TEST_CASE(
"ArithmeticOperatorTest")
61 SUBCASE(
"Multiplication")
64 const RotationMatrix3x3 rot_mat1(1.0f, 2.0f, 3.0f,
69 const RotationMatrix3x3 rot_mat2(9.0f, 8.0f, 7.0f,
73 const RotationMatrix3x3 actual = rot_mat1 * rot_mat2;
76 const RotationMatrix3x3 expect(30.0f, 24.0f, 18.0f,
78 138.0f, 114.0f, 90.0f);
81 CHECK(actual.element[0][0] == doctest::Approx(expect.element[0][0]));
82 CHECK(actual.element[0][1] == doctest::Approx(expect.element[0][1]));
83 CHECK(actual.element[0][2] == doctest::Approx(expect.element[0][2]));
85 CHECK(actual.element[1][0] == doctest::Approx(expect.element[1][0]));
86 CHECK(actual.element[1][1] == doctest::Approx(expect.element[1][1]));
87 CHECK(actual.element[1][2] == doctest::Approx(expect.element[1][2]));
89 CHECK(actual.element[2][0] == doctest::Approx(expect.element[2][0]));
90 CHECK(actual.element[2][1] == doctest::Approx(expect.element[2][1]));
91 CHECK(actual.element[2][2] == doctest::Approx(expect.element[2][2]));
95 TEST_CASE(
"CreateRotationMatrixXTest")
99 constexpr float angle = ConvertDegToRad(30.0f);
101 const RotationMatrix3x3 rot_mat = RotationMatrix3x3::CreateRotationMatrixX(angle);
103 const float cos_angle = std::cos(angle);
104 const float sin_angle = std::sin(angle);
106 CHECK(rot_mat.element[0][0] == doctest::Approx(1.0f));
107 CHECK(rot_mat.element[0][1] == doctest::Approx(0.0f));
108 CHECK(rot_mat.element[0][2] == doctest::Approx(0.0f));
110 CHECK(rot_mat.element[1][0] == doctest::Approx(0.0f));
111 CHECK(rot_mat.element[1][1] == doctest::Approx(cos_angle));
112 CHECK(rot_mat.element[1][2] == doctest::Approx(-sin_angle));
114 CHECK(rot_mat.element[2][0] == doctest::Approx(0.0f));
115 CHECK(rot_mat.element[2][1] == doctest::Approx(sin_angle));
116 CHECK(rot_mat.element[2][2] == doctest::Approx(cos_angle));
119 TEST_CASE(
"CreateRotationMatrixYTest")
123 constexpr float angle = ConvertDegToRad(30.0f);
125 const RotationMatrix3x3 rot_mat = RotationMatrix3x3::CreateRotationMatrixY(angle);
127 const float cos_angle = std::cos(angle);
128 const float sin_angle = std::sin(angle);
130 CHECK(rot_mat.element[0][0] == doctest::Approx(cos_angle));
131 CHECK(rot_mat.element[0][1] == doctest::Approx(0.0f));
132 CHECK(rot_mat.element[0][2] == doctest::Approx(sin_angle));
134 CHECK(rot_mat.element[1][0] == doctest::Approx(0.0f));
135 CHECK(rot_mat.element[1][1] == doctest::Approx(1.0f));
136 CHECK(rot_mat.element[1][2] == doctest::Approx(0.0f));
138 CHECK(rot_mat.element[2][0] == doctest::Approx(-sin_angle));
139 CHECK(rot_mat.element[2][1] == doctest::Approx(0.0f));
140 CHECK(rot_mat.element[2][2] == doctest::Approx(cos_angle));
143 TEST_CASE(
"CreateRotationMatrixZTest")
147 constexpr float angle = ConvertDegToRad(30.0f);
149 const RotationMatrix3x3 rot_mat = RotationMatrix3x3::CreateRotationMatrixZ(angle);
151 const float cos_angle = std::cos(angle);
152 const float sin_angle = std::sin(angle);
154 CHECK(rot_mat.element[0][0] == doctest::Approx(cos_angle));
155 CHECK(rot_mat.element[0][1] == doctest::Approx(-sin_angle));
156 CHECK(rot_mat.element[0][2] == doctest::Approx(0.0f));
158 CHECK(rot_mat.element[1][0] == doctest::Approx(sin_angle));
159 CHECK(rot_mat.element[1][1] == doctest::Approx(cos_angle));
160 CHECK(rot_mat.element[1][2] == doctest::Approx(0.0f));
162 CHECK(rot_mat.element[2][0] == doctest::Approx(0.0f));
163 CHECK(rot_mat.element[2][1] == doctest::Approx(0.0f));
164 CHECK(rot_mat.element[2][2] == doctest::Approx(1.0f));