• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "gfx_utils/geometry2d.h"
17 
18 #include <climits>
19 #include <gtest/gtest.h>
20 
21 using namespace testing::ext;
22 
23 namespace OHOS {
24 namespace {
25     const uint16_t VECTOR2_SIZE = 4;
26     const int16_t BASE_VALUE = 1;
27     const int16_t TWOFOLD_VALUE = 2 * BASE_VALUE;
28     const int16_t THREEFOLD_VALUE = 3 * BASE_VALUE;
29     const int16_t FOURFOLD_VALUE = 4 * BASE_VALUE;
30     const int16_t FIVEFOLD_VALUE = 5 * BASE_VALUE;
31 }
32 
33 class Geometry2dTest : public testing::Test {
34 public:
SetUpTestCase(void)35     static void SetUpTestCase(void) {}
TearDownTestCase(void)36     static void TearDownTestCase(void) {}
37 };
38 
39 /**
40  * @tc.name: LineOperator_001
41  * @tc.desc: Verify index operator function, equal.
42  * @tc.type: FUNC
43  * @tc.require: AR000EEMQ9
44  */
45 HWTEST_F(Geometry2dTest, LineOperator_001, TestSize.Level0)
46 {
47     Vector2<int16_t> pt1 = { BASE_VALUE, TWOFOLD_VALUE };
48     Vector2<int16_t> pt2 = { THREEFOLD_VALUE, FOURFOLD_VALUE };
49     Line* line = new Line(pt1, pt2);
50 
51     EXPECT_EQ(line->operator[](0).x_, BASE_VALUE);
52     EXPECT_EQ(line->operator[](0).y_, TWOFOLD_VALUE);
53     EXPECT_EQ(line->operator[](1).x_, THREEFOLD_VALUE);
54     EXPECT_EQ(line->operator[](1).y_, FOURFOLD_VALUE);
55     delete line;
56 }
57 
58 /**
59  * @tc.name: LineOperator_002
60  * @tc.desc: Verify index operator function, equal.
61  * @tc.type: FUNC
62  * @tc.require: AR000EEMQ9
63  */
64 HWTEST_F(Geometry2dTest, LineOperator_002, TestSize.Level1)
65 {
66     Line* line = new Line(BASE_VALUE, TWOFOLD_VALUE, THREEFOLD_VALUE, FOURFOLD_VALUE);
67     if (line == nullptr) {
68         EXPECT_EQ(1, 0);
69         return;
70     }
71     EXPECT_EQ(line->operator[](0).x_, BASE_VALUE);
72     EXPECT_EQ(line->operator[](0).y_, TWOFOLD_VALUE);
73     EXPECT_EQ(line->operator[](1).x_, THREEFOLD_VALUE);
74     EXPECT_EQ(line->operator[](1).y_, FOURFOLD_VALUE);
75     delete line;
76 }
77 
78 /**
79  * @tc.name: PolygonMakeAABB_001
80  * @tc.desc: Verify MakeAABB function, equal.
81  * @tc.type: FUNC
82  * @tc.require: AR000EEMQ9
83  */
84 HWTEST_F(Geometry2dTest, PolygonMakeAABB_001, TestSize.Level0)
85 {
86     Vector2<int16_t> vertexes[VECTOR2_SIZE] =
87         { {0, 0}, {FIVEFOLD_VALUE, BASE_VALUE},
88         {THREEFOLD_VALUE, FIVEFOLD_VALUE}, {BASE_VALUE, THREEFOLD_VALUE} };
89     Polygon* polygon = new Polygon(vertexes, VECTOR2_SIZE);
90     if (polygon == nullptr) {
91         EXPECT_EQ(1, 0);
92         return;
93     }
94     Rect rect = polygon->MakeAABB();
95 
96     EXPECT_EQ(rect.GetLeft(), 0);
97     EXPECT_EQ(rect.GetTop(), 0);
98     EXPECT_EQ(rect.GetRight(), FIVEFOLD_VALUE);
99     EXPECT_EQ(rect.GetBottom(), FIVEFOLD_VALUE);
100     delete polygon;
101 }
102 
103 /**
104  * @tc.name: PolygonGetVertexNum_001
105  * @tc.desc: Verify GetVertexNum function, equal.
106  * @tc.type: FUNC
107  * @tc.require: AR000EEMQ9
108  */
109 HWTEST_F(Geometry2dTest, PolygonGetVertexNum_001, TestSize.Level0)
110 {
111     Vector2<int16_t> vertexes[VECTOR2_SIZE] =
112         { { 0, 0 }, { FIVEFOLD_VALUE, BASE_VALUE },
113         { THREEFOLD_VALUE, FIVEFOLD_VALUE }, { BASE_VALUE, THREEFOLD_VALUE } };
114     Polygon* polygon = new Polygon(vertexes, VECTOR2_SIZE);
115     if (polygon == nullptr) {
116         EXPECT_EQ(1, 0);
117         return;
118     }
119 
120     EXPECT_EQ(polygon->GetVertexNum(), VECTOR2_SIZE);
121     delete polygon;
122 }
123 
124 /**
125  * @tc.name: PolygonSetVertexNum_001
126  * @tc.desc: Verify SetVertexNum function, equal.
127  * @tc.type: FUNC
128  * @tc.require: AR000EEMQ9
129  */
130 HWTEST_F(Geometry2dTest, PolygonSetVertexNum_001, TestSize.Level0)
131 {
132     Polygon* polygon = new Polygon();
133     if (polygon == nullptr) {
134         EXPECT_EQ(1, 0);
135         return;
136     }
137     const uint16_t VERTEX_NUM = 8;
138     polygon->SetVertexNum(VERTEX_NUM);
139 
140     EXPECT_EQ(polygon->GetVertexNum(), VERTEX_NUM);
141     delete polygon;
142 }
143 
144 /**
145  * @tc.name: PolygonOperator_001
146  * @tc.desc: Verify operator[] function, equal.
147  * @tc.type: FUNC
148  * @tc.require: AR000EEMQ9
149  */
150 HWTEST_F(Geometry2dTest, PolygonOperator_001, TestSize.Level0)
151 {
152     Vector2<int16_t> vertexes[VECTOR2_SIZE] =
153         { { 0, 0 }, { FIVEFOLD_VALUE, BASE_VALUE },
154         { THREEFOLD_VALUE, FIVEFOLD_VALUE }, { BASE_VALUE, THREEFOLD_VALUE } };
155     Polygon* polygon = new Polygon(vertexes, VECTOR2_SIZE);
156     if (polygon == nullptr) {
157         EXPECT_EQ(1, 0);
158         return;
159     }
160     EXPECT_EQ(polygon->operator[](1).x_, FIVEFOLD_VALUE);
161     EXPECT_EQ(polygon->operator[](2).y_, FIVEFOLD_VALUE);
162 
163     delete polygon;
164 }
165 
166 /**
167  * @tc.name: PolygonOperator_002
168  * @tc.desc: Verify operator[] function, equal.
169  * @tc.type: FUNC
170  * @tc.require: AR000EEMQ9
171  */
172 HWTEST_F(Geometry2dTest, PolygonOperator_002, TestSize.Level0)
173 {
174     Rect rect(BASE_VALUE, TWOFOLD_VALUE, THREEFOLD_VALUE, FOURFOLD_VALUE);
175     Polygon* polygon = new Polygon(rect);
176     if (polygon == nullptr) {
177         EXPECT_EQ(1, 0);
178         return;
179     }
180     uint16_t i = 0;
181     EXPECT_EQ(polygon->operator[](i).x_, BASE_VALUE);
182     EXPECT_EQ(polygon->operator[](i++).y_, TWOFOLD_VALUE);
183     EXPECT_EQ(polygon->operator[](i).x_, THREEFOLD_VALUE);
184     EXPECT_EQ(polygon->operator[](i++).y_, TWOFOLD_VALUE);
185     EXPECT_EQ(polygon->operator[](i).x_, THREEFOLD_VALUE);
186     EXPECT_EQ(polygon->operator[](i++).y_, FOURFOLD_VALUE);
187     EXPECT_EQ(polygon->operator[](i).x_, BASE_VALUE);
188     EXPECT_EQ(polygon->operator[](i++).y_, FOURFOLD_VALUE);
189     EXPECT_EQ(polygon->GetVertexNum(), VECTOR2_SIZE);
190 
191     delete polygon;
192 }
193 
194 /**
195  * @tc.name: Geometry2dIntersect_001
196  * @tc.desc: Verify Intersect function, equal.
197  * @tc.type: FUNC
198  * @tc.require: AR000EEMQ9
199  */
200 HWTEST_F(Geometry2dTest, Geometry2dIntersect_001, TestSize.Level0)
201 {
202     Vector2<int16_t> pt11 = { 0, TWOFOLD_VALUE };
203     Vector2<int16_t> pt12 = { FOURFOLD_VALUE, TWOFOLD_VALUE };
204     Line* line1 = new Line(pt11, pt12);
205     if (line1 == nullptr) {
206         EXPECT_EQ(1, 0);
207         return;
208     }
209     Vector2<int16_t> pt21 = { TWOFOLD_VALUE, 0 };
210     Vector2<int16_t> pt22 = { TWOFOLD_VALUE, FOURFOLD_VALUE };
211     Line* line2 = new Line(pt21, pt22);
212     if (line2 == nullptr) {
213         delete line1;
214         EXPECT_EQ(1, 0);
215         return;
216     }
217     Vector2<int16_t> pt31 = { 0, 0 };
218     Vector2<int16_t> pt32 = { FIVEFOLD_VALUE, 0 };
219     Line* line3 = new Line(pt31, pt32);
220     if (line3 == nullptr) {
221         delete line1;
222         delete line2;
223         EXPECT_EQ(1, 0);
224         return;
225     }
226     Vector2<int16_t> out;
227 
228     EXPECT_EQ(Intersect(*line1, *line2, out), true);
229     EXPECT_EQ(out.x_, TWOFOLD_VALUE);
230     EXPECT_EQ(out.y_, TWOFOLD_VALUE);
231 
232     delete line1;
233     delete line2;
234     delete line3;
235 }
236 
237 /**
238  * @tc.name: Geometry2dIsIntersect_001
239  * @tc.desc: Verify IsIntersect function, equal.
240  * @tc.type: FUNC
241  * @tc.require: AR000EEMQ9
242  */
243 HWTEST_F(Geometry2dTest, Geometry2dIsIntersect_001, TestSize.Level0)
244 {
245     Vector2<int16_t> pt11 = { 0, TWOFOLD_VALUE };
246     Vector2<int16_t> pt12 = { FOURFOLD_VALUE, TWOFOLD_VALUE };
247     Line* line1 = new Line(pt11, pt12);
248     if (line1 == nullptr) {
249         EXPECT_EQ(1, 0);
250         return;
251     }
252     Vector2<int16_t> pt21 = { TWOFOLD_VALUE, 0 };
253     Vector2<int16_t> pt22 = { TWOFOLD_VALUE, FOURFOLD_VALUE };
254     Line* line2 = new Line(pt21, pt22);
255     if (line2 == nullptr) {
256         delete line1;
257         EXPECT_EQ(1, 0);
258         return;
259     }
260     Vector2<int16_t> pt31 = { 0, 0 };
261     Vector2<int16_t> pt32 = { FIVEFOLD_VALUE, 0 };
262     Line* line3 = new Line(pt31, pt32);
263     if (line3 == nullptr) {
264         delete line1;
265         delete line2;
266         EXPECT_EQ(1, 0);
267         return;
268     }
269     EXPECT_EQ(IsIntersect(*line1, *line2), true);
270 
271     delete line1;
272     delete line2;
273     delete line3;
274 }
275 
276 /**
277  * @tc.name: Geometry2dClip_001
278  * @tc.desc: Verify Clip function, equal.
279  * @tc.type: FUNC
280  * @tc.require: AR000EEMQ9
281  */
282 HWTEST_F(Geometry2dTest, Geometry2dClip_001, TestSize.Level0)
283 {
284     Vector2<int16_t> vertexes[VECTOR2_SIZE] =
285         { { 0, 0 }, { FIVEFOLD_VALUE, BASE_VALUE },
286         { THREEFOLD_VALUE, FIVEFOLD_VALUE }, { BASE_VALUE, THREEFOLD_VALUE } };
287     Polygon* polygon = new Polygon(vertexes, VECTOR2_SIZE);
288     if (polygon == nullptr) {
289         EXPECT_EQ(1, 0);
290         return;
291     }
292     Vector2<int16_t> pt11 = { BASE_VALUE, THREEFOLD_VALUE };
293     Vector2<int16_t> pt12 = { FIVEFOLD_VALUE, BASE_VALUE };
294     Line* line = new Line(pt11, pt12);
295     if (line == nullptr) {
296         delete polygon;
297         EXPECT_EQ(1, 0);
298         return;
299     }
300     Clip(*polygon, *line);
301     uint16_t i = 0;
302     EXPECT_EQ(polygon->GetVertexNum(), 3);
303     EXPECT_EQ(polygon->operator[](i).x_, FIVEFOLD_VALUE);
304     EXPECT_EQ(polygon->operator[](i++).y_, BASE_VALUE);
305     EXPECT_EQ(polygon->operator[](i).x_, BASE_VALUE);
306     EXPECT_EQ(polygon->operator[](i++).y_, THREEFOLD_VALUE);
307     EXPECT_EQ(polygon->operator[](i).x_, 0);
308     EXPECT_EQ(polygon->operator[](i++).y_, 0);
309 
310     delete polygon;
311     delete line;
312 }
313 } // namespace OHOS
314