Chromium Code Reviews| Index: cc/animation/keyframed_animation_curve_unittest.cc |
| diff --git a/cc/animation/keyframed_animation_curve_unittest.cc b/cc/animation/keyframed_animation_curve_unittest.cc |
| index 314ce9da2fdb765d49fee9bd61f57814236b14a3..ec8ce6dc029703e4ec7914603d87ce36f4c69688 100644 |
| --- a/cc/animation/keyframed_animation_curve_unittest.cc |
| +++ b/cc/animation/keyframed_animation_curve_unittest.cc |
| @@ -440,6 +440,101 @@ TEST(KeyframedAnimationCurveTest, CubicBezierTimingFunction) { |
| EXPECT_FLOAT_EQ(1.f, curve->GetValue(base::TimeDelta::FromSecondsD(1.f))); |
| } |
| +// Tests that a steps timing function works as expected. |
|
ajuma
2014/12/17 16:32:55
Please add a few words so that it explains how thi
|
| +TEST(KeyframedAnimationCurveTest, StepsTimingFunction_StepAtStart) { |
|
ajuma
2014/12/17 16:32:55
Style nit: no underscore in the test name. (Same f
|
| + scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| + KeyframedFloatAnimationCurve::Create()); |
| + const int num_steps = 36; |
| + const float steps_start_offset = 1.0f; |
| + curve->AddKeyframe(FloatKeyframe::Create( |
| + base::TimeDelta(), 0.f, |
| + StepsTimingFunction::Create(num_steps, steps_start_offset))); |
| + curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), |
| + num_steps, nullptr)); |
| + |
| + const float time_threshold = 0.0001f; |
| + |
| + for (float i = 0; i < num_steps; i += 1.0f) { |
|
ajuma
2014/12/17 16:32:56
0.f
loyso (OOO)
2014/12/18 01:53:05
Do we have a rationale behind it (any references t
ajuma
2014/12/18 02:15:41
Not sure if it's documented anywhere, but this is
loyso (OOO)
2014/12/18 03:17:30
Ok, I'll make it consistent to cc/ folder. Overall
|
| + const base::TimeDelta time1 = |
| + base::TimeDelta::FromSecondsD(i / num_steps - time_threshold); |
| + const base::TimeDelta time2 = |
| + base::TimeDelta::FromSecondsD(i / num_steps + time_threshold); |
| + EXPECT_FLOAT_EQ(ceil(i), curve->GetValue(time1)); |
| + EXPECT_FLOAT_EQ(ceil(i) + 1, curve->GetValue(time2)); |
|
ajuma
2014/12/17 16:32:56
1.f
|
| + } |
| + EXPECT_FLOAT_EQ(num_steps, |
| + curve->GetValue(base::TimeDelta::FromSecondsD(1.0f))); |
| + |
| + for (float i = 0.5f; i <= num_steps; i += 1.0f) { |
| + const base::TimeDelta time = base::TimeDelta::FromSecondsD(i / num_steps); |
| + EXPECT_FLOAT_EQ(ceil(i), curve->GetValue(time)); |
| + } |
| +} |
| + |
| +// Tests that a steps timing function works as expected. |
| +TEST(KeyframedAnimationCurveTest, StepsTimingFunction_StepAtMiddle) { |
| + scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| + KeyframedFloatAnimationCurve::Create()); |
| + const int num_steps = 36; |
| + const float steps_start_offset = 0.5f; |
| + curve->AddKeyframe(FloatKeyframe::Create( |
| + base::TimeDelta(), 0.f, |
| + StepsTimingFunction::Create(num_steps, steps_start_offset))); |
| + curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), |
| + num_steps, nullptr)); |
| + |
| + const float time_threshold = 0.0001f; |
| + |
| + EXPECT_FLOAT_EQ(0, curve->GetValue(base::TimeDelta())); |
|
ajuma
2014/12/17 16:32:55
0.f
|
| + for (float i = 0.5f; i < num_steps; i += 1.0f) { |
| + const base::TimeDelta time1 = |
| + base::TimeDelta::FromSecondsD(i / num_steps - time_threshold); |
| + const base::TimeDelta time2 = |
| + base::TimeDelta::FromSecondsD(i / num_steps + time_threshold); |
| + EXPECT_FLOAT_EQ(floor(i), curve->GetValue(time1)); |
| + EXPECT_FLOAT_EQ(floor(i) + 1.0f, curve->GetValue(time2)); |
| + } |
| + EXPECT_FLOAT_EQ(num_steps, |
| + curve->GetValue(base::TimeDelta::FromSecondsD(1.0f))); |
| + |
| + for (float i = 0.25f; i <= num_steps; i += 1.0f) { |
| + const base::TimeDelta time = base::TimeDelta::FromSecondsD(i / num_steps); |
| + EXPECT_FLOAT_EQ(floor(i), curve->GetValue(time)); |
| + } |
| +} |
| + |
| +// Tests that a steps timing function works as expected. |
| +TEST(KeyframedAnimationCurveTest, StepsTimingFunction_StepAtEnd) { |
| + scoped_ptr<KeyframedFloatAnimationCurve> curve( |
| + KeyframedFloatAnimationCurve::Create()); |
| + const int num_steps = 36; |
| + const float steps_start_offset = 0.0f; |
| + curve->AddKeyframe(FloatKeyframe::Create( |
| + base::TimeDelta(), 0.f, |
| + StepsTimingFunction::Create(num_steps, steps_start_offset))); |
| + curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), |
| + num_steps, nullptr)); |
| + |
| + const float time_threshold = 0.0001f; |
| + |
| + EXPECT_FLOAT_EQ(0, curve->GetValue(base::TimeDelta())); |
|
ajuma
2014/12/17 16:32:55
0.f
|
| + for (float i = 1; i <= num_steps; i += 1.0f) { |
|
ajuma
2014/12/17 16:32:56
1.f
|
| + const base::TimeDelta time1 = |
| + base::TimeDelta::FromSecondsD(i / num_steps - time_threshold); |
| + const base::TimeDelta time2 = |
| + base::TimeDelta::FromSecondsD(i / num_steps + time_threshold); |
| + EXPECT_FLOAT_EQ(floor(i) - 1, curve->GetValue(time1)); |
|
ajuma
2014/12/17 16:32:55
1.f
|
| + EXPECT_FLOAT_EQ(floor(i), curve->GetValue(time2)); |
| + } |
| + EXPECT_FLOAT_EQ(num_steps, |
| + curve->GetValue(base::TimeDelta::FromSecondsD(1.0f))); |
| + |
| + for (float i = 0.5f; i <= num_steps; i += 1.0f) { |
| + const base::TimeDelta time = base::TimeDelta::FromSecondsD(i / num_steps); |
| + EXPECT_FLOAT_EQ(floor(i), curve->GetValue(time)); |
| + } |
| +} |
| + |
| // Tests that animated bounds are computed as expected. |
| TEST(KeyframedAnimationCurveTest, AnimatedBounds) { |
| scoped_ptr<KeyframedTransformAnimationCurve> curve( |