1#include "test.h"
2
3#include <base/bezier.h>
4
5#include <gtest/gtest.h>
6
7// Due to the implementation, derivatives must be divisible by 3 to be exactly
8// represented.
9
10TEST(Bezier, Constant)
11{
12 CCubicBezier Zero = CCubicBezier::With(Start: 0.0f, StartDerivative: 0.0f, EndDerivative: 0.0f, End: 0.0f);
13 ASSERT_EQ(Zero.Evaluate(0.0f), 0.0f);
14 ASSERT_EQ(Zero.Evaluate(0.3f), 0.0f);
15 ASSERT_EQ(Zero.Evaluate(1.0f), 0.0f);
16 ASSERT_EQ(Zero.Derivative(0.0f), 0.0f);
17 ASSERT_EQ(Zero.Derivative(0.3f), 0.0f);
18 ASSERT_EQ(Zero.Derivative(1.0f), 0.0f);
19
20 CCubicBezier Five = CCubicBezier::With(Start: 5.0f, StartDerivative: 0.0f, EndDerivative: 0.0f, End: 5.0f);
21 ASSERT_EQ(Five.Evaluate(0.0f), 5.0f);
22 ASSERT_EQ(Five.Evaluate(0.3f), 5.0f);
23 ASSERT_EQ(Five.Evaluate(1.0f), 5.0f);
24 ASSERT_EQ(Five.Derivative(0.0f), 0.0f);
25 ASSERT_EQ(Five.Derivative(0.3f), 0.0f);
26 ASSERT_EQ(Five.Derivative(1.0f), 0.0f);
27}
28
29TEST(Bezier, Linear)
30{
31 CCubicBezier TripleSlope = CCubicBezier::With(Start: 4.0f, StartDerivative: 3.0f, EndDerivative: 3.0f, End: 7.0f);
32 ASSERT_EQ(TripleSlope.Evaluate(0.0f), 4.0f);
33 ASSERT_EQ(TripleSlope.Evaluate(0.3f), 4.9f);
34 ASSERT_EQ(TripleSlope.Evaluate(1.0f), 7.0f);
35 ASSERT_EQ(TripleSlope.Derivative(0.0f), 3.0f);
36 ASSERT_EQ(TripleSlope.Derivative(0.3f), 3.0f);
37 ASSERT_EQ(TripleSlope.Derivative(1.0f), 3.0f);
38}
39
40TEST(Bezier, Arbitrary)
41{
42 CCubicBezier Something = CCubicBezier::With(Start: 4.9f, StartDerivative: 1.5f, EndDerivative: -4.5f, End: 1.0f);
43 ASSERT_EQ(Something.Evaluate(0.0f), 4.9f);
44 ASSERT_EQ(Something.Evaluate(1.0f), 1.0f);
45 ASSERT_EQ(Something.Derivative(0.0f), 1.5f);
46 ASSERT_EQ(Something.Derivative(1.0f), -4.5f);
47}
48