public void UpadateProcess_Demo(float initDeltaPosOnAxis, float deceleration, int dimension, Vector2 elementInitLocalPos)
    {
        IInertialScrollProcessConstArg arg = CreateMockConstArg();

        arg.processManager.GetInertialScrollDeceleration().Returns(deceleration);
        arg.initialVelocity.Returns(initDeltaPosOnAxis);
        arg.dimension.Returns(dimension);
        IUIElement scrollerElement = Substitute.For <IUIElement>();

        scrollerElement.GetLocalPosition().Returns(elementInitLocalPos);
        arg.scrollerElement.Returns(scrollerElement);
        TestInertialScrollProcess process = new TestInertialScrollProcess(arg);

        bool done = false;

        DebugHelper.PrintInRed("initVel: " + initDeltaPosOnAxis.ToString() + ", deceleration: " + deceleration.ToString());
        float   deltaT   = .1f;
        Vector2 localPos = elementInitLocalPos;

        scrollerElement.SetLocalPosition(Arg.Do <Vector2>(x => localPos = x));
        while (!done)
        {
            process.UpdateProcess(deltaT);

            Debug.Log("elementLocalPos: " + localPos.ToString() + ", velocity: " + process.thisPrevVelocity_Test.ToString());
            if (process.thisElapsedTime_Test >= process.thisExpireTime_Test)
            {
                done = true;
            }
        }
    }
    public void Construction_MultiplierNotLessThanZero_SetsExpireTime(float initialVelocity, float deceleration, float decelerationAxisComponentMultiplier, float expected)
    {
        IInertialScrollProcessConstArg arg = CreateMockConstArg();

        arg.deceleration.Returns(deceleration);
        arg.initialVelocity.Returns(initialVelocity);
        arg.decelerationAxisComponentMultiplier.Returns(decelerationAxisComponentMultiplier);
        TestInertialScrollProcess process = new TestInertialScrollProcess(arg);

        float actual = process.thisExpireTime_Test;

        Assert.That(actual, Is.EqualTo(expected));
    }