193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)/* 293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * Copyright (c) 2013, Google Inc. All rights reserved. 393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * modification, are permitted provided that the following conditions are 693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * met: 793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 1093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 1193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 1293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * in the documentation and/or other materials provided with the 1393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * distribution. 1493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 1593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 1693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * this software without specific prior written permission. 1793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 1893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 3093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "config.h" 32d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "core/animation/TimingCalculations.h" 3393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include <gtest/gtest.h> 3593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)using namespace blink; 3793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)namespace { 3993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 40d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)TEST(AnimationTimingCalculationsTest, ActiveTime) 4193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 4293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) Timing timing; 4393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // calculateActiveTime(activeDuration, fillMode, localTime, parentPhase, phase, timing) 4593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 4683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch // Before Phase 4793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.startDelay = 10; 48d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_TRUE(isNull(calculateActiveTime(20, Timing::FillModeForwards, 0, AnimationNode::PhaseActive, AnimationNode::PhaseBefore, timing))); 49d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_TRUE(isNull(calculateActiveTime(20, Timing::FillModeNone, 0, AnimationNode::PhaseActive, AnimationNode::PhaseBefore, timing))); 50d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(0, calculateActiveTime(20, Timing::FillModeBackwards, 0, AnimationNode::PhaseActive, AnimationNode::PhaseBefore, timing)); 51d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(0, calculateActiveTime(20, Timing::FillModeBoth, 0, AnimationNode::PhaseActive, AnimationNode::PhaseBefore, timing)); 5293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 5383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch // Active Phase 5493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.startDelay = 10; 5583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch // Active, and parent Before 56d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_TRUE(isNull(calculateActiveTime(20, Timing::FillModeNone, 15, AnimationNode::PhaseBefore, AnimationNode::PhaseActive, timing))); 57d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_TRUE(isNull(calculateActiveTime(20, Timing::FillModeForwards, 15, AnimationNode::PhaseBefore, AnimationNode::PhaseActive, timing))); 5883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch // Active, and parent After 59d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_TRUE(isNull(calculateActiveTime(20, Timing::FillModeNone, 15, AnimationNode::PhaseAfter, AnimationNode::PhaseActive, timing))); 60d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_TRUE(isNull(calculateActiveTime(20, Timing::FillModeBackwards, 15, AnimationNode::PhaseAfter, AnimationNode::PhaseActive, timing))); 6183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch // Active, and parent Active 62d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(5, calculateActiveTime(20, Timing::FillModeForwards, 15, AnimationNode::PhaseActive, AnimationNode::PhaseActive, timing)); 6383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 6483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch // After Phase 6593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.startDelay = 10; 66d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(21, calculateActiveTime(21, Timing::FillModeForwards, 45, AnimationNode::PhaseActive, AnimationNode::PhaseAfter, timing)); 67d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(21, calculateActiveTime(21, Timing::FillModeBoth, 45, AnimationNode::PhaseActive, AnimationNode::PhaseAfter, timing)); 68d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_TRUE(isNull(calculateActiveTime(21, Timing::FillModeBackwards, 45, AnimationNode::PhaseActive, AnimationNode::PhaseAfter, timing))); 69d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_TRUE(isNull(calculateActiveTime(21, Timing::FillModeNone, 45, AnimationNode::PhaseActive, AnimationNode::PhaseAfter, timing))); 7083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 7183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch // None 72d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_TRUE(isNull(calculateActiveTime(32, Timing::FillModeNone, nullValue(), AnimationNode::PhaseNone, AnimationNode::PhaseNone, timing))); 7393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 7493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 75d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)TEST(AnimationTimingCalculationsTest, ScaledActiveTime) 7693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 7793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) Timing timing; 7893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 79a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // calculateScaledActiveTime(activeDuration, activeTime, startOffset, timing) 8093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 8193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // if the active time is null 8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_TRUE(isNull(calculateScaledActiveTime(4, nullValue(), 5, timing))); 8393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 8493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // if the playback rate is negative 8593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.playbackRate = -1; 8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(35, calculateScaledActiveTime(40, 10, 5, timing)); 8793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 8893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // otherwise 8993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.playbackRate = 0; 9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(5, calculateScaledActiveTime(40, 10, 5, timing)); 9193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.playbackRate = 1; 9209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(15, calculateScaledActiveTime(40, 10, 5, timing)); 93a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 94a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // infinte activeTime 95a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) timing.playbackRate = 0; 9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(0, calculateScaledActiveTime(std::numeric_limits<double>::infinity(), std::numeric_limits<double>::infinity(), 0, timing)); 97a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) timing.playbackRate = 1; 9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(std::numeric_limits<double>::infinity(), calculateScaledActiveTime(std::numeric_limits<double>::infinity(), std::numeric_limits<double>::infinity(), 0, timing)); 9993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 10093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 101d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)TEST(AnimationTimingCalculationsTest, IterationTime) 10293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 10393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) Timing timing; 10493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 105a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // calculateIterationTime(iterationDuration, repeatedDuration, scaledActiveTime, startOffset, timing) 10693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 10793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // if the scaled active time is null 10809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_TRUE(isNull(calculateIterationTime(1, 1, nullValue(), 1, timing))); 10993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 11093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // if (complex-conditions)... 11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(12, calculateIterationTime(12, 12, 12, 0, timing)); 11293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 11393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // otherwise 11493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.iterationCount = 10; 11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(5, calculateIterationTime(10, 100, 25, 4, timing)); 11609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(7, calculateIterationTime(11, 110, 29, 1, timing)); 11793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.iterationStart = 1.1; 11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(8, calculateIterationTime(12, 120, 20, 7, timing)); 11993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 12093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 121d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)TEST(AnimationTimingCalculationsTest, CurrentIteration) 12293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 12393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) Timing timing; 12493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 125a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // calculateCurrentIteration(iterationDuration, iterationTime, scaledActiveTime, timing) 12693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 12793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // if the scaled active time is null 12809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_TRUE(isNull(calculateCurrentIteration(1, 1, nullValue(), timing))); 12993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 13093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // if the scaled active time is zero 13109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(0, calculateCurrentIteration(1, 1, 0, timing)); 13293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 13393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // if the iteration time equals the iteration duration 13493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.iterationStart = 4; 13593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.iterationCount = 7; 13609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(10, calculateCurrentIteration(5, 5, 9, timing)); 13793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 13893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // otherwise 13909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(3, calculateCurrentIteration(3.2, 3.1, 10, timing)); 14093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 14193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 142d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)TEST(AnimationTimingCalculationsTest, DirectedTime) 14393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 14493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) Timing timing; 14593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 146a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // calculateDirectedTime(currentIteration, iterationDuration, iterationTime, timing) 14793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 14893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // if the iteration time is null 14909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_TRUE(isNull(calculateDirectedTime(1, 2, nullValue(), timing))); 15093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 15193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // forwards 15209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(17, calculateDirectedTime(0, 20, 17, timing)); 15309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(17, calculateDirectedTime(1, 20, 17, timing)); 15493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.direction = Timing::PlaybackDirectionAlternate; 15509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(17, calculateDirectedTime(0, 20, 17, timing)); 15609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(17, calculateDirectedTime(2, 20, 17, timing)); 15793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.direction = Timing::PlaybackDirectionAlternateReverse; 15809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(17, calculateDirectedTime(1, 20, 17, timing)); 15909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(17, calculateDirectedTime(3, 20, 17, timing)); 16093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 16193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // reverse 16293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.direction = Timing::PlaybackDirectionReverse; 16309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(3, calculateDirectedTime(0, 20, 17, timing)); 16409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(3, calculateDirectedTime(1, 20, 17, timing)); 16593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.direction = Timing::PlaybackDirectionAlternate; 16609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(3, calculateDirectedTime(1, 20, 17, timing)); 16709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(3, calculateDirectedTime(3, 20, 17, timing)); 16893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.direction = Timing::PlaybackDirectionAlternateReverse; 16909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(3, calculateDirectedTime(0, 20, 17, timing)); 17009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(3, calculateDirectedTime(2, 20, 17, timing)); 17193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 17293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 173d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)TEST(AnimationTimingCalculationsTest, TransformedTime) 17493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 17593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) Timing timing; 17693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 177a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // calculateTransformedTime(currentIteration, iterationDuration, iterationTime, timing) 17893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 17993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // Iteration time is null 18009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_TRUE(isNull(calculateTransformedTime(1, 2, nullValue(), timing))); 18193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 18293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // PlaybackDirectionForwards 18309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(12, calculateTransformedTime(0, 20, 12, timing)); 18409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(12, calculateTransformedTime(1, 20, 12, timing)); 18593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 18693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // PlaybackDirectionForwards with timing function 1877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci timing.timingFunction = StepsTimingFunction::create(4, StepsTimingFunction::End); 18809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(10, calculateTransformedTime(0, 20, 12, timing)); 18909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(10, calculateTransformedTime(1, 20, 12, timing)); 19093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 19193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // PlaybackDirectionReverse 192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) timing.timingFunction = Timing::defaults().timingFunction; 19393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) timing.direction = Timing::PlaybackDirectionReverse; 19409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(8, calculateTransformedTime(0, 20, 12, timing)); 19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(8, calculateTransformedTime(1, 20, 12, timing)); 19693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 19793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // PlaybackDirectionReverse with timing function 1987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci timing.timingFunction = StepsTimingFunction::create(4, StepsTimingFunction::End); 19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(5, calculateTransformedTime(0, 20, 12, timing)); 20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(5, calculateTransformedTime(1, 20, 12, timing)); 20193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 2027757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // Timing function when directed time is null. 20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_TRUE(isNull(calculateTransformedTime(1, 2, nullValue(), timing))); 204a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 205a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // Timing function when iterationDuration is infinity 206a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) timing.direction = Timing::PlaybackDirectionNormal; 20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(0, calculateTransformedTime(0, std::numeric_limits<double>::infinity(), 0, timing)); 20809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(1, calculateTransformedTime(0, std::numeric_limits<double>::infinity(), 1, timing)); 209a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) timing.direction = Timing::PlaybackDirectionReverse; 21009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(std::numeric_limits<double>::infinity(), calculateTransformedTime(0, std::numeric_limits<double>::infinity(), 0, timing)); 21109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) EXPECT_EQ(std::numeric_limits<double>::infinity(), calculateTransformedTime(0, std::numeric_limits<double>::infinity(), 1, timing)); 21293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 21393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 21493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 215