animation_unittest.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/animation_test_common.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using base::TimeDelta;
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)static base::TimeTicks TicksFromSecondsF(double seconds) {
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return base::TimeTicks::FromInternalValue(seconds *
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                            base::Time::kMicrosecondsPerSecond);
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)scoped_ptr<Animation> CreateAnimation(double iterations,
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                      double duration,
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                      double playback_rate) {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> to_return(Animation::Create(
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      make_scoped_ptr(
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          new FakeFloatAnimationCurve(duration)).PassAs<AnimationCurve>(),
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      0,
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      1,
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Animation::Opacity));
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  to_return->set_iterations(iterations);
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  to_return->set_playback_rate(playback_rate);
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return to_return.Pass();
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)scoped_ptr<Animation> CreateAnimation(double iterations, double duration) {
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return CreateAnimation(iterations, duration, 1);
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)scoped_ptr<Animation> CreateAnimation(double iterations) {
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return CreateAnimation(iterations, 1, 1);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeZeroIterations) {
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(0));
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeOneIteration) {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(AnimationTest, TrimTimeOneHalfIteration) {
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1.5));
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.9, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.9)));
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeInfiniteIterations) {
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(-1));
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeReverse) {
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(-1));
79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::Reverse);
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateInfiniteIterations) {
89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(-1));
90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::Alternate);
91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateOneIteration) {
100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::Alternate);
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoIterations) {
111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(2));
112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::Alternate);
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoHalfIterations) {
1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(2.5));
1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  anim->set_direction(Animation::Alternate);
1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.50)));
1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)));
1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateReverseInfiniteIterations) {
141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(-1));
142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::AlternateReverse);
143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateReverseOneIteration) {
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::AlternateReverse);
154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateReverseTwoIterations) {
163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(2));
164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::AlternateReverse);
165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeStartTime) {
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_start_time(TicksFromSecondsF(4));
179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)));
183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)));
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeStartTimeReverse) {
187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_start_time(TicksFromSecondsF(4));
189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::Reverse);
190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)));
194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)));
195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeTimeOffset) {
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_time_offset(TimeDelta::FromMilliseconds(4000));
200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_start_time(TicksFromSecondsF(4));
201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeTimeOffsetReverse) {
208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_time_offset(TimeDelta::FromMilliseconds(4000));
210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_start_time(TicksFromSecondsF(4));
211010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::Reverse);
212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST(AnimationTest, TrimTimeNegativeTimeOffset) {
219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_time_offset(TimeDelta::FromMilliseconds(-4000));
221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)));
226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
228010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeNegativeTimeOffsetReverse) {
229010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_time_offset(TimeDelta::FromMilliseconds(-4000));
231010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::Reverse);
232010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)));
237010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimePauseResume) {
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.5));
245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(1024.0));
247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)));
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
251010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimePauseResumeReverse) {
252010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
253010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::Reverse);
254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.25));
258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(1024.0));
260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.75)));
262010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
263010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeSuspendResume) {
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->Suspend(TicksFromSecondsF(0.5));
270cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->Resume(TicksFromSecondsF(1024));
272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)));
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
276010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST(AnimationTest, TrimTimeSuspendResumeReverse) {
277010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
278010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  anim->set_direction(Animation::Reverse);
279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->Suspend(TicksFromSecondsF(0.75));
283cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->Resume(TicksFromSecondsF(1024));
285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)));
286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.25)));
287010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
288010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, TrimTimeZeroDuration) {
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(0, 0));
291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
29758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(AnimationTest, TrimTimeStarting) {
29858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 5.0));
299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Starting, TicksFromSecondsF(0.0));
300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_time_offset(TimeDelta::FromMilliseconds(2000));
304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_start_time(TicksFromSecondsF(1.0));
308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
31258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
31358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
31458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST(AnimationTest, TrimTimeNeedsSynchronizedStartTime) {
31558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 5.0));
316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
31758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  anim->set_needs_synchronized_start_time(true);
318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_time_offset(TimeDelta::FromMilliseconds(2000));
322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_start_time(TicksFromSecondsF(1.0));
32658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  anim->set_needs_synchronized_start_time(false);
327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
33058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
33158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedAtZeroIterations) {
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(0));
334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0)));
336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedAtOneIteration) {
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0)));
344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0)));
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedAtInfiniteIterations) {
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(-1));
351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5)));
354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.5)));
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST(AnimationTest, IsFinishedNegativeTimeOffset) {
359a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_time_offset(TimeDelta::FromMilliseconds(-500));
361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
362a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
363cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0)));
364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.5)));
366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.5)));
368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.0)));
369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(2.5)));
370a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST(AnimationTest, IsFinishedPositiveTimeOffset) {
373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->set_time_offset(TimeDelta::FromMilliseconds(500));
375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
376a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(-1.0)));
378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.5)));
380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(1.0)));
381a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
382a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedAtNotRunning) {
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(0));
385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.0));
388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::WaitingForTargetAvailability,
390cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                    TicksFromSecondsF(0.0));
391cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
392cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Finished, TicksFromSecondsF(0.0));
393cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
394cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Aborted, TicksFromSecondsF(0.0));
395cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(anim->IsFinishedAt(TicksFromSecondsF(0.0)));
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinished) {
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
400cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(anim->is_finished());
402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.0));
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(anim->is_finished());
404cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::WaitingForTargetAvailability,
405cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                    TicksFromSecondsF(0.0));
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(anim->is_finished());
407cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Finished, TicksFromSecondsF(0.0));
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(anim->is_finished());
409cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Aborted, TicksFromSecondsF(0.0));
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(anim->is_finished());
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, IsFinishedNeedsSynchronizedStartTime) {
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(2.0));
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(anim->is_finished());
417cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Paused, TicksFromSecondsF(2.0));
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(anim->is_finished());
419cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::WaitingForTargetAvailability,
420cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                    TicksFromSecondsF(2.0));
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(anim->is_finished());
422cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Finished, TicksFromSecondsF(0.0));
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(anim->is_finished());
424cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Aborted, TicksFromSecondsF(0.0));
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(anim->is_finished());
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AnimationTest, RunStateChangesIgnoredWhileSuspended) {
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1));
430cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->Suspend(TicksFromSecondsF(0));
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(Animation::Paused, anim->run_state());
432cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(Animation::Paused, anim->run_state());
434cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->Resume(TicksFromSecondsF(0));
435cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0));
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(Animation::Running, anim->run_state());
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
43903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackNormal) {
44003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 1, 1));
44103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
44203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
44303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
44403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
44503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
44603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
44703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
44803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackSlow) {
44903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 1, 0.5));
45003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
45103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
45203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
45303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
45403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
45503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
45603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
45703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
45803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackFast) {
45903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 4, 2));
46003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
46103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
46203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
46303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
46403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
46503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
46603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
46703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
46803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
46903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackNormalReverse) {
47003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 2, -1));
47103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
47203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
47303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
47403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
47503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
47603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
47703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
47803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
47903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
48003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackSlowReverse) {
48103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 2, -0.5));
48203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
48303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
48403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
48503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
48603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
48703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
48803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
48903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3)));
49003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
49103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4)));
49203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
49303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
49403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
49503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackFastReverse) {
49603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 2, -2));
49703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
49803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)));
49903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
50003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
50103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
50203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
50303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
50403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
50503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
50603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackFastInfiniteIterations) {
50703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(-1, 4, 4));
50803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
50903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
51003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
51103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
51203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.0)));
51303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.5)));
51403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
51503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
51603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackNormalDoubleReverse) {
51703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1));
51803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  anim->set_direction(Animation::Reverse);
51903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
52003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
52103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
52203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
52303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
52403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
52503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
52603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimePlaybackFastDoubleReverse) {
52703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(1, 4, -2));
52803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  anim->set_direction(Animation::Reverse);
52903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
53003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
53103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
53203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
53303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
53403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
53503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
53603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
53703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
53803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFast) {
53903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2));
54003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  anim->set_direction(Animation::Alternate);
54103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
54203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
54303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
54403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
54503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
54603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
54703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
54803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
54903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
55003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
55103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
55203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
55303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastReverse) {
55403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2));
55503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  anim->set_direction(Animation::AlternateReverse);
55603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)));
55703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
55803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
55903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
56003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
56103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
56203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
56303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
56403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
56503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
56603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
56703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
56803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
56903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastDoubleReverse) {
57003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<Animation> anim(CreateAnimation(2, 2, -2));
57103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  anim->set_direction(Animation::AlternateReverse);
5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
5761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
5771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest,
5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     TrimTimeAlternateReverseThreeIterationsPlaybackFastAlternateReverse) {
5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<Animation> anim(CreateAnimation(3, 2, -2));
5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_direction(Animation::AlternateReverse);
58803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
58903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)));
59003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
59103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)));
59203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
59303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)));
59403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
59503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)));
59603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)));
5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)));
6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.25)));
6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest,
6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     TrimTimeAlternateReverseTwoIterationsPlaybackNormalAlternate) {
6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<Animation> anim(CreateAnimation(2, 2, -1));
6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_direction(Animation::Alternate);
6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)));
6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)));
6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, TrimTimeIterationStart) {
6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1));
6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_iteration_start(0.5);
6231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, TrimTimeIterationStartAlternate) {
6321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1));
6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_direction(Animation::Alternate);
6341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_iteration_start(0.3);
6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
6361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.8, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.7)));
6381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.7, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
6391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.2)));
6401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.7)));
6411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, TrimTimeIterationStartAlternateThreeIterations) {
6441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<Animation> anim(CreateAnimation(3, 1, 1));
6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_direction(Animation::Alternate);
6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_iteration_start(1);
6471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)));
6491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)));
6511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
6521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)));
6531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
6541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
6551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest,
6581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     TrimTimeIterationStartAlternateThreeIterationsPlaybackReverse) {
6591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<Animation> anim(CreateAnimation(3, 1, -1));
6601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_direction(Animation::Alternate);
6611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_iteration_start(1);
6621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)));
6631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)));
6641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)));
6651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)));
6661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)));
6671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, InEffectFillMode) {
6701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<Animation> anim(CreateAnimation(1));
6711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_fill_mode(Animation::FillModeNone);
6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
6751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_fill_mode(Animation::FillModeForwards);
6771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
6781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
6791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
6801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_fill_mode(Animation::FillModeBackwards);
6821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
6831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
6841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
6851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_fill_mode(Animation::FillModeBoth);
6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
6881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
6901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(AnimationTest, InEffectFillModePlayback) {
6931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1));
6941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_fill_mode(Animation::FillModeNone);
6951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
6961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
6971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
6981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_fill_mode(Animation::FillModeForwards);
7001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(anim->InEffect(TicksFromSecondsF(-1.0)));
7011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
7021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
7031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
7041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_fill_mode(Animation::FillModeBackwards);
7051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
7061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
7071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
7081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
7091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  anim->set_fill_mode(Animation::FillModeBoth);
7101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(-1.0)));
7111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(0.0)));
7121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(anim->InEffect(TicksFromSecondsF(1.0)));
71303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
71403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
717