1 /*
2  * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "animator/easing_equation.h"
17 
18 #include <climits>
19 #include <gtest/gtest.h>
20 
21 using namespace testing::ext;
22 namespace OHOS {
23 namespace {
24     const int16_t START_POS = 0;
25     const int16_t END_POS = 100;
26     const int16_t DURATION_TIME = 4;
27 }
28 
29 class EasingEquationTest : public testing::Test {
30 public:
SetUpTestCase(void)31     static void SetUpTestCase(void) {}
TearDownTestCase(void)32     static void TearDownTestCase(void) {}
33 };
34 
35 /**
36  * @tc.name: EasingEquationBackEaseIn_001
37  * @tc.desc: Verify BackEaseIn and GetHeight function.
38  * @tc.type: FUNC
39  * @tc.require: AR000DSMQM
40  */
41 HWTEST_F(EasingEquationTest, EasingEquationBackEaseIn_001, TestSize.Level0)
42 {
43     const double overShoot = 2;
44     EasingEquation::SetBackOvershoot(overShoot);
45     uint16_t i = 0;
46     EXPECT_EQ(EasingEquation::BackEaseIn(START_POS, END_POS, i++, DURATION_TIME), 0);
47     EXPECT_EQ(EasingEquation::BackEaseIn(START_POS, END_POS, i++, DURATION_TIME), -7); // -7:the value for 1th s;
48     EXPECT_EQ(EasingEquation::BackEaseIn(START_POS, END_POS, i++, DURATION_TIME), -12); // -12:the value for 2th s;
49     EXPECT_EQ(EasingEquation::BackEaseIn(START_POS, END_POS, i++, DURATION_TIME), 14); // 14:the value for 3th s;
50     EXPECT_EQ(EasingEquation::BackEaseIn(START_POS, END_POS, i++, DURATION_TIME), END_POS);
51 }
52 
53 /**
54  * @tc.name: EasingEquationBackEaseOut_001
55  * @tc.desc: Verify BackEaseOut and GetHeight function.
56  * @tc.type: FUNC
57  * @tc.require: AR000DSMQM
58  */
59 HWTEST_F(EasingEquationTest, EasingEquationBackEaseOut_001, TestSize.Level1)
60 {
61     uint16_t i = 0;
62     EXPECT_EQ(EasingEquation::BackEaseOut(START_POS, END_POS, i++, DURATION_TIME), 0);
63     EXPECT_EQ(EasingEquation::BackEaseOut(START_POS, END_POS, i++, DURATION_TIME), 85); // 85:the value for 1th s;
64     EXPECT_EQ(EasingEquation::BackEaseOut(START_POS, END_POS, i++, DURATION_TIME), 112); // 112:the value for 2th s;
65     EXPECT_EQ(EasingEquation::BackEaseOut(START_POS, END_POS, i++, DURATION_TIME), 107); // 107:the value for 3th s;
66     EXPECT_EQ(EasingEquation::BackEaseOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
67 }
68 
69 /**
70  * @tc.name: EasingEquationBackEaseInOut_001
71  * @tc.desc: Verify BackEaseInOut and GetHeight function.
72  * @tc.type: FUNC
73  * @tc.require: AR000DSMQM
74  */
75 HWTEST_F(EasingEquationTest, EasingEquationBackEaseInOut_001, TestSize.Level1)
76 {
77     uint16_t i = 0;
78     EXPECT_EQ(EasingEquation::BackEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 0);
79     EXPECT_EQ(EasingEquation::BackEaseInOut(START_POS, END_POS, i++, DURATION_TIME), -6); // -6:the value for 1th s;
80     EXPECT_EQ(EasingEquation::BackEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 50); // 50:the value for 2th s;
81     EXPECT_EQ(EasingEquation::BackEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 106); // 106:the value for 3th s;
82     EXPECT_EQ(EasingEquation::BackEaseInOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
83 }
84 
85 /**
86  * @tc.name: EasingEquationCircEaseIn_001
87  * @tc.desc: Verify CircEaseIn and GetHeight function.
88  * @tc.type: FUNC
89  * @tc.require: AR000DSMQM
90  */
91 HWTEST_F(EasingEquationTest, EasingEquationCircEaseIn_001, TestSize.Level1)
92 {
93     uint16_t i = 0;
94     EXPECT_EQ(EasingEquation::CircEaseIn(START_POS, END_POS, i++, DURATION_TIME), 0);
95     EXPECT_EQ(EasingEquation::CircEaseIn(START_POS, END_POS, i++, DURATION_TIME), 3); // 3:the value for 1th s;
96     EXPECT_EQ(EasingEquation::CircEaseIn(START_POS, END_POS, i++, DURATION_TIME), 13); // 13:the value for 2th s;
97     EXPECT_EQ(EasingEquation::CircEaseIn(START_POS, END_POS, i++, DURATION_TIME), 33); // 33:the value for 3th s;
98     EXPECT_EQ(EasingEquation::CircEaseIn(START_POS, END_POS, i++, DURATION_TIME), END_POS);
99 }
100 
101 /**
102  * @tc.name: EasingEquationCircEaseOut_001
103  * @tc.desc: Verify CircEaseOut and GetHeight function.
104  * @tc.type: FUNC
105  * @tc.require: AR000DSMQM
106  */
107 HWTEST_F(EasingEquationTest, EasingEquationCircEaseOut_001, TestSize.Level1)
108 {
109     uint16_t i = 0;
110     EXPECT_EQ(EasingEquation::CircEaseOut(START_POS, END_POS, i++, DURATION_TIME), 0);
111     EXPECT_EQ(EasingEquation::CircEaseOut(START_POS, END_POS, i++, DURATION_TIME), 66); // 66:the value for 1th s;
112     EXPECT_EQ(EasingEquation::CircEaseOut(START_POS, END_POS, i++, DURATION_TIME), 86); // 86:the value for 2th s;
113     EXPECT_EQ(EasingEquation::CircEaseOut(START_POS, END_POS, i++, DURATION_TIME), 96); // 96:the value for 3th s;
114     EXPECT_EQ(EasingEquation::CircEaseOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
115 }
116 
117 /**
118  * @tc.name: EasingEquationCircEaseInOut_001
119  * @tc.desc: Verify CircEaseInOut and GetHeight function.
120  * @tc.type: FUNC
121  * @tc.require: AR000DSMQM
122  */
123 HWTEST_F(EasingEquationTest, EasingEquationCircEaseInOut_001, TestSize.Level1)
124 {
125     uint16_t i = 0;
126     EXPECT_EQ(EasingEquation::CircEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 0);
127     EXPECT_EQ(EasingEquation::CircEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 6); // 6:the value for 1th s;
128     EXPECT_EQ(EasingEquation::CircEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 50); // 50:the value for 2th s;
129     EXPECT_EQ(EasingEquation::CircEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 93); // 93:the value for 3th s;
130     EXPECT_EQ(EasingEquation::CircEaseInOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
131 }
132 
133 /**
134  * @tc.name: EasingEquationCubicEaseIn_001
135  * @tc.desc: Verify CubicEaseIn and GetHeight function.
136  * @tc.type: FUNC
137  * @tc.require: AR000DSMQM
138  */
139 HWTEST_F(EasingEquationTest, EasingEquationCubicEaseIn_001, TestSize.Level1)
140 {
141     uint16_t i = 0;
142     EXPECT_EQ(EasingEquation::CubicEaseIn(START_POS, END_POS, i++, DURATION_TIME), 0);
143     EXPECT_EQ(EasingEquation::CubicEaseIn(START_POS, END_POS, i++, DURATION_TIME), 1); // 1:the value for 1th s;
144     EXPECT_EQ(EasingEquation::CubicEaseIn(START_POS, END_POS, i++, DURATION_TIME), 12); // 12:the value for 2th s;
145     EXPECT_EQ(EasingEquation::CubicEaseIn(START_POS, END_POS, i++, DURATION_TIME), 42); // 42:the value for 3th s;
146     EXPECT_EQ(EasingEquation::CubicEaseIn(START_POS, END_POS, i++, DURATION_TIME), END_POS);
147 }
148 
149 /**
150  * @tc.name: EasingEquationCubicEaseOut_001
151  * @tc.desc: Verify CubicEaseOut and GetHeight function.
152  * @tc.type: FUNC
153  * @tc.require: AR000DSMQM
154  */
155 HWTEST_F(EasingEquationTest, EasingEquationCubicEaseOut_001, TestSize.Level1)
156 {
157     uint16_t i = 0;
158     EXPECT_EQ(EasingEquation::CubicEaseOut(START_POS, END_POS, i++, DURATION_TIME), 0);
159     EXPECT_EQ(EasingEquation::CubicEaseOut(START_POS, END_POS, i++, DURATION_TIME), 57); // 57:the value for 1th s;
160     EXPECT_EQ(EasingEquation::CubicEaseOut(START_POS, END_POS, i++, DURATION_TIME), 87); // 87:the value for 2th s;
161     EXPECT_EQ(EasingEquation::CubicEaseOut(START_POS, END_POS, i++, DURATION_TIME), 98); // 98:the value for 3th s;
162     EXPECT_EQ(EasingEquation::CubicEaseOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
163 }
164 
165 /**
166  * @tc.name: EasingEquationCubicEaseInOut_001
167  * @tc.desc: Verify CubicEaseInOut and GetHeight function.
168  * @tc.type: FUNC
169  * @tc.require: AR000DSMQM
170  */
171 HWTEST_F(EasingEquationTest, EasingEquationCubicEaseInOut_001, TestSize.Level1)
172 {
173     uint16_t i = 0;
174     EXPECT_EQ(EasingEquation::CubicEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 0);
175     EXPECT_EQ(EasingEquation::CubicEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 6); // 6:the value for 1th s;
176     EXPECT_EQ(EasingEquation::CubicEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 50); // 50:the value for 2th s;
177     EXPECT_EQ(EasingEquation::CubicEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 93); // 93:the value for 3th s;
178     EXPECT_EQ(EasingEquation::CubicEaseInOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
179 }
180 
181 /**
182  * @tc.name: EasingEquationLinearEaseNone_001
183  * @tc.desc: Verify LinearEaseNone and GetHeight function.
184  * @tc.type: FUNC
185  * @tc.require: AR000DSMQM
186  */
187 HWTEST_F(EasingEquationTest, EasingEquationLinearEaseNone_001, TestSize.Level1)
188 {
189     uint16_t i = 0;
190     EXPECT_EQ(EasingEquation::LinearEaseNone(START_POS, END_POS, i++, DURATION_TIME), 0);
191     EXPECT_EQ(EasingEquation::LinearEaseNone(START_POS, END_POS, i++, DURATION_TIME), 25); // 25:the value for 1th s;
192     EXPECT_EQ(EasingEquation::LinearEaseNone(START_POS, END_POS, i++, DURATION_TIME), 50); // 50:the value for 2th s;
193     EXPECT_EQ(EasingEquation::LinearEaseNone(START_POS, END_POS, i++, DURATION_TIME), 75); // 75:the value for 3th s;
194     EXPECT_EQ(EasingEquation::LinearEaseNone(START_POS, END_POS, i++, DURATION_TIME), END_POS);
195 }
196 
197 /**
198  * @tc.name: EasingEquationQuadEaseIn_001
199  * @tc.desc: Verify QuadEaseIn and GetHeight function.
200  * @tc.type: FUNC
201  * @tc.require: AR000DSMQM
202  */
203 HWTEST_F(EasingEquationTest, EasingEquationQuadEaseIn_001, TestSize.Level1)
204 {
205     uint16_t i = 0;
206     EXPECT_EQ(EasingEquation::QuadEaseIn(START_POS, END_POS, i++, DURATION_TIME), 0);
207     EXPECT_EQ(EasingEquation::QuadEaseIn(START_POS, END_POS, i++, DURATION_TIME), 6); // 6:the value for 1th s;
208     EXPECT_EQ(EasingEquation::QuadEaseIn(START_POS, END_POS, i++, DURATION_TIME), 25); // 25:the value for 2th s;
209     EXPECT_EQ(EasingEquation::QuadEaseIn(START_POS, END_POS, i++, DURATION_TIME), 56); // 56:the value for 3th s;
210     EXPECT_EQ(EasingEquation::QuadEaseIn(START_POS, END_POS, i++, DURATION_TIME), END_POS);
211 }
212 
213 /**
214  * @tc.name: EasingEquationQuadEaseOut_001
215  * @tc.desc: Verify QuadEaseOut and GetHeight function.
216  * @tc.type: FUNC
217  * @tc.require: AR000DSMQM
218  */
219 HWTEST_F(EasingEquationTest, EasingEquationQuadEaseOut_001, TestSize.Level1)
220 {
221     uint16_t i = 0;
222     EXPECT_EQ(EasingEquation::QuadEaseOut(START_POS, END_POS, i++, DURATION_TIME), 0);
223     EXPECT_EQ(EasingEquation::QuadEaseOut(START_POS, END_POS, i++, DURATION_TIME), 43); // 43:the value for 1th s;
224     EXPECT_EQ(EasingEquation::QuadEaseOut(START_POS, END_POS, i++, DURATION_TIME), 75); // 75:the value for 2th s;
225     EXPECT_EQ(EasingEquation::QuadEaseOut(START_POS, END_POS, i++, DURATION_TIME), 93); // 93:the value for 3th s;
226     EXPECT_EQ(EasingEquation::QuadEaseOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
227 }
228 
229 /**
230  * @tc.name: EasingEquationQuadEaseInOut_001
231  * @tc.desc: Verify QuadEaseInOut and GetHeight function.
232  * @tc.type: FUNC
233  * @tc.require: AR000DSMQM
234  */
235 HWTEST_F(EasingEquationTest, EasingEquationQuadEaseInOut_001, TestSize.Level1)
236 {
237     uint16_t i = 0;
238     EXPECT_EQ(EasingEquation::QuadEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 0);
239     EXPECT_EQ(EasingEquation::QuadEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 12); // 12:the value for 1th s;
240     EXPECT_EQ(EasingEquation::QuadEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 50); // 50:the value for 2th s;
241     EXPECT_EQ(EasingEquation::QuadEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 87); // 87:the value for 3th s;
242     EXPECT_EQ(EasingEquation::QuadEaseInOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
243 }
244 
245 /**
246  * @tc.name: EasingEquationQuintEaseIn_001
247  * @tc.desc: Verify QuintEaseIn and GetHeight function.
248  * @tc.type: FUNC
249  * @tc.require: AR000DSMQM
250  */
251 HWTEST_F(EasingEquationTest, EasingEquationQuintEaseIn_001, TestSize.Level1)
252 {
253     uint16_t i = 0;
254     EXPECT_EQ(EasingEquation::QuintEaseIn(START_POS, END_POS, i++, DURATION_TIME), 0);
255     EXPECT_EQ(EasingEquation::QuintEaseIn(START_POS, END_POS, i++, DURATION_TIME), 0); // 0:the value for 1th s;
256     EXPECT_EQ(EasingEquation::QuintEaseIn(START_POS, END_POS, i++, DURATION_TIME), 3); // 3:the value for 2th s;
257     EXPECT_EQ(EasingEquation::QuintEaseIn(START_POS, END_POS, i++, DURATION_TIME), 23); // 23:the value for 3th s;
258     EXPECT_EQ(EasingEquation::QuintEaseIn(START_POS, END_POS, i++, DURATION_TIME), END_POS);
259 }
260 
261 /**
262  * @tc.name: EasingEquationQuintEaseOut_001
263  * @tc.desc: Verify QuintEaseOut and GetHeight function.
264  * @tc.type: FUNC
265  * @tc.require: AR000DSMQM
266  */
267 HWTEST_F(EasingEquationTest, EasingEquationQuintEaseOut_001, TestSize.Level1)
268 {
269     uint16_t i = 0;
270     EXPECT_EQ(EasingEquation::QuintEaseOut(START_POS, END_POS, i++, DURATION_TIME), 0);
271     EXPECT_EQ(EasingEquation::QuintEaseOut(START_POS, END_POS, i++, DURATION_TIME), 76); // 76:the value for 1th s;
272     EXPECT_EQ(EasingEquation::QuintEaseOut(START_POS, END_POS, i++, DURATION_TIME), 96); // 96:the value for 2th s;
273     EXPECT_EQ(EasingEquation::QuintEaseOut(START_POS, END_POS, i++, DURATION_TIME), 99); // 99:the value for 3th s;
274     EXPECT_EQ(EasingEquation::QuintEaseOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
275 }
276 
277 /**
278  * @tc.name: EasingEquationQuintEaseInOut_001
279  * @tc.desc: Verify QuintEaseInOut and GetHeight function.
280  * @tc.type: FUNC
281  * @tc.require: AR000DSMQM
282  */
283 HWTEST_F(EasingEquationTest, EasingEquationQuintEaseInOut_001, TestSize.Level1)
284 {
285     uint16_t i = 0;
286     EXPECT_EQ(EasingEquation::QuintEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 0);
287     EXPECT_EQ(EasingEquation::QuintEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 1); // 1:the value for 1th s;
288     EXPECT_EQ(EasingEquation::QuintEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 50); // 50:the value for 2th s;
289     EXPECT_EQ(EasingEquation::QuintEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 98); // 87:the value for 3th s;
290     EXPECT_EQ(EasingEquation::QuintEaseInOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
291 }
292 
293 /**
294  * @tc.name: EasingEquationSineEaseIn_001
295  * @tc.desc: Verify SineEaseIn and GetHeight function.
296  * @tc.type: FUNC
297  * @tc.require: AR000DSMQM
298  */
299 HWTEST_F(EasingEquationTest, EasingEquationSineEaseIn_001, TestSize.Level1)
300 {
301     uint16_t i = 0;
302     EXPECT_EQ(EasingEquation::SineEaseIn(START_POS, END_POS, i++, DURATION_TIME), 0);
303     EXPECT_EQ(EasingEquation::SineEaseIn(START_POS, END_POS, i++, DURATION_TIME), 7); // 7:the value for 1th s;
304     EXPECT_EQ(EasingEquation::SineEaseIn(START_POS, END_POS, i++, DURATION_TIME), 29); // 29:the value for 2th s;
305     EXPECT_EQ(EasingEquation::SineEaseIn(START_POS, END_POS, i++, DURATION_TIME), 60); // 60:the value for 3th s;
306     EXPECT_EQ(EasingEquation::SineEaseIn(START_POS, END_POS, i++, DURATION_TIME), END_POS);
307 }
308 
309 /**
310  * @tc.name: EasingEquationSineEaseOut_001
311  * @tc.desc: Verify SineEaseOut and GetHeight function.
312  * @tc.type: FUNC
313  * @tc.require: AR000DSMQM
314  */
315 HWTEST_F(EasingEquationTest, EasingEquationSineEaseOut_001, TestSize.Level1)
316 {
317     uint16_t i = 0;
318     EXPECT_EQ(EasingEquation::SineEaseOut(START_POS, END_POS, i++, DURATION_TIME), 0);
319     EXPECT_EQ(EasingEquation::SineEaseOut(START_POS, END_POS, i++, DURATION_TIME), 37); // 37:the value for 1th s;
320     EXPECT_EQ(EasingEquation::SineEaseOut(START_POS, END_POS, i++, DURATION_TIME), 70); // 70:the value for 2th s;
321     EXPECT_EQ(EasingEquation::SineEaseOut(START_POS, END_POS, i++, DURATION_TIME), 92); // 92:the value for 3th s;
322     EXPECT_EQ(EasingEquation::SineEaseOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
323 }
324 
325 /**
326  * @tc.name: EasingEquationSineEaseInOut_001
327  * @tc.desc: Verify SineEaseInOut and GetHeight function.
328  * @tc.type: FUNC
329  * @tc.require: AR000DSMQM
330  */
331 HWTEST_F(EasingEquationTest, EasingEquationSineEaseInOut_001, TestSize.Level1)
332 {
333     uint16_t i = 0;
334     EXPECT_EQ(EasingEquation::SineEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 0);
335     EXPECT_EQ(EasingEquation::SineEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 14); // 14:the value for 1th s;
336     EXPECT_EQ(EasingEquation::SineEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 50); // 50:the value for 2th s;
337     EXPECT_EQ(EasingEquation::SineEaseInOut(START_POS, END_POS, i++, DURATION_TIME), 85); // 85:the value for 3th s;
338     EXPECT_EQ(EasingEquation::SineEaseInOut(START_POS, END_POS, i++, DURATION_TIME), END_POS);
339 }
340 } // namespace OHOS
341