1 // This file is part of VSTGUI. It is subject to the license terms 2 // in the LICENSE file found in the top-level directory of this 3 // distribution and at http://github.com/steinbergmedia/vstgui/LICENSE 4 5 #include "../../../../lib/animation/timingfunctions.h" 6 #include "../../../../lib/cview.h" 7 #include "../../../../lib/cviewcontainer.h" 8 #include "../../../../lib/controls/ccontrol.h" 9 #include "../../unittests.h" 10 11 namespace VSTGUI { 12 using namespace Animation; 13 14 TESTCASE(TimingFunctionTests, 15 TEST(linearTimingFunction, 16 LinearTimingFunction f (100); 17 ITimingFunction& tf = dynamic_cast<ITimingFunction&>(f); 18 EXPECT(tf.getPosition (0) == 0.f); 19 EXPECT(tf.getPosition (50) == 0.5f); 20 EXPECT(tf.getPosition (100) == 1.f); 21 EXPECT(tf.getPosition (150) == 1.f); 22 ); 23 TEST(powerTwoTimingFunction, 24 PowerTimingFunction f (100, 2); 25 ITimingFunction& tf = dynamic_cast<ITimingFunction&>(f); 26 EXPECT(tf.getPosition (0) == 0.f); 27 EXPECT(tf.getPosition (50) == 0.25f); 28 EXPECT(tf.getPosition (86) == 0.7396f); 29 EXPECT(tf.getPosition (100) == 1.f); 30 EXPECT(tf.getPosition (150) == 1.f); 31 ); 32 TEST(powerFourTimingFunction, 33 PowerTimingFunction f (100, 4); 34 ITimingFunction& tf = dynamic_cast<ITimingFunction&>(f); 35 EXPECT(tf.getPosition (0) == 0.f); 36 EXPECT(tf.getPosition (50) == 0.0625f); 37 EXPECT(tf.getPosition (100) == 1.f); 38 EXPECT(tf.getPosition (150) == 1.f); 39 ); 40 TEST(interpolationTimingFunction, 41 InterpolationTimingFunction f (100); 42 f.addPoint (0.5, 0.4f); 43 ITimingFunction& tf = dynamic_cast<ITimingFunction&>(f); 44 EXPECT(tf.getPosition (0) == 0.f); 45 EXPECT(tf.getPosition (25) == 0.2f); 46 EXPECT(tf.getPosition (50) == 0.4f); 47 EXPECT(tf.getPosition (75) == 0.7f); 48 EXPECT(tf.getPosition (100) == 1.f); 49 EXPECT(tf.getPosition (150) == 1.f); 50 ); 51 TEST(repeatTimingFunction, 52 auto lf = new LinearTimingFunction (100); 53 RepeatTimingFunction f (lf, 2, false); 54 ITimingFunction& tf = dynamic_cast<ITimingFunction&>(f); 55 EXPECT(tf.getPosition (0) == 0.f); 56 EXPECT(tf.getPosition (50) == 0.5f); 57 EXPECT(tf.getPosition (100) == 1.f); 58 EXPECT(tf.isDone (100) == false); 59 EXPECT(tf.getPosition (110) == 0.1f); 60 EXPECT(tf.getPosition (150) == 0.5f); 61 EXPECT(tf.getPosition (200) == 1.0f); 62 EXPECT(tf.isDone (200) == true); 63 ); 64 TEST(repeatTimingFunctionReverse, 65 auto lf = new LinearTimingFunction (100); 66 RepeatTimingFunction f (lf, 2, true); 67 ITimingFunction& tf = dynamic_cast<ITimingFunction&>(f); 68 EXPECT(tf.getPosition (0) == 0.f); 69 EXPECT(tf.getPosition (50) == 0.5f); 70 EXPECT(tf.getPosition (100) == 1.f); 71 EXPECT(tf.isDone (100) == false); 72 EXPECT(tf.getPosition (110) == 0.9f); 73 EXPECT(tf.getPosition (150) == 0.5f); 74 EXPECT(tf.getPosition (200) == 0.f); 75 EXPECT(tf.isDone (200) == true); 76 ); 77 TEST(cubicBezierTimingFunction, 78 CubicBezierTimingFunction f (100, CPoint (0.42, 0.), CPoint (0.58, 1.)); 79 EXPECT (f.getPosition (0) == 0.f); 80 EXPECT (f.getPosition (25) < 0.25f); 81 EXPECT (f.getPosition (50) == 0.5f); 82 EXPECT (f.getPosition (75) > 0.75f); 83 EXPECT (f.getPosition (100) == 1.0f); 84 ); 85 ); 86 87 } // VSTGUI 88