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

Side by Side Diff: Source/core/animation/InterpolableValueTest.cpp

Issue 1215563002: Implement left property animation on InvalidatableStyleInterpolation (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Make Windows not crash Created 5 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
« no previous file with comments | « Source/core/animation/InterpolableValue.cpp ('k') | Source/core/animation/InterpolationType.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "config.h" 5 #include "config.h"
6 #include "core/animation/InterpolableValue.h" 6 #include "core/animation/InterpolableValue.h"
7 7
8 #include "core/animation/Interpolation.h" 8 #include "core/animation/Interpolation.h"
9 #include "core/animation/PropertyHandle.h" 9 #include "core/animation/PropertyHandle.h"
10 10
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 return toInterpolableNumber(interpolationValue(*i.get()))->value(); 48 return toInterpolableNumber(interpolationValue(*i.get()))->value();
49 } 49 }
50 50
51 bool interpolateBools(bool a, bool b, double progress) 51 bool interpolateBools(bool a, bool b, double progress)
52 { 52 {
53 RefPtrWillBeRawPtr<Interpolation> i = SampleInterpolation::create(Interp olableBool::create(a), InterpolableBool::create(b)); 53 RefPtrWillBeRawPtr<Interpolation> i = SampleInterpolation::create(Interp olableBool::create(a), InterpolableBool::create(b));
54 i->interpolate(0, progress); 54 i->interpolate(0, progress);
55 return toInterpolableBool(interpolationValue(*i.get()))->value(); 55 return toInterpolableBool(interpolationValue(*i.get()))->value();
56 } 56 }
57 57
58 void scaleAndAdd(InterpolableValue& base, double scale, const InterpolableVa lue& add)
59 {
60 base.scaleAndAdd(scale, add);
61 }
62
58 PassRefPtrWillBeRawPtr<Interpolation> interpolateLists(PassOwnPtrWillBeRawPt r<InterpolableList> listA, PassOwnPtrWillBeRawPtr<InterpolableList> listB, doubl e progress) 63 PassRefPtrWillBeRawPtr<Interpolation> interpolateLists(PassOwnPtrWillBeRawPt r<InterpolableList> listA, PassOwnPtrWillBeRawPtr<InterpolableList> listB, doubl e progress)
59 { 64 {
60 RefPtrWillBeRawPtr<Interpolation> i = SampleInterpolation::create(listA, listB); 65 RefPtrWillBeRawPtr<Interpolation> i = SampleInterpolation::create(listA, listB);
61 i->interpolate(0, progress); 66 i->interpolate(0, progress);
62 return i; 67 return i;
63 } 68 }
64
65 double addNumbers(double a, double b)
66 {
67 OwnPtrWillBeRawPtr<InterpolableValue> numA = InterpolableNumber::create( a);
68 OwnPtrWillBeRawPtr<InterpolableValue> numB = InterpolableNumber::create( b);
69
70 OwnPtrWillBeRawPtr<InterpolableValue> resultNumber = InterpolableNumber: :create(0);
71
72 numA->add(*numB, *resultNumber);
73
74 return toInterpolableNumber(resultNumber.get())->value();
75 }
76
77 bool addBools(bool a, bool b)
78 {
79 OwnPtrWillBeRawPtr<InterpolableValue> boolA = InterpolableBool::create(a );
80 OwnPtrWillBeRawPtr<InterpolableValue> boolB = InterpolableBool::create(b );
81
82 OwnPtrWillBeRawPtr<InterpolableValue> resultBool = InterpolableBool::cre ate(false);
83
84 boolA->add(*boolB, *resultBool);
85
86 return toInterpolableBool(resultBool.get())->value();
87 }
88
89 PassOwnPtrWillBeRawPtr<InterpolableList> addLists(PassOwnPtrWillBeRawPtr<Int erpolableValue> listA, PassOwnPtrWillBeRawPtr<InterpolableValue> listB)
90 {
91 OwnPtrWillBeRawPtr<InterpolableList> result = InterpolableList::create(t oInterpolableList(*listA));
92
93 listA->add(*listB, *result);
94
95 return result.release();
96 }
97
98 double multiplyNumber(double scalar, double n)
99 {
100 OwnPtrWillBeRawPtr<InterpolableValue> num = InterpolableNumber::create(n );
101 OwnPtrWillBeRawPtr<InterpolableValue> result = InterpolableNumber::creat e(0);
102
103 num->multiply(scalar, *result);
104
105 return toInterpolableNumber(result.get())->value();
106 }
107
108 PassOwnPtrWillBeRawPtr<InterpolableList> multiplyList(double scalar, PassOwn PtrWillBeRawPtr<InterpolableValue> list)
109 {
110 OwnPtrWillBeRawPtr<InterpolableList> result = InterpolableList::create(t oInterpolableList(*list));
111
112 list->multiply(scalar, *result);
113
114 return result.release();
115 }
116 }; 69 };
117 70
118 TEST_F(AnimationInterpolableValueTest, InterpolateNumbers) 71 TEST_F(AnimationInterpolableValueTest, InterpolateNumbers)
119 { 72 {
120 EXPECT_FLOAT_EQ(126, interpolateNumbers(42, 0, -2)); 73 EXPECT_FLOAT_EQ(126, interpolateNumbers(42, 0, -2));
121 EXPECT_FLOAT_EQ(42, interpolateNumbers(42, 0, 0)); 74 EXPECT_FLOAT_EQ(42, interpolateNumbers(42, 0, 0));
122 EXPECT_FLOAT_EQ(29.4f, interpolateNumbers(42, 0, 0.3)); 75 EXPECT_FLOAT_EQ(29.4f, interpolateNumbers(42, 0, 0.3));
123 EXPECT_FLOAT_EQ(21, interpolateNumbers(42, 0, 0.5)); 76 EXPECT_FLOAT_EQ(21, interpolateNumbers(42, 0, 0.5));
124 EXPECT_FLOAT_EQ(0, interpolateNumbers(42, 0, 1)); 77 EXPECT_FLOAT_EQ(0, interpolateNumbers(42, 0, 1));
125 EXPECT_FLOAT_EQ(-21, interpolateNumbers(42, 0, 1.5)); 78 EXPECT_FLOAT_EQ(-21, interpolateNumbers(42, 0, 1.5));
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 listB->set(1, subListB.release()); 123 listB->set(1, subListB.release());
171 listB->set(2, InterpolableBool::create(true)); 124 listB->set(2, InterpolableBool::create(true));
172 125
173 RefPtrWillBeRawPtr<Interpolation> i = interpolateLists(listA.release(), list B.release(), 0.5); 126 RefPtrWillBeRawPtr<Interpolation> i = interpolateLists(listA.release(), list B.release(), 0.5);
174 InterpolableList* outList = toInterpolableList(interpolationValue(*i.get())) ; 127 InterpolableList* outList = toInterpolableList(interpolationValue(*i.get())) ;
175 EXPECT_FLOAT_EQ(50, toInterpolableNumber(outList->get(0))->value()); 128 EXPECT_FLOAT_EQ(50, toInterpolableNumber(outList->get(0))->value());
176 EXPECT_FLOAT_EQ(75, toInterpolableNumber(toInterpolableList(outList->get(1)) ->get(0))->value()); 129 EXPECT_FLOAT_EQ(75, toInterpolableNumber(toInterpolableList(outList->get(1)) ->get(0))->value());
177 EXPECT_TRUE(toInterpolableBool(outList->get(2))->value()); 130 EXPECT_TRUE(toInterpolableBool(outList->get(2))->value());
178 } 131 }
179 132
180 TEST_F(AnimationInterpolableValueTest, AddNumbers) 133 TEST_F(AnimationInterpolableValueTest, ScaleAndAddNumbers)
181 { 134 {
182 EXPECT_FLOAT_EQ(42, addNumbers(20, 22)); 135 OwnPtrWillBeRawPtr<InterpolableNumber> base = InterpolableNumber::create(10) ;
183 EXPECT_FLOAT_EQ(42, addNumbers(22, 20)); 136 scaleAndAdd(*base, 2, *InterpolableNumber::create(1));
184 EXPECT_FLOAT_EQ(50, addNumbers(0, 50)); 137 EXPECT_FLOAT_EQ(21, base->value());
185 EXPECT_FLOAT_EQ(50, addNumbers(50, 0)); 138
186 EXPECT_FLOAT_EQ(32, addNumbers(42, -10)); 139 base = InterpolableNumber::create(10);
187 EXPECT_FLOAT_EQ(32, addNumbers(-10, 42)); 140 scaleAndAdd(*base, 0, *InterpolableNumber::create(5));
188 EXPECT_FLOAT_EQ(-32, addNumbers(-42, 10)); 141 EXPECT_FLOAT_EQ(5, base->value());
189 EXPECT_FLOAT_EQ(-32, addNumbers(10, -42)); 142
143 base = InterpolableNumber::create(10);
144 scaleAndAdd(*base, -1, *InterpolableNumber::create(8));
145 EXPECT_FLOAT_EQ(-2, base->value());
190 } 146 }
191 147
192 TEST_F(AnimationInterpolableValueTest, AddBools) 148 TEST_F(AnimationInterpolableValueTest, ScaleAndAddLists)
193 { 149 {
194 EXPECT_FALSE(addBools(false, false)); 150 OwnPtrWillBeRawPtr<InterpolableList> baseList = InterpolableList::create(3);
195 EXPECT_TRUE(addBools(true, false)); 151 baseList->set(0, InterpolableNumber::create(5));
196 EXPECT_TRUE(addBools(false, true)); 152 baseList->set(1, InterpolableNumber::create(10));
197 EXPECT_TRUE(addBools(true, true)); 153 baseList->set(2, InterpolableNumber::create(15));
198 } 154 OwnPtrWillBeRawPtr<InterpolableList> addList = InterpolableList::create(3);
199 155 addList->set(0, InterpolableNumber::create(1));
200 TEST_F(AnimationInterpolableValueTest, AddLists) 156 addList->set(1, InterpolableNumber::create(2));
201 { 157 addList->set(2, InterpolableNumber::create(3));
202 OwnPtrWillBeRawPtr<InterpolableList> listA = InterpolableList::create(3); 158 scaleAndAdd(*baseList, 2, *addList);
203 listA->set(0, InterpolableNumber::create(31)); 159 EXPECT_FLOAT_EQ(11, toInterpolableNumber(baseList->get(0))->value());
204 listA->set(1, InterpolableNumber::create(-20)); 160 EXPECT_FLOAT_EQ(22, toInterpolableNumber(baseList->get(1))->value());
205 listA->set(2, InterpolableNumber::create(42)); 161 EXPECT_FLOAT_EQ(33, toInterpolableNumber(baseList->get(2))->value());
206
207 OwnPtrWillBeRawPtr<InterpolableList> listB = InterpolableList::create(3);
208 listB->set(0, InterpolableNumber::create(20));
209 listB->set(1, InterpolableNumber::create(43));
210 listB->set(2, InterpolableNumber::create(-60));
211
212 OwnPtrWillBeRawPtr<InterpolableList> result = addLists(listA.release(), list B.release());
213 EXPECT_FLOAT_EQ(51, toInterpolableNumber(result->get(0))->value());
214 EXPECT_FLOAT_EQ(23, toInterpolableNumber(result->get(1))->value());
215 EXPECT_FLOAT_EQ(-18, toInterpolableNumber(result->get(2))->value());
216 }
217
218 TEST_F(AnimationInterpolableValueTest, AddNestedLists)
219 {
220 OwnPtrWillBeRawPtr<InterpolableList> listA = InterpolableList::create(3);
221 listA->set(0, InterpolableNumber::create(19));
222 OwnPtrWillBeRawPtr<InterpolableList> subListA = InterpolableList::create(1);
223 subListA->set(0, InterpolableNumber::create(67));
224 listA->set(1, subListA.release());
225 listA->set(2, InterpolableBool::create(false));
226
227 OwnPtrWillBeRawPtr<InterpolableList> listB = InterpolableList::create(3);
228 listB->set(0, InterpolableNumber::create(21));
229 OwnPtrWillBeRawPtr<InterpolableList> subListB = InterpolableList::create(1);
230 subListB->set(0, InterpolableNumber::create(31));
231 listB->set(1, subListB.release());
232 listB->set(2, InterpolableBool::create(true));
233
234 OwnPtrWillBeRawPtr<InterpolableList> result = addLists(listA.release(), list B.release());
235 EXPECT_FLOAT_EQ(40, toInterpolableNumber(result->get(0))->value());
236 EXPECT_FLOAT_EQ(98, toInterpolableNumber(toInterpolableList(result->get(1))- >get(0))->value());
237 EXPECT_TRUE(toInterpolableBool(result->get(2))->value());
238 }
239
240 TEST_F(AnimationInterpolableValueTest, NumberScalarMultiplication)
241 {
242 EXPECT_FLOAT_EQ(42, multiplyNumber(6, 7));
243 EXPECT_FLOAT_EQ(-20, multiplyNumber(-2, 10));
244 EXPECT_FLOAT_EQ(-42, multiplyNumber(21, -2));
245 EXPECT_FLOAT_EQ(20, multiplyNumber(-4, -5));
246
247 EXPECT_FLOAT_EQ(0, multiplyNumber(0, 10));
248 EXPECT_FLOAT_EQ(0, multiplyNumber(10, 0));
249 }
250
251 TEST_F(AnimationInterpolableValueTest, ListScalarMultiplication)
252 {
253 OwnPtrWillBeRawPtr<InterpolableList> listA = InterpolableList::create(3);
254 listA->set(0, InterpolableNumber::create(5));
255 OwnPtrWillBeRawPtr<InterpolableList> subListA = InterpolableList::create(2);
256 subListA->set(0, InterpolableNumber::create(4));
257 subListA->set(1, InterpolableNumber::create(7));
258 listA->set(1, subListA.release());
259 listA->set(2, InterpolableNumber::create(3));
260
261 OwnPtrWillBeRawPtr<InterpolableList> resultA = multiplyList(6, listA.release ());
262 EXPECT_FLOAT_EQ(30, toInterpolableNumber(resultA->get(0))->value());
263 EXPECT_FLOAT_EQ(24, toInterpolableNumber(toInterpolableList(resultA->get(1)) ->get(0))->value());
264 EXPECT_FLOAT_EQ(42, toInterpolableNumber(toInterpolableList(resultA->get(1)) ->get(1))->value());
265 EXPECT_FLOAT_EQ(18, toInterpolableNumber(resultA->get(2))->value());
266
267 OwnPtrWillBeRawPtr<InterpolableList> listB = InterpolableList::create(3);
268 listB->set(0, InterpolableNumber::create(8));
269 listB->set(1, InterpolableNumber::create(-10));
270 listB->set(2, InterpolableNumber::create(9));
271
272 OwnPtrWillBeRawPtr<InterpolableList> resultB = multiplyList(0, listB.release ());
273 EXPECT_FLOAT_EQ(0, toInterpolableNumber(resultB->get(0))->value());
274 EXPECT_FLOAT_EQ(0, toInterpolableNumber(resultB->get(1))->value());
275 EXPECT_FLOAT_EQ(0, toInterpolableNumber(resultB->get(2))->value());
276 } 162 }
277 163
278 } 164 }
OLDNEW
« no previous file with comments | « Source/core/animation/InterpolableValue.cpp ('k') | Source/core/animation/InterpolationType.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698