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

Side by Side Diff: ui/gfx/transform_unittest.cc

Issue 11087093: Migrate ui::Transform to gfx::Transform (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Should pass trybots this time Created 8 years, 2 months 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
« no previous file with comments | « ui/gfx/transform.cc ('k') | ui/gfx/transform_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/transform.h" 5 #include "ui/gfx/transform.h"
6 6
7 #include <ostream> 7 #include <ostream>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/gfx/point3.h" 12 #include "ui/gfx/point3.h"
13 13
14 namespace { 14 namespace {
15 15
16 bool PointsAreNearlyEqual(const gfx::Point3f& lhs, 16 bool PointsAreNearlyEqual(const gfx::Point3f& lhs,
17 const gfx::Point3f& rhs) { 17 const gfx::Point3f& rhs) {
18 float epsilon = 0.0001f; 18 float epsilon = 0.0001f;
19 return lhs.SquaredDistanceTo(rhs) < epsilon; 19 return lhs.SquaredDistanceTo(rhs) < epsilon;
20 } 20 }
21 21
22 TEST(XFormTest, Equality) { 22 TEST(XFormTest, Equality) {
23 ui::Transform lhs, rhs, interpolated; 23 gfx::Transform lhs, rhs, interpolated;
24 rhs.matrix().set3x3(1, 2, 3, 24 rhs.matrix().set3x3(1, 2, 3,
25 4, 5, 6, 25 4, 5, 6,
26 7, 8, 9); 26 7, 8, 9);
27 interpolated = lhs; 27 interpolated = lhs;
28 for (int i = 0; i <= 100; ++i) { 28 for (int i = 0; i <= 100; ++i) {
29 for (int row = 0; row < 4; ++row) { 29 for (int row = 0; row < 4; ++row) {
30 for (int col = 0; col < 4; ++col) { 30 for (int col = 0; col < 4; ++col) {
31 float a = lhs.matrix().get(row, col); 31 float a = lhs.matrix().get(row, col);
32 float b = rhs.matrix().get(row, col); 32 float b = rhs.matrix().get(row, col);
33 float t = i / 100.0f; 33 float t = i / 100.0f;
34 interpolated.matrix().set(row, col, a + (b - a) * t); 34 interpolated.matrix().set(row, col, a + (b - a) * t);
35 } 35 }
36 } 36 }
37 if (i == 100) { 37 if (i == 100) {
38 EXPECT_TRUE(rhs == interpolated); 38 EXPECT_TRUE(rhs == interpolated);
39 } else { 39 } else {
40 EXPECT_TRUE(rhs != interpolated); 40 EXPECT_TRUE(rhs != interpolated);
41 } 41 }
42 } 42 }
43 lhs = ui::Transform(); 43 lhs = gfx::Transform();
44 rhs = ui::Transform(); 44 rhs = gfx::Transform();
45 for (int i = 1; i < 100; ++i) { 45 for (int i = 1; i < 100; ++i) {
46 lhs.SetTranslate(i, i); 46 lhs.SetTranslate(i, i);
47 rhs.SetTranslate(-i, -i); 47 rhs.SetTranslate(-i, -i);
48 EXPECT_TRUE(lhs != rhs); 48 EXPECT_TRUE(lhs != rhs);
49 rhs.ConcatTranslate(2*i, 2*i); 49 rhs.ConcatTranslate(2*i, 2*i);
50 EXPECT_TRUE(lhs == rhs); 50 EXPECT_TRUE(lhs == rhs);
51 } 51 }
52 } 52 }
53 53
54 TEST(XFormTest, ConcatTranslate) { 54 TEST(XFormTest, ConcatTranslate) {
55 static const struct TestCase { 55 static const struct TestCase {
56 int x1; 56 int x1;
57 int y1; 57 int y1;
58 float tx; 58 float tx;
59 float ty; 59 float ty;
60 int x2; 60 int x2;
61 int y2; 61 int y2;
62 } test_cases[] = { 62 } test_cases[] = {
63 { 0, 0, 10.0f, 20.0f, 10, 20 }, 63 { 0, 0, 10.0f, 20.0f, 10, 20 },
64 { 0, 0, -10.0f, -20.0f, 0, 0 }, 64 { 0, 0, -10.0f, -20.0f, 0, 0 },
65 { 0, 0, -10.0f, -20.0f, -10, -20 }, 65 { 0, 0, -10.0f, -20.0f, -10, -20 },
66 { 0, 0, 66 { 0, 0,
67 std::numeric_limits<float>::quiet_NaN(), 67 std::numeric_limits<float>::quiet_NaN(),
68 std::numeric_limits<float>::quiet_NaN(), 68 std::numeric_limits<float>::quiet_NaN(),
69 10, 20 }, 69 10, 20 },
70 }; 70 };
71 71
72 ui::Transform xform; 72 gfx::Transform xform;
73 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 73 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
74 const TestCase& value = test_cases[i]; 74 const TestCase& value = test_cases[i];
75 xform.ConcatTranslate(value.tx, value.ty); 75 xform.ConcatTranslate(value.tx, value.ty);
76 gfx::Point3f p1(value.x1, value.y1, 0); 76 gfx::Point3f p1(value.x1, value.y1, 0);
77 gfx::Point3f p2(value.x2, value.y2, 0); 77 gfx::Point3f p2(value.x2, value.y2, 0);
78 xform.TransformPoint(p1); 78 xform.TransformPoint(p1);
79 if (value.tx == value.tx && 79 if (value.tx == value.tx &&
80 value.ty == value.ty) { 80 value.ty == value.ty) {
81 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); 81 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2));
82 } 82 }
83 } 83 }
84 } 84 }
85 85
86 TEST(XFormTest, ConcatScale) { 86 TEST(XFormTest, ConcatScale) {
87 static const struct TestCase { 87 static const struct TestCase {
88 int before; 88 int before;
89 float scale; 89 float scale;
90 int after; 90 int after;
91 } test_cases[] = { 91 } test_cases[] = {
92 { 1, 10.0f, 10 }, 92 { 1, 10.0f, 10 },
93 { 1, .1f, 1 }, 93 { 1, .1f, 1 },
94 { 1, 100.0f, 100 }, 94 { 1, 100.0f, 100 },
95 { 1, -1.0f, -100 }, 95 { 1, -1.0f, -100 },
96 { 1, std::numeric_limits<float>::quiet_NaN(), 1 } 96 { 1, std::numeric_limits<float>::quiet_NaN(), 1 }
97 }; 97 };
98 98
99 ui::Transform xform; 99 gfx::Transform xform;
100 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 100 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
101 const TestCase& value = test_cases[i]; 101 const TestCase& value = test_cases[i];
102 xform.ConcatScale(value.scale, value.scale); 102 xform.ConcatScale(value.scale, value.scale);
103 gfx::Point3f p1(value.before, value.before, 0); 103 gfx::Point3f p1(value.before, value.before, 0);
104 gfx::Point3f p2(value.after, value.after, 0); 104 gfx::Point3f p2(value.after, value.after, 0);
105 xform.TransformPoint(p1); 105 xform.TransformPoint(p1);
106 if (value.scale == value.scale) { 106 if (value.scale == value.scale) {
107 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); 107 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2));
108 } 108 }
109 } 109 }
110 } 110 }
111 111
112 TEST(XFormTest, ConcatRotate) { 112 TEST(XFormTest, ConcatRotate) {
113 static const struct TestCase { 113 static const struct TestCase {
114 int x1; 114 int x1;
115 int y1; 115 int y1;
116 float degrees; 116 float degrees;
117 int x2; 117 int x2;
118 int y2; 118 int y2;
119 } test_cases[] = { 119 } test_cases[] = {
120 { 1, 0, 90.0f, 0, 1 }, 120 { 1, 0, 90.0f, 0, 1 },
121 { 1, 0, -90.0f, 1, 0 }, 121 { 1, 0, -90.0f, 1, 0 },
122 { 1, 0, 90.0f, 0, 1 }, 122 { 1, 0, 90.0f, 0, 1 },
123 { 1, 0, 360.0f, 0, 1 }, 123 { 1, 0, 360.0f, 0, 1 },
124 { 1, 0, 0.0f, 0, 1 }, 124 { 1, 0, 0.0f, 0, 1 },
125 { 1, 0, std::numeric_limits<float>::quiet_NaN(), 1, 0 } 125 { 1, 0, std::numeric_limits<float>::quiet_NaN(), 1, 0 }
126 }; 126 };
127 127
128 ui::Transform xform; 128 gfx::Transform xform;
129 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 129 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
130 const TestCase& value = test_cases[i]; 130 const TestCase& value = test_cases[i];
131 xform.ConcatRotate(value.degrees); 131 xform.ConcatRotate(value.degrees);
132 gfx::Point3f p1(value.x1, value.y1, 0); 132 gfx::Point3f p1(value.x1, value.y1, 0);
133 gfx::Point3f p2(value.x2, value.y2, 0); 133 gfx::Point3f p2(value.x2, value.y2, 0);
134 xform.TransformPoint(p1); 134 xform.TransformPoint(p1);
135 if (value.degrees == value.degrees) { 135 if (value.degrees == value.degrees) {
136 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); 136 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2));
137 } 137 }
138 } 138 }
(...skipping 11 matching lines...) Expand all
150 { 0, 0, 150 { 0, 0,
151 std::numeric_limits<float>::quiet_NaN(), 151 std::numeric_limits<float>::quiet_NaN(),
152 std::numeric_limits<float>::quiet_NaN(), 152 std::numeric_limits<float>::quiet_NaN(),
153 0, 0 } 153 0, 0 }
154 }; 154 };
155 155
156 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 156 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
157 const TestCase& value = test_cases[i]; 157 const TestCase& value = test_cases[i];
158 for (int k = 0; k < 3; ++k) { 158 for (int k = 0; k < 3; ++k) {
159 gfx::Point3f p0, p1, p2; 159 gfx::Point3f p0, p1, p2;
160 ui::Transform xform; 160 gfx::Transform xform;
161 switch (k) { 161 switch (k) {
162 case 0: 162 case 0:
163 p1.SetPoint(value.x1, 0, 0); 163 p1.SetPoint(value.x1, 0, 0);
164 p2.SetPoint(value.x2, 0, 0); 164 p2.SetPoint(value.x2, 0, 0);
165 xform.SetTranslateX(value.tx); 165 xform.SetTranslateX(value.tx);
166 break; 166 break;
167 case 1: 167 case 1:
168 p1.SetPoint(0, value.y1, 0); 168 p1.SetPoint(0, value.y1, 0);
169 p2.SetPoint(0, value.y2, 0); 169 p2.SetPoint(0, value.y2, 0);
170 xform.SetTranslateY(value.ty); 170 xform.SetTranslateY(value.ty);
(...skipping 26 matching lines...) Expand all
197 { 1, 1.0f, 1 }, 197 { 1, 1.0f, 1 },
198 { 1, 0.0f, 0 }, 198 { 1, 0.0f, 0 },
199 { 0, 10.0f, 0 }, 199 { 0, 10.0f, 0 },
200 { 1, std::numeric_limits<float>::quiet_NaN(), 0 }, 200 { 1, std::numeric_limits<float>::quiet_NaN(), 0 },
201 }; 201 };
202 202
203 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 203 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
204 const TestCase& value = test_cases[i]; 204 const TestCase& value = test_cases[i];
205 for (int k = 0; k < 3; ++k) { 205 for (int k = 0; k < 3; ++k) {
206 gfx::Point3f p0, p1, p2; 206 gfx::Point3f p0, p1, p2;
207 ui::Transform xform; 207 gfx::Transform xform;
208 switch (k) { 208 switch (k) {
209 case 0: 209 case 0:
210 p1.SetPoint(value.before, 0, 0); 210 p1.SetPoint(value.before, 0, 0);
211 p2.SetPoint(value.after, 0, 0); 211 p2.SetPoint(value.after, 0, 0);
212 xform.SetScaleX(value.s); 212 xform.SetScaleX(value.s);
213 break; 213 break;
214 case 1: 214 case 1:
215 p1.SetPoint(0, value.before, 0); 215 p1.SetPoint(0, value.before, 0);
216 p2.SetPoint(0, value.after, 0); 216 p2.SetPoint(0, value.after, 0);
217 xform.SetScaleY(value.s); 217 xform.SetScaleY(value.s);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 { 0, 0, std::numeric_limits<float>::quiet_NaN(), 0, 0 }, 252 { 0, 0, std::numeric_limits<float>::quiet_NaN(), 0, 0 },
253 { 100, 0, 360.0f, 100, 0 } 253 { 100, 0, 360.0f, 100, 0 }
254 }; 254 };
255 255
256 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(set_rotate_cases); ++i) { 256 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(set_rotate_cases); ++i) {
257 const SetRotateCase& value = set_rotate_cases[i]; 257 const SetRotateCase& value = set_rotate_cases[i];
258 gfx::Point3f p0; 258 gfx::Point3f p0;
259 gfx::Point3f p1(value.x, value.y, 0); 259 gfx::Point3f p1(value.x, value.y, 0);
260 gfx::Point3f p2(value.xprime, value.yprime, 0); 260 gfx::Point3f p2(value.xprime, value.yprime, 0);
261 p0 = p1; 261 p0 = p1;
262 ui::Transform xform; 262 gfx::Transform xform;
263 xform.SetRotate(value.degree); 263 xform.SetRotate(value.degree);
264 // just want to make sure that we don't crash in the case of NaN. 264 // just want to make sure that we don't crash in the case of NaN.
265 if (value.degree == value.degree) { 265 if (value.degree == value.degree) {
266 xform.TransformPoint(p1); 266 xform.TransformPoint(p1);
267 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2)); 267 EXPECT_TRUE(PointsAreNearlyEqual(p1, p2));
268 xform.TransformPointReverse(p1); 268 xform.TransformPointReverse(p1);
269 EXPECT_TRUE(PointsAreNearlyEqual(p1, p0)); 269 EXPECT_TRUE(PointsAreNearlyEqual(p1, p0));
270 } 270 }
271 } 271 }
272 } 272 }
(...skipping 10 matching lines...) Expand all
283 } test_cases[] = { 283 } test_cases[] = {
284 { 0, 0, 10.0f, 20.0f, 10, 20}, 284 { 0, 0, 10.0f, 20.0f, 10, 20},
285 { 0, 0, -10.0f, -20.0f, 0, 0}, 285 { 0, 0, -10.0f, -20.0f, 0, 0},
286 { 0, 0, -10.0f, -20.0f, -10, -20}, 286 { 0, 0, -10.0f, -20.0f, -10, -20},
287 { 0, 0, 287 { 0, 0,
288 std::numeric_limits<float>::quiet_NaN(), 288 std::numeric_limits<float>::quiet_NaN(),
289 std::numeric_limits<float>::quiet_NaN(), 289 std::numeric_limits<float>::quiet_NaN(),
290 10, 20}, 290 10, 20},
291 }; 291 };
292 292
293 ui::Transform xform; 293 gfx::Transform xform;
294 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 294 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
295 const TestCase& value = test_cases[i]; 295 const TestCase& value = test_cases[i];
296 xform.ConcatTranslate(value.tx, value.ty); 296 xform.ConcatTranslate(value.tx, value.ty);
297 gfx::Point p1(value.x1, value.y1); 297 gfx::Point p1(value.x1, value.y1);
298 gfx::Point p2(value.x2, value.y2); 298 gfx::Point p2(value.x2, value.y2);
299 xform.TransformPoint(p1); 299 xform.TransformPoint(p1);
300 if (value.tx == value.tx && 300 if (value.tx == value.tx &&
301 value.ty == value.ty) { 301 value.ty == value.ty) {
302 EXPECT_EQ(p1.x(), p2.x()); 302 EXPECT_EQ(p1.x(), p2.x());
303 EXPECT_EQ(p1.y(), p2.y()); 303 EXPECT_EQ(p1.y(), p2.y());
304 } 304 }
305 } 305 }
306 } 306 }
307 307
308 TEST(XFormTest, ConcatScale2D) { 308 TEST(XFormTest, ConcatScale2D) {
309 static const struct TestCase { 309 static const struct TestCase {
310 int before; 310 int before;
311 float scale; 311 float scale;
312 int after; 312 int after;
313 } test_cases[] = { 313 } test_cases[] = {
314 { 1, 10.0f, 10}, 314 { 1, 10.0f, 10},
315 { 1, .1f, 1}, 315 { 1, .1f, 1},
316 { 1, 100.0f, 100}, 316 { 1, 100.0f, 100},
317 { 1, -1.0f, -100}, 317 { 1, -1.0f, -100},
318 { 1, std::numeric_limits<float>::quiet_NaN(), 1} 318 { 1, std::numeric_limits<float>::quiet_NaN(), 1}
319 }; 319 };
320 320
321 ui::Transform xform; 321 gfx::Transform xform;
322 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 322 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
323 const TestCase& value = test_cases[i]; 323 const TestCase& value = test_cases[i];
324 xform.ConcatScale(value.scale, value.scale); 324 xform.ConcatScale(value.scale, value.scale);
325 gfx::Point p1(value.before, value.before); 325 gfx::Point p1(value.before, value.before);
326 gfx::Point p2(value.after, value.after); 326 gfx::Point p2(value.after, value.after);
327 xform.TransformPoint(p1); 327 xform.TransformPoint(p1);
328 if (value.scale == value.scale) { 328 if (value.scale == value.scale) {
329 EXPECT_EQ(p1.x(), p2.x()); 329 EXPECT_EQ(p1.x(), p2.x());
330 EXPECT_EQ(p1.y(), p2.y()); 330 EXPECT_EQ(p1.y(), p2.y());
331 } 331 }
332 } 332 }
333 } 333 }
334 334
335 TEST(XFormTest, ConcatRotate2D) { 335 TEST(XFormTest, ConcatRotate2D) {
336 static const struct TestCase { 336 static const struct TestCase {
337 int x1; 337 int x1;
338 int y1; 338 int y1;
339 float degrees; 339 float degrees;
340 int x2; 340 int x2;
341 int y2; 341 int y2;
342 } test_cases[] = { 342 } test_cases[] = {
343 { 1, 0, 90.0f, 0, 1}, 343 { 1, 0, 90.0f, 0, 1},
344 { 1, 0, -90.0f, 1, 0}, 344 { 1, 0, -90.0f, 1, 0},
345 { 1, 0, 90.0f, 0, 1}, 345 { 1, 0, 90.0f, 0, 1},
346 { 1, 0, 360.0f, 0, 1}, 346 { 1, 0, 360.0f, 0, 1},
347 { 1, 0, 0.0f, 0, 1}, 347 { 1, 0, 0.0f, 0, 1},
348 { 1, 0, std::numeric_limits<float>::quiet_NaN(), 1, 0} 348 { 1, 0, std::numeric_limits<float>::quiet_NaN(), 1, 0}
349 }; 349 };
350 350
351 ui::Transform xform; 351 gfx::Transform xform;
352 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 352 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
353 const TestCase& value = test_cases[i]; 353 const TestCase& value = test_cases[i];
354 xform.ConcatRotate(value.degrees); 354 xform.ConcatRotate(value.degrees);
355 gfx::Point p1(value.x1, value.y1); 355 gfx::Point p1(value.x1, value.y1);
356 gfx::Point p2(value.x2, value.y2); 356 gfx::Point p2(value.x2, value.y2);
357 xform.TransformPoint(p1); 357 xform.TransformPoint(p1);
358 if (value.degrees == value.degrees) { 358 if (value.degrees == value.degrees) {
359 EXPECT_EQ(p1.x(), p2.x()); 359 EXPECT_EQ(p1.x(), p2.x());
360 EXPECT_EQ(p1.y(), p2.y()); 360 EXPECT_EQ(p1.y(), p2.y());
361 } 361 }
(...skipping 14 matching lines...) Expand all
376 std::numeric_limits<float>::quiet_NaN(), 376 std::numeric_limits<float>::quiet_NaN(),
377 0, 0} 377 0, 0}
378 }; 378 };
379 379
380 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 380 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
381 const TestCase& value = test_cases[i]; 381 const TestCase& value = test_cases[i];
382 for (int j = -1; j < 2; ++j) { 382 for (int j = -1; j < 2; ++j) {
383 for (int k = 0; k < 3; ++k) { 383 for (int k = 0; k < 3; ++k) {
384 float epsilon = 0.0001f; 384 float epsilon = 0.0001f;
385 gfx::Point p0, p1, p2; 385 gfx::Point p0, p1, p2;
386 ui::Transform xform; 386 gfx::Transform xform;
387 switch (k) { 387 switch (k) {
388 case 0: 388 case 0:
389 p1.SetPoint(value.x1, 0); 389 p1.SetPoint(value.x1, 0);
390 p2.SetPoint(value.x2, 0); 390 p2.SetPoint(value.x2, 0);
391 xform.SetTranslateX(value.tx + j * epsilon); 391 xform.SetTranslateX(value.tx + j * epsilon);
392 break; 392 break;
393 case 1: 393 case 1:
394 p1.SetPoint(0, value.y1); 394 p1.SetPoint(0, value.y1);
395 p2.SetPoint(0, value.y2); 395 p2.SetPoint(0, value.y2);
396 xform.SetTranslateY(value.ty + j * epsilon); 396 xform.SetTranslateY(value.ty + j * epsilon);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 { 0, 10.0f, 0}, 429 { 0, 10.0f, 0},
430 { 1, std::numeric_limits<float>::quiet_NaN(), 0}, 430 { 1, std::numeric_limits<float>::quiet_NaN(), 0},
431 }; 431 };
432 432
433 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { 433 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
434 const TestCase& value = test_cases[i]; 434 const TestCase& value = test_cases[i];
435 for (int j = -1; j < 2; ++j) { 435 for (int j = -1; j < 2; ++j) {
436 for (int k = 0; k < 3; ++k) { 436 for (int k = 0; k < 3; ++k) {
437 float epsilon = 0.0001f; 437 float epsilon = 0.0001f;
438 gfx::Point p0, p1, p2; 438 gfx::Point p0, p1, p2;
439 ui::Transform xform; 439 gfx::Transform xform;
440 switch (k) { 440 switch (k) {
441 case 0: 441 case 0:
442 p1.SetPoint(value.before, 0); 442 p1.SetPoint(value.before, 0);
443 p2.SetPoint(value.after, 0); 443 p2.SetPoint(value.after, 0);
444 xform.SetScaleX(value.s + j * epsilon); 444 xform.SetScaleX(value.s + j * epsilon);
445 break; 445 break;
446 case 1: 446 case 1:
447 p1.SetPoint(0, value.before); 447 p1.SetPoint(0, value.before);
448 p2.SetPoint(0, value.after); 448 p2.SetPoint(0, value.after);
449 xform.SetScaleY(value.s + j * epsilon); 449 xform.SetScaleY(value.s + j * epsilon);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 { 0, 0, 0.0f, 0, 0}, 489 { 0, 0, 0.0f, 0, 0},
490 { 0, 0, std::numeric_limits<float>::quiet_NaN(), 0, 0}, 490 { 0, 0, std::numeric_limits<float>::quiet_NaN(), 0, 0},
491 { 100, 0, 360.0f, 100, 0} 491 { 100, 0, 360.0f, 100, 0}
492 }; 492 };
493 493
494 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(set_rotate_cases); ++i) { 494 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(set_rotate_cases); ++i) {
495 const SetRotateCase& value = set_rotate_cases[i]; 495 const SetRotateCase& value = set_rotate_cases[i];
496 for (int j = 1; j >= -1; --j) { 496 for (int j = 1; j >= -1; --j) {
497 float epsilon = 0.1f; 497 float epsilon = 0.1f;
498 gfx::Point pt(value.x, value.y); 498 gfx::Point pt(value.x, value.y);
499 ui::Transform xform; 499 gfx::Transform xform;
500 // should be invariant to small floating point errors. 500 // should be invariant to small floating point errors.
501 xform.SetRotate(value.degree + j * epsilon); 501 xform.SetRotate(value.degree + j * epsilon);
502 // just want to make sure that we don't crash in the case of NaN. 502 // just want to make sure that we don't crash in the case of NaN.
503 if (value.degree == value.degree) { 503 if (value.degree == value.degree) {
504 xform.TransformPoint(pt); 504 xform.TransformPoint(pt);
505 EXPECT_EQ(value.xprime, pt.x()); 505 EXPECT_EQ(value.xprime, pt.x());
506 EXPECT_EQ(value.yprime, pt.y()); 506 EXPECT_EQ(value.yprime, pt.y());
507 xform.TransformPointReverse(pt); 507 xform.TransformPointReverse(pt);
508 EXPECT_EQ(pt.x(), value.x); 508 EXPECT_EQ(pt.x(), value.x);
509 EXPECT_EQ(pt.y(), value.y); 509 EXPECT_EQ(pt.y(), value.y);
510 } 510 }
511 } 511 }
512 } 512 }
513 } 513 }
514 514
515 } // namespace 515 } // namespace
OLDNEW
« no previous file with comments | « ui/gfx/transform.cc ('k') | ui/gfx/transform_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698