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.
21 #include <dali/public-api/dali-core.h>
22 #include <dali-test-suite-utils.h>
27 void utc_dali_matrix3_startup(void)
29 test_return_value = TET_UNDEF;
32 void utc_dali_matrix3_cleanup(void)
34 test_return_value = TET_PASS;
41 -18.6f, 1.88e-09f, -6.85e-09f,
43 -1.36e-08f,13.2f, -13.2f);
46 -18.6f,6.91e-06f, 6.76e-06f,
47 8.04e-09f,13.2f, 13.2f,
48 3.01e-06f,13.2f, -13.2f);
52 -17.6f,-4.46f, -4.37f,
53 -0.0641f,13.2f, -13.2f);
58 -0.0371f,13.1f, -13.3f);
63 -0.257f,13.0f, -13.4f);
66 -2.43f, -13.2f, -200.9f,
68 0.257f, 13.0f, 13.4f);
99 -18.6f, 0.0f, -1.36e-08f,
100 1.88e-09f,13.2f, 13.2f,
101 -6.85e-09f,13.2f, -13.2f);
104 -18.6f,8.04e-09f, 3.01e-06f,
105 6.91e-06f,13.2f, 13.2f,
106 6.76e-06f,13.2f, -13.2f);
109 6.24f,-17.6f, -0.0641f,
110 -12.4f,-4.46f, 13.2f,
111 -12.4f, -4.37f, -13.2f);
114 -16.3f,9.05f, -0.0371f,
116 6.38f,11.4f, -13.3f);
119 -2.43f,18.5f, -0.257f,
121 12.9f, 1.51f, -13.4f);
125 Matrix3* matrices[5] = { &m1, &m2, &m3, &m4, &m5 };
126 Matrix3* inverseMatrices[5] = { &i1, &i2, &i3, &i4, &i5 };
127 Matrix3* transposeMatrices[5] = { &t1, &t2, &t3, &t4, &t5 };
129 } // anonymous namespace
131 int UtcDaliMatrix3FromMatrix(void)
133 float els0[] = { 0.0f, 1.0f, 2.0f, 3.0f,
134 4.0f, 5.0f, 6.0f, 7.0f,
135 8.0f, 9.0f, 10.0f, 11.0f,
136 12.0f, 13.0f, 14.0f, 15.0f};
138 Matrix3 m1(0.0f, 1.0f, 2.0f,
144 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
148 int UtcDaliMatrix3CopyConstructor(void)
150 Matrix3 m0( Matrix3::IDENTITY );
152 DALI_TEST_EQUALS(m1, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
157 int UtcDaliMatrix3MoveConstructor(void)
159 Matrix3 m0( Matrix3::IDENTITY );
160 Matrix3 m1 = std::move( m0 );
161 DALI_TEST_EQUALS(m1, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
166 int UtcDaliMatrix3CopyAssignment(void)
168 Matrix3 m0( Matrix3::IDENTITY );
171 DALI_TEST_EQUALS(m1, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
176 int UtcDaliMatrix3MoveAssignment(void)
178 Matrix3 m0( Matrix3::IDENTITY );
180 m1 = std::move( m0 );
181 DALI_TEST_EQUALS(m1, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
186 int UtcDaliMatrix3OperatorAssign01(void)
188 float els0[] = { 0.0f, 1.0f, 2.0f, 3.0f,
189 4.0f, 5.0f, 6.0f, 7.0f,
190 8.0f, 9.0f, 10.0f, 11.0f,
191 12.0f, 13.0f, 14.0f, 15.0f};
194 Matrix3 m1(0.0f, 1.0f, 2.0f,
200 m2 = m2; // Test branch
202 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
207 int UtcDaliMatrix3OperatorAssign02(void)
209 Matrix3 m0(0.0f, 1.0f, 2.0f,
213 Matrix3 m1(0.0f, 1.0f, 2.0f,
220 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
227 int UtcDaliMatrix3AsFloat(void)
229 float values[] = {0.0f, 1.0f, 2.0f,
233 Matrix3 m1(values[0], values[1], values[2], values[3],values[4], values[5], values[6], values[7],values[8]);
235 for (int i=0;i<9;++i)
237 DALI_TEST_EQUALS(m1.AsFloat()[i], values[i], TEST_LOCATION);
244 int UtcDaliMatrix3Invert(void)
246 // We're going to invert a whole load of different matrices to make sure we don't
247 // fail on particular orientations.
248 for (int i=0;i<5;++i)
250 Matrix3 m = *matrices[i];
251 Matrix3 inverseResult1 = *inverseMatrices[i];
253 // Convert to Mat4, perform inverse, and convert back to Mat3
254 float* mf = m.AsFloat();
255 float els[] = { mf[0], mf[1], mf[2], 0.0f,
256 mf[3], mf[4], mf[5], 0.0f,
257 mf[6], mf[7], mf[8], 0.0f,
258 0.0f, 0.0f, 0.0f, 1.0f };
261 Matrix3 inverseResult2 = mat4;
266 DALI_TEST_EQUALS(mInv, inverseResult1, 0.01f, TEST_LOCATION);
267 DALI_TEST_EQUALS(mInv, inverseResult2, 0.01f, TEST_LOCATION);
270 m2.Invert(); // double invert - should be back to m
272 DALI_TEST_EQUALS(m, m2, 0.01f, TEST_LOCATION);
277 int UtcDaliMatrix3Transpose(void)
279 for (int i=0;i<5;++i)
281 Matrix3 m0 = *matrices[i];
282 Matrix3 trans = *transposeMatrices[i];
287 DALI_TEST_EQUALS(m1, trans, 0.001f, TEST_LOCATION);
292 DALI_TEST_EQUALS(m0, m2, 0.001f, TEST_LOCATION);
298 int UtcDaliMatrix3SetIdentity(void)
300 Matrix3 m( 0.0f, 1.0f, 2.0f,
305 DALI_TEST_EQUALS(m, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
310 int UtcDaliMatrix3Scale(void)
312 Matrix3 m1( 0.0f, 1.0f, 2.0f,
316 Matrix3 m2( 0.0f, 3.0f, 6.0f,
318 24.0f, 27.0f, 30.0f);
322 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
326 int UtcDaliMatrix3Magnitude(void)
328 Matrix3 m1( 0.0f, 1.0f, -2.0f,
332 DALI_TEST_EQUALS(Matrix3::IDENTITY.Magnitude(), 1.0f, 0.001f, TEST_LOCATION);
333 DALI_TEST_EQUALS(m1.Magnitude(), 12.0f, 0.001f, TEST_LOCATION);
339 int UtcDaliMatrix3ScaleInverseTranspose(void)
341 Matrix3* matrices[6] = { &m1, &m2, &m3, &m4, &m5, &m6 };
344 for (int i=0;i<6;++i)
346 Matrix3 m0 = *matrices[i];
351 m1.Scale(3.0f/(m1.Magnitude()));
354 m2.ScaledInverseTranspose();
356 DALI_TEST_EQUALS(m1, m2, 0.001f, TEST_LOCATION);
361 int UtcDaliMatrix3OStreamOperator(void)
363 std::ostringstream oss;
365 Matrix3 matrix( 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f );
369 std::string expectedOutput = "[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]";
371 DALI_TEST_EQUALS( oss.str(), expectedOutput, TEST_LOCATION);
375 int UtcDaliMatrix3Multiply(void)
377 Matrix3 m1( 0.0f, 3.0f, 6.0f,
379 24.0f, 27.0f, 30.0f);
381 Matrix3 m2( 0.0f, 1.0f, 0.0f,
385 Matrix3 m3( -3.0f, 0.0f, 6.0f,
386 -15.0f, 12.0f, 18.0f,
387 -27.0f, 24.0f, 30.0f);
390 Matrix3::Multiply(result, m1, m2);
392 DALI_TEST_EQUALS(m3, result, 0.01f, TEST_LOCATION);
396 int UtcDaliMatrix3EqualityOperator(void)
398 Matrix3 m1( 0.0f, 3.0f, 6.0f,
400 24.0f, 27.0f, 30.0f);
402 Matrix3 m2( 0.0f, 3.0f, 6.0f,
404 24.0f, 27.0f, 30.0f);
406 DALI_TEST_CHECK(m1 == m2);
410 int UtcDaliMatrix3InequalityOperator(void)
412 Matrix3 m1( 1.0f, 0.0f, 0.0f,
416 Matrix3 m2( 0.0f, 3.0f, 6.0f,
418 24.0f, 27.0f, 30.0f);
420 DALI_TEST_CHECK(m1 != m2);