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

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

Issue 7262024: Interpolated transforms (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Added more NaN checks and comments. Created 9 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/gfx/interpolated_transform.h"
6
7 #include "base/basictypes.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace {
11
12 const static float EPSILON = 1e-6;
13
14 bool ApproximatelyEqual(float lhs, float rhs) {
15 if (lhs == 0)
16 return fabs(rhs) < EPSILON;
17 if (rhs == 0)
18 return fabs(lhs) < EPSILON;
19 return fabs(lhs - rhs) / std::max(fabs(rhs), fabs(lhs)) < EPSILON;
20 }
21
22 bool ApproximatelyEqual(const ui::Transform& lhs, const ui::Transform& rhs) {
23 for (int i = 0; i < 9; ++i) {
24 if (!ApproximatelyEqual(lhs.matrix()[i], rhs.matrix()[i]))
25 return false;
26 }
27 return true;
28 }
29
30 } // namespace
31
32 TEST(InterpolatedTransformTest, InterpolatedRotation) {
33 ui::InterpolatedRotation interpolated_rotation(0, 100);
34 ui::InterpolatedRotation interpolated_rotation_diff_start_end(
35 0, 100, 100, 200);
sky 2011/06/28 15:39:14 nit: indent 4.
36
37 for (int i = 0; i <= 100; ++i) {
38 ui::Transform rotation;
39 rotation.SetRotate(i);
40 ui::Transform interpolated = interpolated_rotation.Interpolate(i / 100.0f);
41 EXPECT_TRUE(ApproximatelyEqual(rotation, interpolated));
42 interpolated = interpolated_rotation_diff_start_end.Interpolate(i + 100);
43 EXPECT_TRUE(ApproximatelyEqual(rotation, interpolated));
44 }
45 }
46
47 TEST(InterpolatedTransformTest, InterpolatedScale) {
48 ui::InterpolatedScale interpolated_scale(0, 100);
49 ui::InterpolatedScale interpolated_scale_diff_start_end(
50 0, 100, 100, 200);
sky 2011/06/28 15:39:14 nit: indent 4.
51
52 for (int i = 0; i <= 100; ++i) {
53 ui::Transform scale;
54 scale.SetScale(i, i);
55 ui::Transform interpolated = interpolated_scale.Interpolate(i / 100.0f);
56 EXPECT_TRUE(ApproximatelyEqual(scale, interpolated));
57 interpolated = interpolated_scale_diff_start_end.Interpolate(i + 100);
58 EXPECT_TRUE(ApproximatelyEqual(scale, interpolated));
59 }
60 }
61
62 TEST(InterpolatedTransformTest, InterpolatedTranslate) {
63 ui::InterpolatedTranslation interpolated_xform(gfx::Point(0, 0),
64 gfx::Point(100, 100));
65
66 ui::InterpolatedTranslation interpolated_xform_diff_start_end(
67 gfx::Point(0, 0), gfx::Point(100, 100), 100, 200);
sky 2011/06/28 15:39:14 nit: indent 4.
68
69 for (int i = 0; i <= 100; ++i) {
70 ui::Transform xform;
71 xform.SetTranslate(i, i);
72 ui::Transform interpolated = interpolated_xform.Interpolate(i / 100.0f);
73 EXPECT_TRUE(ApproximatelyEqual(xform, interpolated));
74 interpolated = interpolated_xform_diff_start_end.Interpolate(i + 100);
75 EXPECT_TRUE(ApproximatelyEqual(xform, interpolated));
76 }
77 }
78
79 TEST(InterpolatedTransformTest, InterpolatedRotationAboutPivot) {
80 gfx::Point pivot(100, 100);
81 gfx::Point above_pivot(100, 200);
82 ui::InterpolatedRotation rot(0, 90);
83 ui::InterpolatedTransformAboutPivot interpolated_xform(
84 pivot,
sky 2011/06/28 15:39:14 nit: indent 4.
85 new ui::InterpolatedRotation(0, 90));
86 ui::Transform result = interpolated_xform.Interpolate(0.0f);
87 EXPECT_TRUE(ApproximatelyEqual(ui::Transform(), result));
88 result = interpolated_xform.Interpolate(1.0f);
89 gfx::Point expected_result = pivot;
90 EXPECT_TRUE(result.TransformPoint(&pivot));
91 EXPECT_EQ(expected_result, pivot);
92 expected_result = gfx::Point(0, 100);
93 EXPECT_TRUE(result.TransformPoint(&above_pivot));
94 EXPECT_EQ(expected_result, above_pivot);
95 }
96
97 TEST(InterpolatedTransformTest, InterpolatedScaleAboutPivot) {
98 gfx::Point pivot(100, 100);
99 gfx::Point above_pivot(100, 200);
100 ui::InterpolatedTransformAboutPivot interpolated_xform(
101 pivot,
sky 2011/06/28 15:39:14 nit: indent 4.
102 new ui::InterpolatedScale(1, 2));
103 ui::Transform result = interpolated_xform.Interpolate(0.0f);
104 EXPECT_TRUE(ApproximatelyEqual(ui::Transform(), result));
105 result = interpolated_xform.Interpolate(1.0f);
106 gfx::Point expected_result = pivot;
107 EXPECT_TRUE(result.TransformPoint(&pivot));
108 EXPECT_EQ(expected_result, pivot);
109 expected_result = gfx::Point(100, 300);
110 EXPECT_TRUE(result.TransformPoint(&above_pivot));
111 EXPECT_EQ(expected_result, above_pivot);
112 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698