Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / platform / animation / UnitBezierTest.cpp
1 /*
2  * Copyright (C) 2013 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1.  Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  * 2.  Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24
25 #include "config.h"
26
27 #include "platform/animation/UnitBezier.h"
28
29 #include <gtest/gtest.h>
30
31 using namespace WebCore;
32
33 namespace {
34
35 TEST(UnitBezierTest, BasicUse)
36 {
37     UnitBezier bezier(0.5, 1.0, 0.5, 1.0);
38     EXPECT_EQ(0.875, bezier.solve(0.5, 0.005));
39 }
40
41 TEST(UnitBezierTest, Overshoot)
42 {
43     UnitBezier bezier(0.5, 2.0, 0.5, 2.0);
44     EXPECT_EQ(1.625, bezier.solve(0.5, 0.005));
45 }
46
47 TEST(UnitBezierTest, Undershoot)
48 {
49     UnitBezier bezier(0.5, -1.0, 0.5, -1.0);
50     EXPECT_EQ(-0.625, bezier.solve(0.5, 0.005));
51 }
52
53 TEST(UnitBezierTest, InputAtEdgeOfRange)
54 {
55     UnitBezier bezier(0.5, 1.0, 0.5, 1.0);
56     EXPECT_EQ(0.0, bezier.solve(0.0, 0.005));
57     EXPECT_EQ(1.0, bezier.solve(1.0, 0.005));
58 }
59
60 TEST(UnitBezierTest, InputOutOfRange)
61 {
62     UnitBezier bezier(0.5, 1.0, 0.5, 1.0);
63     EXPECT_EQ(-2.0, bezier.solve(-1.0, 0.005));
64     EXPECT_EQ(1.0, bezier.solve(2.0, 0.005));
65 }
66
67 TEST(UnitBezierTest, InputOutOfRangeLargeEpsilon)
68 {
69     UnitBezier bezier(0.5, 1.0, 0.5, 1.0);
70     EXPECT_EQ(-2.0, bezier.solve(-1.0, 1.0));
71     EXPECT_EQ(1.0, bezier.solve(2.0, 1.0));
72 }
73
74 TEST(UnitBezierTest, InputOutOfRangeCoincidentEndpoints)
75 {
76     UnitBezier bezier(0.0, 0.0, 1.0, 1.0);
77     EXPECT_EQ(-1.0, bezier.solve(-1.0, 0.005));
78     EXPECT_EQ(2.0, bezier.solve(2.0, 0.005));
79 }
80
81 TEST(UnitBezierTest, InputOutOfRangeVerticalGradient)
82 {
83     UnitBezier bezier(0.0, 1.0, 1.0, 0.0);
84     EXPECT_EQ(0.0, bezier.solve(-1.0, 0.005));
85     EXPECT_EQ(1.0, bezier.solve(2.0, 0.005));
86 }
87
88 TEST(UnitBezierTest, InputOutOfRangeDistinctEndpoints)
89 {
90     UnitBezier bezier(0.1, 0.2, 0.8, 0.8);
91     EXPECT_EQ(-2.0, bezier.solve(-1.0, 0.005));
92     EXPECT_EQ(2.0, bezier.solve(2.0, 0.005));
93 }
94
95 } // namespace