2 * Copyright (c) 2018 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 UtcDaliMatrix3OperatorAssign01(void)
150 float els0[] = { 0.0f, 1.0f, 2.0f, 3.0f,
151 4.0f, 5.0f, 6.0f, 7.0f,
152 8.0f, 9.0f, 10.0f, 11.0f,
153 12.0f, 13.0f, 14.0f, 15.0f};
156 Matrix3 m1(0.0f, 1.0f, 2.0f,
162 m2 = m2; // Test branch
164 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
169 int UtcDaliMatrix3OperatorAssign02(void)
171 Matrix3 m0(0.0f, 1.0f, 2.0f,
175 Matrix3 m1(0.0f, 1.0f, 2.0f,
182 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
189 int UtcDaliMatrix3AsFloat(void)
191 float values[] = {0.0f, 1.0f, 2.0f,
195 Matrix3 m1(values[0], values[1], values[2], values[3],values[4], values[5], values[6], values[7],values[8]);
197 for (int i=0;i<9;++i)
199 DALI_TEST_EQUALS(m1.AsFloat()[i], values[i], TEST_LOCATION);
206 int UtcDaliMatrix3Invert(void)
208 // We're going to invert a whole load of different matrices to make sure we don't
209 // fail on particular orientations.
210 for (int i=0;i<5;++i)
212 Matrix3 m = *matrices[i];
213 Matrix3 inverseResult1 = *inverseMatrices[i];
215 // Convert to Mat4, perform inverse, and convert back to Mat3
216 float* mf = m.AsFloat();
217 float els[] = { mf[0], mf[1], mf[2], 0.0f,
218 mf[3], mf[4], mf[5], 0.0f,
219 mf[6], mf[7], mf[8], 0.0f,
220 0.0f, 0.0f, 0.0f, 1.0f };
223 Matrix3 inverseResult2 = mat4;
228 DALI_TEST_EQUALS(mInv, inverseResult1, 0.01f, TEST_LOCATION);
229 DALI_TEST_EQUALS(mInv, inverseResult2, 0.01f, TEST_LOCATION);
232 m2.Invert(); // double invert - should be back to m
234 DALI_TEST_EQUALS(m, m2, 0.01f, TEST_LOCATION);
239 int UtcDaliMatrix3Transpose(void)
241 for (int i=0;i<5;++i)
243 Matrix3 m0 = *matrices[i];
244 Matrix3 trans = *transposeMatrices[i];
249 DALI_TEST_EQUALS(m1, trans, 0.001f, TEST_LOCATION);
254 DALI_TEST_EQUALS(m0, m2, 0.001f, TEST_LOCATION);
260 int UtcDaliMatrix3SetIdentity(void)
262 Matrix3 m( 0.0f, 1.0f, 2.0f,
267 DALI_TEST_EQUALS(m, Matrix3::IDENTITY, 0.001f, TEST_LOCATION);
272 int UtcDaliMatrix3Scale(void)
274 Matrix3 m1( 0.0f, 1.0f, 2.0f,
278 Matrix3 m2( 0.0f, 3.0f, 6.0f,
280 24.0f, 27.0f, 30.0f);
284 DALI_TEST_EQUALS(m1, m2, 0.001, TEST_LOCATION);
288 int UtcDaliMatrix3Magnitude(void)
290 Matrix3 m1( 0.0f, 1.0f, -2.0f,
294 DALI_TEST_EQUALS(Matrix3::IDENTITY.Magnitude(), 1.0f, 0.001f, TEST_LOCATION);
295 DALI_TEST_EQUALS(m1.Magnitude(), 12.0f, 0.001f, TEST_LOCATION);
301 int UtcDaliMatrix3ScaleInverseTranspose(void)
303 Matrix3* matrices[6] = { &m1, &m2, &m3, &m4, &m5, &m6 };
306 for (int i=0;i<6;++i)
308 Matrix3 m0 = *matrices[i];
313 m1.Scale(3.0f/(m1.Magnitude()));
316 m2.ScaledInverseTranspose();
318 DALI_TEST_EQUALS(m1, m2, 0.001f, TEST_LOCATION);
323 int UtcDaliMatrix3OStreamOperator(void)
325 std::ostringstream oss;
327 Matrix3 matrix( 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f );
331 std::string expectedOutput = "[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]";
333 DALI_TEST_EQUALS( oss.str(), expectedOutput, TEST_LOCATION);
337 int UtcDaliMatrix3Multiply(void)
339 Matrix3 m1( 0.0f, 3.0f, 6.0f,
341 24.0f, 27.0f, 30.0f);
343 Matrix3 m2( 0.0f, 1.0f, 0.0f,
347 Matrix3 m3( -3.0f, 0.0f, 6.0f,
348 -15.0f, 12.0f, 18.0f,
349 -27.0f, 24.0f, 30.0f);
352 Matrix3::Multiply(result, m1, m2);
354 DALI_TEST_EQUALS(m3, result, 0.01f, TEST_LOCATION);
358 int UtcDaliMatrix3EqualityOperator(void)
360 Matrix3 m1( 0.0f, 3.0f, 6.0f,
362 24.0f, 27.0f, 30.0f);
364 Matrix3 m2( 0.0f, 3.0f, 6.0f,
366 24.0f, 27.0f, 30.0f);
368 DALI_TEST_CHECK(m1 == m2);
372 int UtcDaliMatrix3InequalityOperator(void)
374 Matrix3 m1( 1.0f, 0.0f, 0.0f,
378 Matrix3 m2( 0.0f, 3.0f, 6.0f,
380 24.0f, 27.0f, 30.0f);
382 DALI_TEST_CHECK(m1 != m2);