Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(690)

Side by Side Diff: tests/Matrix44Test.cpp

Issue 51033004: add SK_ATTR_DEPRECATED -- will need to disable for chrome, since it triggers a warning (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/GpuBitmapCopyTest.cpp ('k') | tests/PathTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "Test.h" 8 #include "Test.h"
9 #include "SkMatrix44.h" 9 #include "SkMatrix44.h"
10 10
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 if (!nearly_equal_mscalar(a.get(i, j), b.get(i, j))) { 66 if (!nearly_equal_mscalar(a.get(i, j), b.get(i, j))) {
67 SkDebugf("not equal %g %g\n", a.get(i, j), b.get(i, j)); 67 SkDebugf("not equal %g %g\n", a.get(i, j), b.get(i, j));
68 return false; 68 return false;
69 } 69 }
70 } 70 }
71 } 71 }
72 return true; 72 return true;
73 } 73 }
74 74
75 static bool is_identity(const SkMatrix44& m) { 75 static bool is_identity(const SkMatrix44& m) {
76 SkMatrix44 identity; 76 SkMatrix44 identity(SkMatrix44::kIdentity_Constructor);
77 identity.reset();
78 return nearly_equal(m, identity); 77 return nearly_equal(m, identity);
79 } 78 }
80 79
81 /////////////////////////////////////////////////////////////////////////////// 80 ///////////////////////////////////////////////////////////////////////////////
82 static bool bits_isonly(int value, int mask) { 81 static bool bits_isonly(int value, int mask) {
83 return 0 == (value & ~mask); 82 return 0 == (value & ~mask);
84 } 83 }
85 84
86 static void test_constructor(skiatest::Reporter* reporter) { 85 static void test_constructor(skiatest::Reporter* reporter) {
87 // Allocate a matrix on the heap 86 // Allocate a matrix on the heap
88 SkMatrix44* placeholderMatrix = new SkMatrix44(); 87 SkMatrix44* placeholderMatrix = new SkMatrix44(SkMatrix44::kUninitialized_Co nstructor);
89 SkAutoTDelete<SkMatrix44> deleteMe(placeholderMatrix); 88 SkAutoTDelete<SkMatrix44> deleteMe(placeholderMatrix);
90 89
91 for (int row = 0; row < 4; ++row) { 90 for (int row = 0; row < 4; ++row) {
92 for (int col = 0; col < 4; ++col) { 91 for (int col = 0; col < 4; ++col) {
93 placeholderMatrix->setDouble(row, col, row * col); 92 placeholderMatrix->setDouble(row, col, row * col);
94 } 93 }
95 } 94 }
96 95
97 // Use placement-new syntax to trigger the constructor on top of the heap 96 // Use placement-new syntax to trigger the constructor on top of the heap
98 // address we already initialized. This allows us to check that the 97 // address we already initialized. This allows us to check that the
99 // constructor did avoid initializing the matrix contents. 98 // constructor did avoid initializing the matrix contents.
100 SkMatrix44* testMatrix = new(placeholderMatrix) SkMatrix44(SkMatrix44::kUnin itialized_Constructor); 99 SkMatrix44* testMatrix = new(placeholderMatrix) SkMatrix44(SkMatrix44::kUnin itialized_Constructor);
101 REPORTER_ASSERT(reporter, testMatrix == placeholderMatrix); 100 REPORTER_ASSERT(reporter, testMatrix == placeholderMatrix);
102 REPORTER_ASSERT(reporter, !testMatrix->isIdentity()); 101 REPORTER_ASSERT(reporter, !testMatrix->isIdentity());
103 for (int row = 0; row < 4; ++row) { 102 for (int row = 0; row < 4; ++row) {
104 for (int col = 0; col < 4; ++col) { 103 for (int col = 0; col < 4; ++col) {
105 REPORTER_ASSERT(reporter, nearly_equal_double(row * col, testMatrix- >getDouble(row, col))); 104 REPORTER_ASSERT(reporter, nearly_equal_double(row * col, testMatrix- >getDouble(row, col)));
106 } 105 }
107 } 106 }
108 107
109 // Verify that kIdentity_Constructor really does initialize to an identity m atrix. 108 // Verify that kIdentity_Constructor really does initialize to an identity m atrix.
110 testMatrix = 0; 109 testMatrix = 0;
111 testMatrix = new(placeholderMatrix) SkMatrix44(SkMatrix44::kIdentity_Constru ctor); 110 testMatrix = new(placeholderMatrix) SkMatrix44(SkMatrix44::kIdentity_Constru ctor);
112 REPORTER_ASSERT(reporter, testMatrix == placeholderMatrix); 111 REPORTER_ASSERT(reporter, testMatrix == placeholderMatrix);
113 REPORTER_ASSERT(reporter, testMatrix->isIdentity()); 112 REPORTER_ASSERT(reporter, testMatrix->isIdentity());
114 REPORTER_ASSERT(reporter, *testMatrix == SkMatrix44::I()); 113 REPORTER_ASSERT(reporter, *testMatrix == SkMatrix44::I());
115 } 114 }
116 115
117 static void test_translate(skiatest::Reporter* reporter) { 116 static void test_translate(skiatest::Reporter* reporter) {
118 SkMatrix44 mat, inverse; 117 SkMatrix44 mat(SkMatrix44::kUninitialized_Constructor);
118 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor);
119 119
120 mat.setTranslate(0, 0, 0); 120 mat.setTranslate(0, 0, 0);
121 REPORTER_ASSERT(reporter, bits_isonly(mat.getType(), SkMatrix44::kIdentity_M ask)); 121 REPORTER_ASSERT(reporter, bits_isonly(mat.getType(), SkMatrix44::kIdentity_M ask));
122 mat.setTranslate(1, 2, 3); 122 mat.setTranslate(1, 2, 3);
123 REPORTER_ASSERT(reporter, bits_isonly(mat.getType(), SkMatrix44::kTranslate_ Mask)); 123 REPORTER_ASSERT(reporter, bits_isonly(mat.getType(), SkMatrix44::kTranslate_ Mask));
124 REPORTER_ASSERT(reporter, mat.invert(&inverse)); 124 REPORTER_ASSERT(reporter, mat.invert(&inverse));
125 REPORTER_ASSERT(reporter, bits_isonly(inverse.getType(), SkMatrix44::kTransl ate_Mask)); 125 REPORTER_ASSERT(reporter, bits_isonly(inverse.getType(), SkMatrix44::kTransl ate_Mask));
126 126
127 SkMatrix44 a, b, c; 127 SkMatrix44 a(SkMatrix44::kUninitialized_Constructor);
128 SkMatrix44 b(SkMatrix44::kUninitialized_Constructor);
129 SkMatrix44 c(SkMatrix44::kUninitialized_Constructor);
128 a.set3x3(1, 2, 3, 4, 5, 6, 7, 8, 9); 130 a.set3x3(1, 2, 3, 4, 5, 6, 7, 8, 9);
129 b.setTranslate(10, 11, 12); 131 b.setTranslate(10, 11, 12);
130 132
131 c.setConcat(a, b); 133 c.setConcat(a, b);
132 mat = a; 134 mat = a;
133 mat.preTranslate(10, 11, 12); 135 mat.preTranslate(10, 11, 12);
134 REPORTER_ASSERT(reporter, mat == c); 136 REPORTER_ASSERT(reporter, mat == c);
135 137
136 c.setConcat(b, a); 138 c.setConcat(b, a);
137 mat = a; 139 mat = a;
138 mat.postTranslate(10, 11, 12); 140 mat.postTranslate(10, 11, 12);
139 REPORTER_ASSERT(reporter, mat == c); 141 REPORTER_ASSERT(reporter, mat == c);
140 } 142 }
141 143
142 static void test_scale(skiatest::Reporter* reporter) { 144 static void test_scale(skiatest::Reporter* reporter) {
143 SkMatrix44 mat, inverse; 145 SkMatrix44 mat(SkMatrix44::kUninitialized_Constructor);
146 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor);
144 147
145 mat.setScale(1, 1, 1); 148 mat.setScale(1, 1, 1);
146 REPORTER_ASSERT(reporter, bits_isonly(mat.getType(), SkMatrix44::kIdentity_M ask)); 149 REPORTER_ASSERT(reporter, bits_isonly(mat.getType(), SkMatrix44::kIdentity_M ask));
147 mat.setScale(1, 2, 3); 150 mat.setScale(1, 2, 3);
148 REPORTER_ASSERT(reporter, bits_isonly(mat.getType(), SkMatrix44::kScale_Mask )); 151 REPORTER_ASSERT(reporter, bits_isonly(mat.getType(), SkMatrix44::kScale_Mask ));
149 REPORTER_ASSERT(reporter, mat.invert(&inverse)); 152 REPORTER_ASSERT(reporter, mat.invert(&inverse));
150 REPORTER_ASSERT(reporter, bits_isonly(inverse.getType(), SkMatrix44::kScale_ Mask)); 153 REPORTER_ASSERT(reporter, bits_isonly(inverse.getType(), SkMatrix44::kScale_ Mask));
151 154
152 SkMatrix44 a, b, c; 155 SkMatrix44 a(SkMatrix44::kUninitialized_Constructor);
156 SkMatrix44 b(SkMatrix44::kUninitialized_Constructor);
157 SkMatrix44 c(SkMatrix44::kUninitialized_Constructor);
153 a.set3x3(1, 2, 3, 4, 5, 6, 7, 8, 9); 158 a.set3x3(1, 2, 3, 4, 5, 6, 7, 8, 9);
154 b.setScale(10, 11, 12); 159 b.setScale(10, 11, 12);
155 160
156 c.setConcat(a, b); 161 c.setConcat(a, b);
157 mat = a; 162 mat = a;
158 mat.preScale(10, 11, 12); 163 mat.preScale(10, 11, 12);
159 REPORTER_ASSERT(reporter, mat == c); 164 REPORTER_ASSERT(reporter, mat == c);
160 165
161 c.setConcat(b, a); 166 c.setConcat(b, a);
162 mat = a; 167 mat = a;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 205
201 mat.map2(src2, 1, dstA); 206 mat.map2(src2, 1, dstA);
202 mat.mapMScalars(src4, dstB); 207 mat.mapMScalars(src4, dstB);
203 208
204 for (int i = 0; i < 4; ++i) { 209 for (int i = 0; i < 4; ++i) {
205 REPORTER_ASSERT(reporter, dstA[i] == dstB[i]); 210 REPORTER_ASSERT(reporter, dstA[i] == dstB[i]);
206 } 211 }
207 } 212 }
208 213
209 static void test_map2(skiatest::Reporter* reporter) { 214 static void test_map2(skiatest::Reporter* reporter) {
210 SkMatrix44 mat; 215 SkMatrix44 mat(SkMatrix44::kUninitialized_Constructor);
211 216
212 for (size_t i = 0; i < SK_ARRAY_COUNT(gMakeProcs); ++i) { 217 for (size_t i = 0; i < SK_ARRAY_COUNT(gMakeProcs); ++i) {
213 gMakeProcs[i](&mat); 218 gMakeProcs[i](&mat);
214 test_map2(reporter, mat); 219 test_map2(reporter, mat);
215 } 220 }
216 } 221 }
217 222
218 static void test_gettype(skiatest::Reporter* reporter) { 223 static void test_gettype(skiatest::Reporter* reporter) {
219 SkMatrix44 matrix; 224 SkMatrix44 matrix(SkMatrix44::kIdentity_Constructor);
220 225
221 REPORTER_ASSERT(reporter, matrix.isIdentity()); 226 REPORTER_ASSERT(reporter, matrix.isIdentity());
222 REPORTER_ASSERT(reporter, SkMatrix44::kIdentity_Mask == matrix.getType()); 227 REPORTER_ASSERT(reporter, SkMatrix44::kIdentity_Mask == matrix.getType());
223 228
224 int expectedMask; 229 int expectedMask;
225 230
226 matrix.set(1, 1, 0); 231 matrix.set(1, 1, 0);
227 expectedMask = SkMatrix44::kScale_Mask; 232 expectedMask = SkMatrix44::kScale_Mask;
228 REPORTER_ASSERT(reporter, matrix.getType() == expectedMask); 233 REPORTER_ASSERT(reporter, matrix.getType() == expectedMask);
229 234
(...skipping 14 matching lines...) Expand all
244 SkMScalar dz = 0; 249 SkMScalar dz = 0;
245 matrix.setTranslate(-dx, -dy, -dz); 250 matrix.setTranslate(-dx, -dy, -dz);
246 REPORTER_ASSERT(reporter, matrix.isIdentity()); 251 REPORTER_ASSERT(reporter, matrix.isIdentity());
247 matrix.preTranslate(-dx, -dy, -dz); 252 matrix.preTranslate(-dx, -dy, -dz);
248 REPORTER_ASSERT(reporter, matrix.isIdentity()); 253 REPORTER_ASSERT(reporter, matrix.isIdentity());
249 matrix.postTranslate(-dx, -dy, -dz); 254 matrix.postTranslate(-dx, -dy, -dz);
250 REPORTER_ASSERT(reporter, matrix.isIdentity()); 255 REPORTER_ASSERT(reporter, matrix.isIdentity());
251 } 256 }
252 257
253 static void test_common_angles(skiatest::Reporter* reporter) { 258 static void test_common_angles(skiatest::Reporter* reporter) {
254 SkMatrix44 rot; 259 SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
255 // Test precision of rotation in common cases 260 // Test precision of rotation in common cases
256 int common_angles[] = { 0, 90, -90, 180, -180, 270, -270, 360, -360 }; 261 int common_angles[] = { 0, 90, -90, 180, -180, 270, -270, 360, -360 };
257 for (int i = 0; i < 9; ++i) { 262 for (int i = 0; i < 9; ++i) {
258 rot.setRotateDegreesAbout(0, 0, -1, SkIntToScalar(common_angles[i])); 263 rot.setRotateDegreesAbout(0, 0, -1, SkIntToScalar(common_angles[i]));
259 264
260 SkMatrix rot3x3 = rot; 265 SkMatrix rot3x3 = rot;
261 REPORTER_ASSERT(reporter, rot3x3.rectStaysRect()); 266 REPORTER_ASSERT(reporter, rot3x3.rectStaysRect());
262 } 267 }
263 } 268 }
264 269
265 static void test_concat(skiatest::Reporter* reporter) { 270 static void test_concat(skiatest::Reporter* reporter) {
266 int i; 271 int i;
267 SkMatrix44 a, b, c, d; 272 SkMatrix44 a(SkMatrix44::kUninitialized_Constructor);
273 SkMatrix44 b(SkMatrix44::kUninitialized_Constructor);
274 SkMatrix44 c(SkMatrix44::kUninitialized_Constructor);
275 SkMatrix44 d(SkMatrix44::kUninitialized_Constructor);
268 276
269 a.setTranslate(10, 10, 10); 277 a.setTranslate(10, 10, 10);
270 b.setScale(2, 2, 2); 278 b.setScale(2, 2, 2);
271 279
272 SkScalar src[8] = { 280 SkScalar src[8] = {
273 0, 0, 0, 1, 281 0, 0, 0, 1,
274 1, 1, 1, 1 282 1, 1, 1, 1
275 }; 283 };
276 SkScalar dst[8]; 284 SkScalar dst[8];
277 285
(...skipping 16 matching lines...) Expand all
294 REPORTER_ASSERT(reporter, d == c); 302 REPORTER_ASSERT(reporter, d == c);
295 303
296 c.mapScalars(src, dst); c.mapScalars(src + 4, dst + 4); 304 c.mapScalars(src, dst); c.mapScalars(src + 4, dst + 4);
297 for (i = 0; i < 3; ++i) { 305 for (i = 0; i < 3; ++i) {
298 REPORTER_ASSERT(reporter, 20 == dst[i]); 306 REPORTER_ASSERT(reporter, 20 == dst[i]);
299 REPORTER_ASSERT(reporter, 22 == dst[i + 4]); 307 REPORTER_ASSERT(reporter, 22 == dst[i + 4]);
300 } 308 }
301 } 309 }
302 310
303 static void test_determinant(skiatest::Reporter* reporter) { 311 static void test_determinant(skiatest::Reporter* reporter) {
304 SkMatrix44 a; 312 SkMatrix44 a(SkMatrix44::kIdentity_Constructor);
305 REPORTER_ASSERT(reporter, nearly_equal_double(1, a.determinant())); 313 REPORTER_ASSERT(reporter, nearly_equal_double(1, a.determinant()));
306 a.set(1, 1, 2); 314 a.set(1, 1, 2);
307 REPORTER_ASSERT(reporter, nearly_equal_double(2, a.determinant())); 315 REPORTER_ASSERT(reporter, nearly_equal_double(2, a.determinant()));
308 SkMatrix44 b; 316 SkMatrix44 b(SkMatrix44::kUninitialized_Constructor);
309 REPORTER_ASSERT(reporter, a.invert(&b)); 317 REPORTER_ASSERT(reporter, a.invert(&b));
310 REPORTER_ASSERT(reporter, nearly_equal_double(0.5, b.determinant())); 318 REPORTER_ASSERT(reporter, nearly_equal_double(0.5, b.determinant()));
311 SkMatrix44 c = b = a; 319 SkMatrix44 c = b = a;
312 c.set(0, 1, 4); 320 c.set(0, 1, 4);
313 b.set(1, 0, 4); 321 b.set(1, 0, 4);
314 REPORTER_ASSERT(reporter, 322 REPORTER_ASSERT(reporter,
315 nearly_equal_double(a.determinant(), 323 nearly_equal_double(a.determinant(),
316 b.determinant())); 324 b.determinant()));
317 SkMatrix44 d = a; 325 SkMatrix44 d = a;
318 d.set(0, 0, 8); 326 d.set(0, 0, 8);
319 REPORTER_ASSERT(reporter, nearly_equal_double(16, d.determinant())); 327 REPORTER_ASSERT(reporter, nearly_equal_double(16, d.determinant()));
320 328
321 SkMatrix44 e = a; 329 SkMatrix44 e = a;
322 e.postConcat(d); 330 e.postConcat(d);
323 REPORTER_ASSERT(reporter, nearly_equal_double(32, e.determinant())); 331 REPORTER_ASSERT(reporter, nearly_equal_double(32, e.determinant()));
324 e.set(0, 0, 0); 332 e.set(0, 0, 0);
325 REPORTER_ASSERT(reporter, nearly_equal_double(0, e.determinant())); 333 REPORTER_ASSERT(reporter, nearly_equal_double(0, e.determinant()));
326 } 334 }
327 335
328 static void test_invert(skiatest::Reporter* reporter) { 336 static void test_invert(skiatest::Reporter* reporter) {
329 SkMatrix44 inverse; 337 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor);
330 double inverseData[16]; 338 double inverseData[16];
331 339
332 SkMatrix44 identity; 340 SkMatrix44 identity(SkMatrix44::kIdentity_Constructor);
333 identity.setIdentity();
334 identity.invert(&inverse); 341 identity.invert(&inverse);
335 inverse.asRowMajord(inverseData); 342 inverse.asRowMajord(inverseData);
336 assert16<double>(reporter, inverseData, 343 assert16<double>(reporter, inverseData,
337 1, 0, 0, 0, 344 1, 0, 0, 0,
338 0, 1, 0, 0, 345 0, 1, 0, 0,
339 0, 0, 1, 0, 346 0, 0, 1, 0,
340 0, 0, 0, 1); 347 0, 0, 0, 1);
341 348
342 SkMatrix44 translation; 349 SkMatrix44 translation(SkMatrix44::kUninitialized_Constructor);
343 translation.setTranslate(2, 3, 4); 350 translation.setTranslate(2, 3, 4);
344 translation.invert(&inverse); 351 translation.invert(&inverse);
345 inverse.asRowMajord(inverseData); 352 inverse.asRowMajord(inverseData);
346 assert16<double>(reporter, inverseData, 353 assert16<double>(reporter, inverseData,
347 1, 0, 0, -2, 354 1, 0, 0, -2,
348 0, 1, 0, -3, 355 0, 1, 0, -3,
349 0, 0, 1, -4, 356 0, 0, 1, -4,
350 0, 0, 0, 1); 357 0, 0, 0, 1);
351 358
352 SkMatrix44 scale; 359 SkMatrix44 scale(SkMatrix44::kUninitialized_Constructor);
353 scale.setScale(2, 4, 8); 360 scale.setScale(2, 4, 8);
354 scale.invert(&inverse); 361 scale.invert(&inverse);
355 inverse.asRowMajord(inverseData); 362 inverse.asRowMajord(inverseData);
356 assert16<double>(reporter, inverseData, 363 assert16<double>(reporter, inverseData,
357 0.5, 0, 0, 0, 364 0.5, 0, 0, 0,
358 0, 0.25, 0, 0, 365 0, 0.25, 0, 0,
359 0, 0, 0.125, 0, 366 0, 0, 0.125, 0,
360 0, 0, 0, 1); 367 0, 0, 0, 1);
361 368
362 SkMatrix44 scaleTranslation; 369 SkMatrix44 scaleTranslation(SkMatrix44::kUninitialized_Constructor);
363 scaleTranslation.setScale(10, 100, 1000); 370 scaleTranslation.setScale(10, 100, 1000);
364 scaleTranslation.preTranslate(2, 3, 4); 371 scaleTranslation.preTranslate(2, 3, 4);
365 scaleTranslation.invert(&inverse); 372 scaleTranslation.invert(&inverse);
366 inverse.asRowMajord(inverseData); 373 inverse.asRowMajord(inverseData);
367 assert16<double>(reporter, inverseData, 374 assert16<double>(reporter, inverseData,
368 0.1, 0, 0, -2, 375 0.1, 0, 0, -2,
369 0, 0.01, 0, -3, 376 0, 0.01, 0, -3,
370 0, 0, 0.001, -4, 377 0, 0, 0.001, -4,
371 0, 0, 0, 1); 378 0, 0, 0, 1);
372 379
373 SkMatrix44 rotation; 380 SkMatrix44 rotation(SkMatrix44::kUninitialized_Constructor);
374 rotation.setRotateDegreesAbout(0, 0, 1, 90); 381 rotation.setRotateDegreesAbout(0, 0, 1, 90);
375 rotation.invert(&inverse); 382 rotation.invert(&inverse);
376 SkMatrix44 expected; 383 SkMatrix44 expected(SkMatrix44::kUninitialized_Constructor);
377 double expectedInverseRotation[16] = 384 double expectedInverseRotation[16] =
378 {0, 1, 0, 0, 385 {0, 1, 0, 0,
379 -1, 0, 0, 0, 386 -1, 0, 0, 0,
380 0, 0, 1, 0, 387 0, 0, 1, 0,
381 0, 0, 0, 1}; 388 0, 0, 0, 1};
382 expected.setRowMajord(expectedInverseRotation); 389 expected.setRowMajord(expectedInverseRotation);
383 REPORTER_ASSERT(reporter, nearly_equal(expected, inverse)); 390 REPORTER_ASSERT(reporter, nearly_equal(expected, inverse));
384 391
385 SkMatrix44 affine; 392 SkMatrix44 affine(SkMatrix44::kUninitialized_Constructor);
386 affine.setRotateDegreesAbout(0, 0, 1, 90); 393 affine.setRotateDegreesAbout(0, 0, 1, 90);
387 affine.preScale(10, 20, 100); 394 affine.preScale(10, 20, 100);
388 affine.preTranslate(2, 3, 4); 395 affine.preTranslate(2, 3, 4);
389 affine.invert(&inverse); 396 affine.invert(&inverse);
390 double expectedInverseAffine[16] = 397 double expectedInverseAffine[16] =
391 {0, 0.1, 0, -2, 398 {0, 0.1, 0, -2,
392 -0.05, 0, 0, -3, 399 -0.05, 0, 0, -3,
393 0, 0, 0.01, -4, 400 0, 0, 0.01, -4,
394 0, 0, 0, 1}; 401 0, 0, 0, 1};
395 expected.setRowMajord(expectedInverseAffine); 402 expected.setRowMajord(expectedInverseAffine);
396 REPORTER_ASSERT(reporter, nearly_equal(expected, inverse)); 403 REPORTER_ASSERT(reporter, nearly_equal(expected, inverse));
397 404
398 SkMatrix44 perspective; 405 SkMatrix44 perspective(SkMatrix44::kIdentity_Constructor);
399 perspective.setIdentity();
400 perspective.setDouble(3, 2, 1.0); 406 perspective.setDouble(3, 2, 1.0);
401 perspective.invert(&inverse); 407 perspective.invert(&inverse);
402 double expectedInversePerspective[16] = 408 double expectedInversePerspective[16] =
403 {1, 0, 0, 0, 409 {1, 0, 0, 0,
404 0, 1, 0, 0, 410 0, 1, 0, 0,
405 0, 0, 1, 0, 411 0, 0, 1, 0,
406 0, 0, -1, 1}; 412 0, 0, -1, 1};
407 expected.setRowMajord(expectedInversePerspective); 413 expected.setRowMajord(expectedInversePerspective);
408 REPORTER_ASSERT(reporter, nearly_equal(expected, inverse)); 414 REPORTER_ASSERT(reporter, nearly_equal(expected, inverse));
409 415
410 SkMatrix44 affineAndPerspective; 416 SkMatrix44 affineAndPerspective(SkMatrix44::kIdentity_Constructor);
411 affineAndPerspective.setIdentity();
412 affineAndPerspective.setDouble(3, 2, 1.0); 417 affineAndPerspective.setDouble(3, 2, 1.0);
413 affineAndPerspective.preScale(10, 20, 100); 418 affineAndPerspective.preScale(10, 20, 100);
414 affineAndPerspective.preTranslate(2, 3, 4); 419 affineAndPerspective.preTranslate(2, 3, 4);
415 affineAndPerspective.invert(&inverse); 420 affineAndPerspective.invert(&inverse);
416 double expectedInverseAffineAndPerspective[16] = 421 double expectedInverseAffineAndPerspective[16] =
417 {0.1, 0, 2, -2, 422 {0.1, 0, 2, -2,
418 0, 0.05, 3, -3, 423 0, 0.05, 3, -3,
419 0, 0, 4.01, -4, 424 0, 0, 4.01, -4,
420 0, 0, -1, 1}; 425 0, 0, -1, 1};
421 expected.setRowMajord(expectedInverseAffineAndPerspective); 426 expected.setRowMajord(expectedInverseAffineAndPerspective);
422 REPORTER_ASSERT(reporter, nearly_equal(expected, inverse)); 427 REPORTER_ASSERT(reporter, nearly_equal(expected, inverse));
423 } 428 }
424 429
425 static void test_transpose(skiatest::Reporter* reporter) { 430 static void test_transpose(skiatest::Reporter* reporter) {
426 SkMatrix44 a; 431 SkMatrix44 a(SkMatrix44::kUninitialized_Constructor);
427 SkMatrix44 b; 432 SkMatrix44 b(SkMatrix44::kUninitialized_Constructor);
428 433
429 int i = 0; 434 int i = 0;
430 for (int row = 0; row < 4; ++row) { 435 for (int row = 0; row < 4; ++row) {
431 for (int col = 0; col < 4; ++col) { 436 for (int col = 0; col < 4; ++col) {
432 a.setDouble(row, col, i); 437 a.setDouble(row, col, i);
433 b.setDouble(col, row, i++); 438 b.setDouble(col, row, i++);
434 } 439 }
435 } 440 }
436 441
437 a.transpose(); 442 a.transpose();
438 REPORTER_ASSERT(reporter, nearly_equal(a, b)); 443 REPORTER_ASSERT(reporter, nearly_equal(a, b));
439 } 444 }
440 445
441 static void test_get_set_double(skiatest::Reporter* reporter) { 446 static void test_get_set_double(skiatest::Reporter* reporter) {
442 SkMatrix44 a; 447 SkMatrix44 a(SkMatrix44::kUninitialized_Constructor);
443 for (int row = 0; row < 4; ++row) { 448 for (int row = 0; row < 4; ++row) {
444 for (int col = 0; col < 4; ++col) { 449 for (int col = 0; col < 4; ++col) {
445 a.setDouble(row, col, 3.141592653589793); 450 a.setDouble(row, col, 3.141592653589793);
446 REPORTER_ASSERT(reporter, 451 REPORTER_ASSERT(reporter,
447 nearly_equal_double(3.141592653589793, 452 nearly_equal_double(3.141592653589793,
448 a.getDouble(row, col))); 453 a.getDouble(row, col)));
449 a.setDouble(row, col, 0); 454 a.setDouble(row, col, 0);
450 REPORTER_ASSERT(reporter, 455 REPORTER_ASSERT(reporter,
451 nearly_equal_double(0, a.getDouble(row, col))); 456 nearly_equal_double(0, a.getDouble(row, col)));
452 } 457 }
453 } 458 }
454 } 459 }
455 460
456 static void test_set_row_col_major(skiatest::Reporter* reporter) { 461 static void test_set_row_col_major(skiatest::Reporter* reporter) {
457 SkMatrix44 a, b, c, d; 462 SkMatrix44 a(SkMatrix44::kUninitialized_Constructor);
463 SkMatrix44 b(SkMatrix44::kUninitialized_Constructor);
464
458 for (int row = 0; row < 4; ++row) { 465 for (int row = 0; row < 4; ++row) {
459 for (int col = 0; col < 4; ++col) { 466 for (int col = 0; col < 4; ++col) {
460 a.setDouble(row, col, row * 4 + col); 467 a.setDouble(row, col, row * 4 + col);
461 } 468 }
462 } 469 }
463 470
464 double bufferd[16]; 471 double bufferd[16];
465 float bufferf[16]; 472 float bufferf[16];
466 a.asColMajord(bufferd); 473 a.asColMajord(bufferd);
467 b.setColMajord(bufferd); 474 b.setColMajord(bufferd);
(...skipping 14 matching lines...) Expand all
482 5, 6, 7, 8, 489 5, 6, 7, 8,
483 9, 10, 11, 12, 490 9, 10, 11, 12,
484 13, 14, 15, 16 }; 491 13, 14, 15, 16 };
485 SkScalar values3x3[9] = { 1, 2, 4, 492 SkScalar values3x3[9] = { 1, 2, 4,
486 5, 6, 8, 493 5, 6, 8,
487 13, 14, 16 }; 494 13, 14, 16 };
488 SkMScalar values4x4flattened[16] = { 1, 2, 0, 4, 495 SkMScalar values4x4flattened[16] = { 1, 2, 0, 4,
489 5, 6, 0, 8, 496 5, 6, 0, 8,
490 0, 0, 1, 0, 497 0, 0, 1, 0,
491 13, 14, 0, 16 }; 498 13, 14, 0, 16 };
492 SkMatrix44 a44; 499 SkMatrix44 a44(SkMatrix44::kUninitialized_Constructor);
493 a44.setRowMajor(values4x4); 500 a44.setRowMajor(values4x4);
494 501
495 SkMatrix a33 = a44; 502 SkMatrix a33 = a44;
496 SkMatrix expected33; 503 SkMatrix expected33;
497 for (int i = 0; i < 9; i++) expected33[i] = values3x3[i]; 504 for (int i = 0; i < 9; i++) expected33[i] = values3x3[i];
498 REPORTER_ASSERT(reporter, expected33 == a33); 505 REPORTER_ASSERT(reporter, expected33 == a33);
499 506
500 SkMatrix44 a44flattened = a33; 507 SkMatrix44 a44flattened = a33;
501 SkMatrix44 expected44flattened; 508 SkMatrix44 expected44flattened(SkMatrix44::kUninitialized_Constructor);
502 expected44flattened.setRowMajor(values4x4flattened); 509 expected44flattened.setRowMajor(values4x4flattened);
503 REPORTER_ASSERT(reporter, nearly_equal(a44flattened, expected44flattened)); 510 REPORTER_ASSERT(reporter, nearly_equal(a44flattened, expected44flattened));
504 511
505 // Test that a point with a Z value of 0 is transformed the same way. 512 // Test that a point with a Z value of 0 is transformed the same way.
506 SkScalar vec4[4] = { 2, 4, 0, 8 }; 513 SkScalar vec4[4] = { 2, 4, 0, 8 };
507 SkScalar vec3[3] = { 2, 4, 8 }; 514 SkScalar vec3[3] = { 2, 4, 8 };
508 515
509 SkScalar vec4transformed[4]; 516 SkScalar vec4transformed[4];
510 SkScalar vec3transformed[3]; 517 SkScalar vec3transformed[3];
511 SkScalar vec4transformed2[4]; 518 SkScalar vec4transformed2[4];
512 a44.mapScalars(vec4, vec4transformed); 519 a44.mapScalars(vec4, vec4transformed);
513 a33.mapHomogeneousPoints(vec3transformed, vec3, 1); 520 a33.mapHomogeneousPoints(vec3transformed, vec3, 1);
514 a44flattened.mapScalars(vec4, vec4transformed2); 521 a44flattened.mapScalars(vec4, vec4transformed2);
515 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[0], vec3transf ormed[0])); 522 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[0], vec3transf ormed[0]));
516 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[1], vec3transf ormed[1])); 523 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[1], vec3transf ormed[1]));
517 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[3], vec3transf ormed[2])); 524 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[3], vec3transf ormed[2]));
518 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[0], vec4transf ormed2[0])); 525 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[0], vec4transf ormed2[0]));
519 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[1], vec4transf ormed2[1])); 526 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[1], vec4transf ormed2[1]));
520 REPORTER_ASSERT(reporter, !nearly_equal_scalar(vec4transformed[2], vec4trans formed2[2])); 527 REPORTER_ASSERT(reporter, !nearly_equal_scalar(vec4transformed[2], vec4trans formed2[2]));
521 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[3], vec4transf ormed2[3])); 528 REPORTER_ASSERT(reporter, nearly_equal_scalar(vec4transformed[3], vec4transf ormed2[3]));
522 } 529 }
523 530
524 static void TestMatrix44(skiatest::Reporter* reporter) { 531 static void TestMatrix44(skiatest::Reporter* reporter) {
525 SkMatrix44 mat, inverse, iden1, iden2, rot; 532 SkMatrix44 mat(SkMatrix44::kUninitialized_Constructor);
533 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor);
534 SkMatrix44 iden1(SkMatrix44::kUninitialized_Constructor);
535 SkMatrix44 iden2(SkMatrix44::kUninitialized_Constructor);
536 SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
526 537
527 mat.reset();
528 mat.setTranslate(1, 1, 1); 538 mat.setTranslate(1, 1, 1);
529 mat.invert(&inverse); 539 mat.invert(&inverse);
530 iden1.setConcat(mat, inverse); 540 iden1.setConcat(mat, inverse);
531 REPORTER_ASSERT(reporter, is_identity(iden1)); 541 REPORTER_ASSERT(reporter, is_identity(iden1));
532 542
533 mat.setScale(2, 2, 2); 543 mat.setScale(2, 2, 2);
534 mat.invert(&inverse); 544 mat.invert(&inverse);
535 iden1.setConcat(mat, inverse); 545 iden1.setConcat(mat, inverse);
536 REPORTER_ASSERT(reporter, is_identity(iden1)); 546 REPORTER_ASSERT(reporter, is_identity(iden1));
537 547
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 test_get_set_double(reporter); 630 test_get_set_double(reporter);
621 test_set_row_col_major(reporter); 631 test_set_row_col_major(reporter);
622 test_translate(reporter); 632 test_translate(reporter);
623 test_scale(reporter); 633 test_scale(reporter);
624 test_map2(reporter); 634 test_map2(reporter);
625 test_3x3_conversion(reporter); 635 test_3x3_conversion(reporter);
626 } 636 }
627 637
628 #include "TestClassDef.h" 638 #include "TestClassDef.h"
629 DEFINE_TESTCLASS("Matrix44", Matrix44TestClass, TestMatrix44) 639 DEFINE_TESTCLASS("Matrix44", Matrix44TestClass, TestMatrix44)
OLDNEW
« no previous file with comments | « tests/GpuBitmapCopyTest.cpp ('k') | tests/PathTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698