2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <dali-test-suite-utils.h>
19 #include <dali/public-api/dali-core.h>
26 void utc_dali_matrix3_startup(void)
28 test_return_value = TET_UNDEF;
31 void utc_dali_matrix3_cleanup(void)
33 test_return_value = TET_PASS;
39 -18.6f, 1.88e-09f, -6.85e-09f, 0.0f, 13.2f, 13.2f, -1.36e-08f, 13.2f, -13.2f);
42 -18.6f, 6.91e-06f, 6.76e-06f, 8.04e-09f, 13.2f, 13.2f, 3.01e-06f, 13.2f, -13.2f);
45 6.24f, -12.4f, -12.4f, -17.6f, -4.46f, -4.37f, -0.0641f, 13.2f, -13.2f);
48 -16.3f, 6.42f, 6.38f, 9.05f, 11.6f, 11.4f, -0.0371f, 13.1f, -13.3f);
51 -2.43f, 13.2f, 12.9f, 18.5f, 1.92f, 1.51f, -0.257f, 13.0f, -13.4f);
54 -2.43f, -13.2f, -200.9f, 18.5f, 1.92f, 1.51f, 0.257f, 13.0f, 13.4f);
57 -0.05, -0.00, 0.00, -0.00, 0.04, 0.04, 0.00, 0.04, -0.04);
60 -0.05, 0.00, -0.00, 0.00, 0.04, 0.04, 0.00, 0.04, -0.04);
63 0.02, -0.05, -0.00, -0.04, -0.01, 0.04, -0.04, -0.01, -0.04);
66 -0.05, 0.03, -0.00, 0.02, 0.03, 0.04, 0.02, 0.03, -0.04);
69 -0.01, 0.05, -0.00, 0.04, 0.01, 0.04, 0.04, 0.00, -0.04);
72 -18.6f, 0.0f, -1.36e-08f, 1.88e-09f, 13.2f, 13.2f, -6.85e-09f, 13.2f, -13.2f);
75 -18.6f, 8.04e-09f, 3.01e-06f, 6.91e-06f, 13.2f, 13.2f, 6.76e-06f, 13.2f, -13.2f);
78 6.24f, -17.6f, -0.0641f, -12.4f, -4.46f, 13.2f, -12.4f, -4.37f, -13.2f);
81 -16.3f, 9.05f, -0.0371f, 6.42f, 11.6f, 13.1f, 6.38f, 11.4f, -13.3f);
84 -2.43f, 18.5f, -0.257f, 13.2f, 1.92f, 13.0f, 12.9f, 1.51f, -13.4f);
86 Matrix3* matrices[5] = {&m1, &m2, &m3, &m4, &m5};
87 Matrix3* inverseMatrices[5] = {&i1, &i2, &i3, &i4, &i5};
88 Matrix3* transposeMatrices[5] = {&t1, &t2, &t3, &t4, &t5};
90 } // anonymous namespace
92 int UtcDaliMatrix3FromMatrix(void)
94 float els0[] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f};
96 Matrix3 m1(0.0f, 1.0f, 2.0f, 4.0f, 5.0f, 6.0f, 8.0f, 9.0f, 10.0f);
100 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
104 int UtcDaliMatrix3CopyConstructor(void)
106 Matrix3 m0(Matrix3::IDENTITY);
108 DALI_TEST_EQUALS(m1, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
113 int UtcDaliMatrix3MoveConstructor(void)
115 Matrix3 m0(Matrix3::IDENTITY);
116 Matrix3 m1 = std::move(m0);
117 DALI_TEST_EQUALS(m1, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
122 int UtcDaliMatrix3CopyAssignment(void)
124 Matrix3 m0(Matrix3::IDENTITY);
127 DALI_TEST_EQUALS(m1, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
132 int UtcDaliMatrix3MoveAssignment(void)
134 Matrix3 m0(Matrix3::IDENTITY);
137 DALI_TEST_EQUALS(m1, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
142 int UtcDaliMatrix3OperatorAssign01(void)
144 float els0[] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f};
147 Matrix3 m1(0.0f, 1.0f, 2.0f, 4.0f, 5.0f, 6.0f, 8.0f, 9.0f, 10.0f);
151 m2 = m2; // Test branch
153 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
157 int UtcDaliMatrix3OperatorAssign02(void)
159 Matrix3 m0(0.0f, 1.0f, 2.0f, 4.0f, 5.0f, 6.0f, 8.0f, 9.0f, 10.0f);
161 Matrix3 m1(0.0f, 1.0f, 2.0f, 4.0f, 5.0f, 6.0f, 8.0f, 9.0f, 10.0f);
166 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
171 int UtcDaliMatrix3AsFloat(void)
173 float values[] = {0.0f, 1.0f, 2.0f, 4.0f, 5.0f, 6.0f, 8.0f, 9.0f, 10.0f};
175 Matrix3 m1(values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7], values[8]);
177 for(int i = 0; i < 9; ++i)
179 DALI_TEST_EQUALS(m1.AsFloat()[i], values[i], TEST_LOCATION);
185 int UtcDaliMatrix3Invert(void)
187 // We're going to invert a whole load of different matrices to make sure we don't
188 // fail on particular orientations.
189 for(int i = 0; i < 5; ++i)
191 Matrix3 m = *matrices[i];
192 Matrix3 inverseResult1 = *inverseMatrices[i];
194 // Convert to Mat4, perform inverse, and convert back to Mat3
195 float* mf = m.AsFloat();
196 float els[] = {mf[0], mf[1], mf[2], 0.0f, mf[3], mf[4], mf[5], 0.0f, mf[6], mf[7], mf[8], 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
199 Matrix3 inverseResult2 = mat4;
204 DALI_TEST_EQUALS(mInv, inverseResult1, 0.01f, TEST_LOCATION);
205 DALI_TEST_EQUALS(mInv, inverseResult2, 0.01f, TEST_LOCATION);
208 m2.Invert(); // double invert - should be back to m
210 DALI_TEST_EQUALS(m, m2, 0.01f, TEST_LOCATION);
215 int UtcDaliMatrix3Transpose(void)
217 for(int i = 0; i < 5; ++i)
219 Matrix3 m0 = *matrices[i];
220 Matrix3 trans = *transposeMatrices[i];
225 DALI_TEST_EQUALS(m1, trans, 0.001f, TEST_LOCATION);
230 DALI_TEST_EQUALS(m0, m2, 0.001f, TEST_LOCATION);
236 int UtcDaliMatrix3SetIdentity(void)
238 Matrix3 m(0.0f, 1.0f, 2.0f, 4.0f, 5.0f, 6.0f, 8.0f, 9.0f, 10.0f);
241 DALI_TEST_EQUALS(m, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
245 int UtcDaliMatrix3Scale(void)
247 Matrix3 m1(0.0f, 1.0f, 2.0f, 4.0f, 5.0f, 6.0f, 8.0f, 9.0f, 10.0f);
249 Matrix3 m2(0.0f, 3.0f, 6.0f, 12.0f, 15.0f, 18.0f, 24.0f, 27.0f, 30.0f);
253 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
257 int UtcDaliMatrix3Magnitude(void)
259 Matrix3 m1(0.0f, 1.0f, -2.0f, 3.0f, -4.0f, 5.0f, -6.0f, 7.0f, 8.0f);
261 DALI_TEST_EQUALS(Matrix3::IDENTITY.Magnitude(), 1.0f, 0.001f, TEST_LOCATION);
262 DALI_TEST_EQUALS(m1.Magnitude(), 12.0f, 0.001f, TEST_LOCATION);
266 int UtcDaliMatrix3ScaleInverseTranspose(void)
268 Matrix3* matrices[6] = {&m1, &m2, &m3, &m4, &m5, &m6};
270 for(int i = 0; i < 6; ++i)
272 Matrix3 m0 = *matrices[i];
277 m1.Scale(3.0f / (m1.Magnitude()));
280 m2.ScaledInverseTranspose();
282 DALI_TEST_EQUALS(m1, m2, 0.001f, TEST_LOCATION);
287 int UtcDaliMatrix3OStreamOperator(void)
289 std::ostringstream oss;
291 Matrix3 matrix(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f);
295 std::string expectedOutput = "[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]";
297 DALI_TEST_EQUALS(oss.str(), expectedOutput, TEST_LOCATION);
301 int UtcDaliMatrix3Multiply(void)
303 Matrix3 m1(0.0f, 3.0f, 6.0f, 12.0f, 15.0f, 18.0f, 24.0f, 27.0f, 30.0f);
305 Matrix3 m2(0.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);
307 Matrix3 m3(-3.0f, 0.0f, 6.0f, -15.0f, 12.0f, 18.0f, -27.0f, 24.0f, 30.0f);
310 Matrix3::Multiply(result, m1, m2);
312 DALI_TEST_EQUALS(m3, result, 0.01f, TEST_LOCATION);
316 int UtcDaliMatrix3EqualityOperator(void)
318 Matrix3 m1(0.0f, 3.0f, 6.0f, 12.0f, 15.0f, 18.0f, 24.0f, 27.0f, 30.0f);
320 Matrix3 m2(0.0f, 3.0f, 6.0f, 12.0f, 15.0f, 18.0f, 24.0f, 27.0f, 30.0f);
322 DALI_TEST_CHECK(m1 == m2);
326 int UtcDaliMatrix3InequalityOperator(void)
328 Matrix3 m1(1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f);
330 Matrix3 m2(0.0f, 3.0f, 6.0f, 12.0f, 15.0f, 18.0f, 24.0f, 27.0f, 30.0f);
332 DALI_TEST_CHECK(m1 != m2);