1 /*
2  * Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development 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 "DrawingNativeMatrixCommon.h"
17 #include "drawing_error_code.h"
18 #include "drawing_matrix.h"
19 #include "drawing_rect.h"
20 #include "utils/scalar.h"
21 #include "gtest/gtest.h"
22 #include <iostream>
23 #include <random>
24 
25 using namespace testing;
26 using namespace testing::ext;
27 
28 namespace OHOS {
29 namespace Rosen {
30 namespace Drawing {
31 
32 /*
33  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0100
34  * @tc.name: testMatrixCreateDestroyNormal
35  * @tc.desc: Test for creating and destroying a matrix with normal parameters.
36  * @tc.size  : SmallTest
37  * @tc.type  : Function
38  * @tc.level : Level 0
39  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateDestroyNormal, TestSize.Level0)40 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateDestroyNormal, TestSize.Level0) {
41     // 1. OH_Drawing_MatrixCreate
42     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
43     EXPECT_NE(matrix, nullptr);
44     // 2. OH_Drawing_MatrixDestroy
45     OH_Drawing_MatrixDestroy(matrix);
46 }
47 
48 /*
49  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0101
50  * @tc.name: testMatrixCreateDestroyNULL
51  * @tc.desc: Test for creating and destroying a matrix with NULL parameters.
52  * @tc.size  : SmallTest
53  * @tc.type  : Function
54  * @tc.level : Level 3
55  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateDestroyNULL, TestSize.Level3)56 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateDestroyNULL, TestSize.Level3) {
57     // 1. OH_Drawing_MatrixDestroy with nullptr parameter
58     OH_Drawing_MatrixDestroy(nullptr);
59 }
60 
61 /*
62  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0102
63  * @tc.name: testMatrixCreateDestroyMultipleCalls
64  * @tc.desc: Test for multiple calls of creating and destroying a matrix.
65  * @tc.size  : SmallTest
66  * @tc.type  : Function
67  * @tc.level : Level 3
68  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateDestroyMultipleCalls, TestSize.Level3)69 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateDestroyMultipleCalls, TestSize.Level3) {
70     // 1. Call OH_Drawing_MatrixCreate 10 times
71     OH_Drawing_Matrix *matrices[10];
72     for (int i = 0; i < 10; i++) {
73         matrices[i] = OH_Drawing_MatrixCreate();
74         EXPECT_NE(matrices[i], nullptr);
75     }
76     // 2. Call OH_Drawing_MatrixDestroy 10 times
77     for (int i = 0; i < 10; i++) {
78         OH_Drawing_MatrixDestroy(matrices[i]);
79     }
80     // 3. Call OH_Drawing_MatrixCreate and OH_Drawing_MatrixDestroy alternately 10 times
81     for (int i = 0; i < 10; i++) {
82         OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
83         EXPECT_NE(matrix, nullptr);
84         OH_Drawing_MatrixDestroy(matrix);
85     }
86 }
87 
88 /*
89  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0200
90  * @tc.name: testMatrixCreateRotationNormal
91  * @tc.desc: Test for creating a rotation matrix with normal parameters.
92  * @tc.size  : SmallTest
93  * @tc.type  : Function
94  * @tc.level : Level 0
95  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationNormal, TestSize.Level0)96 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationNormal, TestSize.Level0) {
97     // 1. OH_Drawing_MatrixCreateRotation, rotate angles deg traverse 0 degrees, 180 degrees, 360 degrees, -90 degrees,
98     // -180 degrees, -360 degrees, 45.5 degrees, x\y cover decimals and integers
99     float degs[] = {0, 180, 360, -90, -180, -360, 45.5};
100     float x[] = {0, 10, 10.0f, 20, 20.0f, 30, 30.0f};
101     float y[] = {0, 10, 10.0f, 20, 20.0f, 30, 30.0f};
102     for (int i = 0; i < 7; i++) {
103         OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateRotation(degs[i], x[i], y[i]);
104         EXPECT_NE(matrix, nullptr);
105         OH_Drawing_MatrixDestroy(matrix);
106     }
107 }
108 
109 /*
110  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0201
111  * @tc.name: testMatrixCreateRotationNull
112  * @tc.desc: Test for creating a rotation matrix with NULL parameters.
113  * @tc.size  : SmallTest
114  * @tc.type  : Function
115  * @tc.level : Level 3
116  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationNull, TestSize.Level3)117 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationNull, TestSize.Level3) {
118     // 1. OH_Drawing_MatrixCreateRotation with the first parameter as null
119     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateRotation(0, 10.0f, 10.0f);
120     // 2. OH_Drawing_MatrixCreateRotation with the second parameter as null
121     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateRotation(180, 0, 10.0f);
122     // 3. OH_Drawing_MatrixCreateRotation with the third parameter as null
123     OH_Drawing_Matrix *matrix3 = OH_Drawing_MatrixCreateRotation(360, 10.0f, 0);
124     // 4. Free memory
125     OH_Drawing_MatrixDestroy(matrix);
126     OH_Drawing_MatrixDestroy(matrix2);
127     OH_Drawing_MatrixDestroy(matrix3);
128 }
129 
130 /*
131  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0202
132  * @tc.name: testMatrixCreateRotationAbnormal
133  * @tc.desc: Test for creating a rotation matrix with abnormal parameters.
134  * @tc.size  : SmallTest
135  * @tc.type  : Function
136  * @tc.level : Level 3
137  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationAbnormal, TestSize.Level3)138 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationAbnormal, TestSize.Level3) {
139     // 1. OH_Drawing_MatrixCreateRotation with an input angle greater than 360 degrees
140     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateRotation(361, 10.0f, 10.0f);
141     // 2. OH_Drawing_MatrixCreateRotation with a negative value for the x parameter
142     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateRotation(180, -10.0f, 10.0f);
143     // 3. OH_Drawing_MatrixCreateRotation with a negative value for the y parameter
144     OH_Drawing_Matrix *matrix3 = OH_Drawing_MatrixCreateRotation(180, 10.0f, -10.0f);
145     // 4. Free memory
146     OH_Drawing_MatrixDestroy(matrix);
147     OH_Drawing_MatrixDestroy(matrix2);
148     OH_Drawing_MatrixDestroy(matrix3);
149 }
150 
151 /*
152  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0203
153  * @tc.name: testMatrixCreateRotationMaximum
154  * @tc.desc: Test for creating a rotation matrix with maximum values.
155  * @tc.size  : SmallTest
156  * @tc.type  : Function
157  * @tc.level : Level 3
158  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationMaximum, TestSize.Level3)159 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationMaximum, TestSize.Level3) {
160     // 1. OH_Drawing_MatrixCreateRotation with the maximum value of the rotation angle parameter deg
161     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateRotation(FLT_MAX, 10.0f, 10.0f);
162     // 2. OH_Drawing_MatrixCreateRotation with the maximum value of the x parameter
163     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateRotation(180, FLT_MAX, 10.0f);
164     // 3. OH_Drawing_MatrixCreateRotation with the maximum value of the y parameter
165     OH_Drawing_Matrix *matrix3 = OH_Drawing_MatrixCreateRotation(180, 10.0f, FLT_MAX);
166     // 4. Free memory
167     OH_Drawing_MatrixDestroy(matrix);
168     OH_Drawing_MatrixDestroy(matrix2);
169     OH_Drawing_MatrixDestroy(matrix3);
170 }
171 
172 /*
173  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0205
174  * @tc.name: testMatrixCreateRotationMultipleCalls
175  * @tc.desc: Test for multiple calls of creating a rotation matrix.
176  * @tc.size  : SmallTest
177  * @tc.type  : Function
178  * @tc.level : Level 3
179  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationMultipleCalls, TestSize.Level3)180 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateRotationMultipleCalls, TestSize.Level3) {
181     // 1. Call OH_Drawing_MatrixCreateRotation 10 times, each time with different rotation angles and coordinate points
182     std::random_device rd;
183     std::mt19937 gen(rd());
184     std::uniform_int_distribution<int> deg_dist(-360, 360);
185     std::uniform_real_distribution<float> x_dist(0.0f, 100.0f);
186     std::uniform_real_distribution<float> y_dist(0.0f, 100.0f);
187     for (int i = 0; i < 10; i++) {
188         float deg = deg_dist(gen);
189         float x = x_dist(gen);
190         float y = y_dist(gen);
191         OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateRotation(deg, x, y);
192         EXPECT_NE(matrix, nullptr);
193         OH_Drawing_MatrixDestroy(matrix);
194     }
195 }
196 
197 /*
198  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0300
199  * @tc.name: testMatrixCreateTranslationNormal
200  * @tc.desc: Test for creating a translation matrix with normal parameters.
201  * @tc.size  : SmallTest
202  * @tc.type  : Function
203  * @tc.level : Level 0
204  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationNormal, TestSize.Level0)205 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationNormal, TestSize.Level0) {
206     // 1. OH_Drawing_MatrixCreateTranslation, passing in a decimal number
207     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateTranslation(10.0f, 10.0f);
208     // 2. OH_Drawing_MatrixCreateTranslation, passing in an integer
209     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateTranslation(20, 20);
210     // 3. Free memory
211     OH_Drawing_MatrixDestroy(matrix);
212     OH_Drawing_MatrixDestroy(matrix2);
213 }
214 
215 /*
216  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0301
217  * @tc.name: testMatrixCreateTranslationNull
218  * @tc.desc: Test for creating a translation matrix with NULL parameters.
219  * @tc.size  : SmallTest
220  * @tc.type  : Function
221  * @tc.level : Level 3
222  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationNull, TestSize.Level3)223 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationNull, TestSize.Level3) {
224     // 1. OH_Drawing_MatrixCreateTranslation with the first parameter as null
225     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateTranslation(0, 10.0f);
226     // 2. OH_Drawing_MatrixCreateTranslation with the second parameter as null
227     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateTranslation(10.0f, 0);
228     // 3. Free memory
229     OH_Drawing_MatrixDestroy(matrix);
230     OH_Drawing_MatrixDestroy(matrix2);
231 }
232 
233 /*
234  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0302
235  * @tc.name: testMatrixCreateTranslationAbnormal
236  * @tc.desc: Test for creating a translation matrix with abnormal parameters.
237  * @tc.size  : SmallTest
238  * @tc.type  : Function
239  * @tc.level : Level 3
240  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationAbnormal, TestSize.Level3)241 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationAbnormal, TestSize.Level3) {
242     // 1. OH_Drawing_MatrixCreateTranslation with the first parameter as a negative number
243     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateTranslation(-10.0f, 10.0f);
244     // 2. OH_Drawing_MatrixCreateTranslation with the second parameter as a negative number
245     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateTranslation(10.0f, -10.0f);
246     // 3. Free memory
247     OH_Drawing_MatrixDestroy(matrix);
248     OH_Drawing_MatrixDestroy(matrix2);
249 }
250 
251 /*
252  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0303
253  * @tc.name: testMatrixCreateTranslationMaximum
254  * @tc.desc: Test for creating a translation matrix with maximum values.
255  * @tc.size  : SmallTest
256  * @tc.type  : Function
257  * @tc.level : Level 3
258  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationMaximum, TestSize.Level3)259 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationMaximum, TestSize.Level3) {
260     // 1. OH_Drawing_MatrixCreateTranslation with the first parameter as the maximum value
261     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateTranslation(FLT_MAX, 10.0f);
262     // 2. OH_Drawing_MatrixCreateTranslation with the second parameter as the maximum value
263     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateTranslation(10.0f, FLT_MAX);
264     // 3. Free memory
265     OH_Drawing_MatrixDestroy(matrix);
266     OH_Drawing_MatrixDestroy(matrix2);
267 }
268 
269 /*
270  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0304
271  * @tc.name: testMatrixCreateTranslationMultipleCalls
272  * @tc.desc: Test for multiple calls of creating a translation matrix.
273  * @tc.size  : SmallTest
274  * @tc.type  : Function
275  * @tc.level : Level 3
276  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationMultipleCalls, TestSize.Level3)277 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateTranslationMultipleCalls, TestSize.Level3) {
278     std::random_device rd;
279     std::mt19937 gen(rd());
280     std::uniform_real_distribution<float> dis(0.0, 100.0);
281     // 1. Call OH_Drawing_MatrixCreateTranslation 10 times, each time with different random values for dx and dy
282     for (int i = 0; i < 10; i++) {
283         float dx = dis(gen);
284         float dy = dis(gen);
285         OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateTranslation(dx, dy);
286         EXPECT_NE(matrix, nullptr);
287         OH_Drawing_MatrixDestroy(matrix);
288     }
289 }
290 
291 /*
292  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0400
293  * @tc.name: testMatrixMatrixSetGetMatrixNormal
294  * @tc.desc: Test for setting and getting matrix values with normal parameters.
295  * @tc.size  : SmallTest
296  * @tc.type  : Function
297  * @tc.level : Level 0
298  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixNormal, TestSize.Level0)299 HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixNormal, TestSize.Level0) {
300     // 1. OH_Drawing_MatrixCreate
301     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
302     EXPECT_NE(matrix, nullptr);
303     // 2. OH_Drawing_MatrixSetMatrix with integer parameters, calling OH_Drawing_MatrixGetAll and
304     // OH_Drawing_MatrixGetValue interfaces
305     OH_Drawing_MatrixSetMatrix(matrix, 1, 0, 0, 0, -1, 0, 0, 0, 1);
306     float value[9];
307     OH_Drawing_ErrorCode code = OH_Drawing_MatrixGetAll(matrix, value);
308     EXPECT_EQ(code, OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
309     OH_Drawing_MatrixGetValue(matrix, 0);
310     EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 0), 1);
311     // 3. OH_Drawing_MatrixSetMatrix with floating-point parameters, calling OH_Drawing_MatrixGetAll and
312     // OH_Drawing_MatrixGetValue interfaces
313     OH_Drawing_MatrixSetMatrix(matrix, 1.1, 0, 0, 0, -1.1, 0, 0, 0, 1.1);
314     OH_Drawing_ErrorCode code2 = OH_Drawing_MatrixGetAll(matrix, value);
315     EXPECT_EQ(code2, OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
316     OH_Drawing_MatrixGetValue(matrix, 1);
317     EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 1), 0);
318     // 4. Free memory
319     OH_Drawing_MatrixDestroy(matrix);
320 }
321 
322 /*
323  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0401
324  * @tc.name: testMatrixMatrixSetGetMatrixNull
325  * @tc.desc: Test for setting and getting matrix values with NULL parameters.
326  * @tc.size  : SmallTest
327  * @tc.type  : Function
328  * @tc.level : Level 3
329  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixNull, TestSize.Level3)330 HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixNull, TestSize.Level3) {
331     // 1. OH_Drawing_MatrixCreate
332     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
333     EXPECT_NE(matrix, nullptr);
334     // 2. OH_Drawing_MatrixSetMatrix with the first parameter as null, check the error code with OH_Drawing_ErrorCodeGet
335     OH_Drawing_MatrixSetMatrix(nullptr, 1, 0, 0, 0, -1, 0, 0, 0, 1);
336     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
337     // 3. OH_Drawing_MatrixSetMatrix with the second to tenth parameters as null
338     OH_Drawing_MatrixSetMatrix(matrix, 0, 1, 1, 1, 1, 1, 1, 1, 1);
339     OH_Drawing_MatrixSetMatrix(matrix, 1, 0, 1, 1, 1, 1, 1, 1, 1);
340     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 0, 1, 1, 1, 1, 1, 1);
341     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 0, 1, 1, 1, 1, 1);
342     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 0, 1, 1, 1, 1);
343     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 0, 1, 1, 1);
344     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 1, 0, 1, 1);
345     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 1, 1, 0, 1);
346     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 1, 1, 1, 0);
347     // 4. OH_Drawing_MatrixGetAll with the first parameter as null, check the error code with OH_Drawing_ErrorCodeGet
348     float value[9];
349     OH_Drawing_ErrorCode code = OH_Drawing_MatrixGetAll(nullptr, value);
350     EXPECT_EQ(code, OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
351     // 5. OH_Drawing_MatrixGetAll with the second parameter as an empty array, check the error code with
352     // OH_Drawing_ErrorCodeGet
353     float value2[0];
354     OH_Drawing_ErrorCode code2 = OH_Drawing_MatrixGetAll(matrix, value2);
355     EXPECT_EQ(code2, OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
356     // 6. OH_Drawing_MatrixGetAll with the second parameter as null, check the error code with OH_Drawing_ErrorCodeGet
357     OH_Drawing_ErrorCode code3 = OH_Drawing_MatrixGetAll(matrix, nullptr);
358     EXPECT_EQ(code3, OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
359     // 7. OH_Drawing_MatrixGetValue with the first parameter as null, check the error code with OH_Drawing_ErrorCodeGet
360     OH_Drawing_MatrixGetValue(nullptr, 0);
361     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
362     // 8. OH_Drawing_MatrixGetValue with the second parameter as null
363     OH_Drawing_MatrixGetValue(matrix, 0);
364     // 9. Free memory
365     OH_Drawing_MatrixDestroy(matrix);
366 }
367 
368 /*
369  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0402
370  * @tc.name: testMatrixMatrixSetGetMatrixAbnormal
371  * @tc.desc: Test for setting and getting matrix values with abnormal parameters.
372  * @tc.size  : SmallTest
373  * @tc.type  : Function
374  * @tc.level : Level 3
375  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixAbnormal, TestSize.Level3)376 HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixAbnormal, TestSize.Level3) {
377     // 1. OH_Drawing_MatrixCreate
378     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
379     // 2. OH_Drawing_MatrixSetMatrix with the second to tenth parameters as negative numbers
380     OH_Drawing_MatrixSetMatrix(matrix, -1, 1, 1, 1, 1, 1, 1, 1, 1);
381     OH_Drawing_MatrixSetMatrix(matrix, 1, -1, 1, 1, 1, 1, 1, 1, 1);
382     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, -1, 1, 1, 1, 1, 1, 1);
383     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, -1, 1, 1, 1, 1, 1);
384     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, -1, 1, 1, 1, 1);
385     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, -1, 1, 1, 1);
386     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 1, -1, 1, 1);
387     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 1, 1, -1, 1);
388     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 1, 1, 1, -1);
389     // 3. OH_Drawing_MatrixGetAll with an array 'value' of length less than 9
390     float value2[9];
391     OH_Drawing_ErrorCode code2 = OH_Drawing_MatrixGetAll(matrix, value2);
392     EXPECT_EQ(code2, OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
393     // 4. OH_Drawing_MatrixGetValue with the parameter 'index' as -1, check the error code with OH_Drawing_ErrorCodeGet
394     OH_Drawing_MatrixGetValue(matrix, -1);
395     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
396     // 5. OH_Drawing_MatrixGetValue with the parameter 'index' as 9, check the error code with OH_Drawing_ErrorCodeGet
397     OH_Drawing_MatrixGetValue(matrix, 9);
398     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
399     // 6. Free memory
400     OH_Drawing_MatrixDestroy(matrix);
401 }
402 
403 /*
404  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0403
405  * @tc.name: testMatrixMatrixSetGetMatrixMaximum
406  * @tc.desc: Test for setting and getting matrix values with maximum values.
407  * @tc.size  : SmallTest
408  * @tc.type  : Function
409  * @tc.level : Level 3
410  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixMaximum, TestSize.Level3)411 HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixMaximum, TestSize.Level3) {
412     // 1. OH_Drawing_MatrixSetMatrix with the second to tenth parameters as maximum values
413     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
414     OH_Drawing_MatrixSetMatrix(matrix, FLT_MAX, 1, 1, 1, 1, 1, 1, 1, 1);
415     OH_Drawing_MatrixSetMatrix(matrix, 1, FLT_MAX, 1, 1, 1, 1, 1, 1, 1);
416     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, FLT_MAX, 1, 1, 1, 1, 1, 1);
417     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, FLT_MAX, 1, 1, 1, 1, 1);
418     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, FLT_MAX, 1, 1, 1, 1);
419     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, FLT_MAX, 1, 1, 1);
420     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 1, FLT_MAX, 1, 1);
421     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 1, 1, FLT_MAX, 1);
422     OH_Drawing_MatrixSetMatrix(matrix, 1, 1, 1, 1, 1, 1, 1, 1, FLT_MAX);
423     // 2. Free memory
424     OH_Drawing_MatrixDestroy(matrix);
425 }
426 
427 /*
428  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0404
429  * @tc.name: testMatrixMatrixSetGetMatrixMultipleCalls
430  * @tc.desc: Test for multiple calls of setting and getting matrix values.
431  * @tc.size  : SmallTest
432  * @tc.type  : Function
433  * @tc.level : Level 3
434  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixMultipleCalls, TestSize.Level3)435 HWTEST_F(DrawingNativeMatrixTest, testMatrixMatrixSetGetMatrixMultipleCalls, TestSize.Level3) {
436     // 1. OH_Drawing_MatrixCreate
437     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
438     // 2. OH_Drawing_MatrixSetMatrix with random parameters, calling the interface 10 times, corresponding to calling
439     // OH_Drawing_MatrixGetAll and OH_Drawing_MatrixGetValue interfaces
440     std::random_device rd;
441     std::mt19937 gen(rd());
442     std::uniform_real_distribution<float> dis(0.0, 100.0);
443     for (int i = 0; i < 10; i++) {
444         float value[9];
445         float val0 = dis(gen);
446         float val1 = dis(gen);
447         float val2 = dis(gen);
448         float val3 = dis(gen);
449         float val4 = dis(gen);
450         float val5 = dis(gen);
451         float val6 = dis(gen);
452         float val7 = dis(gen);
453         float val8 = dis(gen);
454         OH_Drawing_MatrixSetMatrix(matrix, val0, val1, val2, val3, val4, val5, val6, val7, val8);
455         OH_Drawing_ErrorCode code = OH_Drawing_MatrixGetAll(matrix, value);
456         EXPECT_EQ(code, OH_Drawing_ErrorCode::OH_DRAWING_SUCCESS);
457         EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 0), val0);
458         EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 1), val1);
459         EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 2), val2);
460         EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 3), val3);
461         EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 4), val4);
462         EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 5), val5);
463         EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 6), val6);
464         EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 7), val7);
465         EXPECT_EQ(OH_Drawing_MatrixGetValue(matrix, 8), val8);
466     }
467     // 3. Free memory
468     OH_Drawing_MatrixDestroy(matrix);
469 }
470 
471 /*
472  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0500
473  * @tc.name: testMatrixTranslateNormal
474  * @tc.desc: Test for translating a matrix with normal parameters.
475  * @tc.size  : SmallTest
476  * @tc.type  : Function
477  * @tc.level : Level 0
478  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateNormal, TestSize.Level0)479 HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateNormal, TestSize.Level0) {
480     // 1. OH_Drawing_MatrixCreate
481     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
482     EXPECT_NE(matrix, nullptr);
483     // 2. OH_Drawing_MatrixTranslate, passing in floating point numbers
484     OH_Drawing_MatrixTranslate(matrix, 10.0f, 10.0f);
485     // 3. OH_Drawing_MatrixTranslate, passing in integers
486     OH_Drawing_MatrixTranslate(matrix, 20, 20);
487     // 4. Free memory
488     OH_Drawing_MatrixDestroy(matrix);
489 }
490 
491 /*
492  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0501
493  * @tc.name: testMatrixTranslateNull
494  * @tc.desc: Test for translating a matrix with NULL parameters.
495  * @tc.size  : SmallTest
496  * @tc.type  : Function
497  * @tc.level : Level 3
498  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateNull, TestSize.Level3)499 HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateNull, TestSize.Level3) {
500     // 1. OH_Drawing_MatrixCreate
501     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
502     EXPECT_NE(matrix, nullptr);
503     // 2. OH_Drawing_MatrixTranslate with the first parameter as null, check the error code with OH_Drawing_ErrorCodeGet
504     OH_Drawing_MatrixTranslate(nullptr, 10.0f, 10.0f);
505     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER);
506     // 3. OH_Drawing_MatrixTranslate with the second parameter as null
507     OH_Drawing_MatrixTranslate(matrix, 0, 10.0f);
508     // 4. OH_Drawing_MatrixTranslate with the third parameter as null
509     OH_Drawing_MatrixTranslate(matrix, 10.0f, 0);
510     // 5. Free memory
511     OH_Drawing_MatrixDestroy(matrix);
512 }
513 
514 /*
515  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0502
516  * @tc.name: testMatrixTranslateAbnormal
517  * @tc.desc: Test for translating a matrix with abnormal parameters.
518  * @tc.size  : SmallTest
519  * @tc.type  : Function
520  * @tc.level : Level 3
521  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateAbnormal, TestSize.Level3)522 HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateAbnormal, TestSize.Level3) {
523     // 1. OH_Drawing_MatrixCreate
524     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
525     EXPECT_NE(matrix, nullptr);
526     // 2. OH_Drawing_MatrixTranslate with the second parameter as a negative number
527     OH_Drawing_MatrixTranslate(matrix, -10.0f, 10.0f);
528     // 3. OH_Drawing_MatrixTranslate with the third parameter as a negative number
529     OH_Drawing_MatrixTranslate(matrix, 10.0f, -10.0f);
530     // 4. Free memory
531     OH_Drawing_MatrixDestroy(matrix);
532 }
533 
534 /*
535  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0503
536  * @tc.name: testMatrixTranslateMaximum
537  * @tc.desc: Test for translating a matrix with maximum values.
538  * @tc.size  : SmallTest
539  * @tc.type  : Function
540  * @tc.level : Level 3
541  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateMaximum, TestSize.Level3)542 HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateMaximum, TestSize.Level3) {
543     // 1. OH_Drawing_MatrixCreate
544     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
545     EXPECT_NE(matrix, nullptr);
546     // 2. OH_Drawing_MatrixTranslate with the second parameter as the maximum value
547     OH_Drawing_MatrixTranslate(matrix, FLT_MAX, 10.0f);
548     // 3. OH_Drawing_MatrixTranslate with the third parameter as the maximum value
549     OH_Drawing_MatrixTranslate(matrix, 10.0f, FLT_MAX);
550     // 4. Free memory
551     OH_Drawing_MatrixDestroy(matrix);
552 }
553 
554 /*
555  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0504
556  * @tc.name: testMatrixTranslateMultipleCalls
557  * @tc.desc: Test for multiple calls of translating a matrix.
558  * @tc.size  : SmallTest
559  * @tc.type  : Function
560  * @tc.level : Level 3
561  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateMultipleCalls, TestSize.Level3)562 HWTEST_F(DrawingNativeMatrixTest, testMatrixTranslateMultipleCalls, TestSize.Level3) {
563     // 1. OH_Drawing_MatrixCreate
564     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
565     EXPECT_NE(matrix, nullptr);
566     // 2. OH_Drawing_MatrixTranslate, passing in random numbers for dx and dy
567     std::random_device rd;
568     std::mt19937 gen(rd());
569     std::uniform_real_distribution<float> dis(0.0, 100.0);
570     for (int i = 0; i < 10; i++) {
571         float dx = dis(gen);
572         float dy = dis(gen);
573         OH_Drawing_MatrixTranslate(matrix, dx, dy);
574     }
575     // 3. Free memory
576     OH_Drawing_MatrixDestroy(matrix);
577 }
578 
579 /*
580  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0600
581  * @tc.name: testMatrixRotateNormal
582  * @tc.desc: test for testMatrixRotateNormal.
583  * @tc.size  : SmallTest
584  * @tc.type  : Function
585  * @tc.level : Level 0
586  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateNormal, TestSize.Level0)587 HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateNormal, TestSize.Level0) {
588     // 1. OH_Drawing_MatrixCreate
589     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
590     EXPECT_NE(matrix, nullptr);
591     // 2. OH_Drawing_MatrixRotate, rotate angles include 0 degrees, 180 degrees, 360 degrees, -90 degrees, -180 degrees,
592     // -360 degrees, and 45.5 degrees, px and py cover both decimals and integers
593     OH_Drawing_MatrixRotate(matrix, 0, 0, 0);
594     OH_Drawing_MatrixRotate(matrix, 180, 10, 10);
595     OH_Drawing_MatrixRotate(matrix, 360, 10.0f, 10.0f);
596     OH_Drawing_MatrixRotate(matrix, -90, 20, 20);
597     OH_Drawing_MatrixRotate(matrix, -180, 20.0f, 20.0f);
598     OH_Drawing_MatrixRotate(matrix, -360, 30, 30);
599     OH_Drawing_MatrixRotate(matrix, 45.5, 30.0f, 30.0f);
600     // 3. Free memory
601     OH_Drawing_MatrixDestroy(matrix);
602 }
603 
604 /*
605  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0601
606  * @tc.name: testMatrixRotateNull
607  * @tc.desc: test for testMatrixRotateNull.
608  * @tc.size  : SmallTest
609  * @tc.type  : Function
610  * @tc.level : Level 3
611  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateNull, TestSize.Level3)612 HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateNull, TestSize.Level3) {
613     // 1. OH_Drawing_MatrixCreate
614     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
615     EXPECT_NE(matrix, nullptr);
616     // 2. OH_Drawing_MatrixRotate with the first parameter as null, check the error code with OH_Drawing_ErrorCodeGet
617     OH_Drawing_MatrixRotate(nullptr, 180, 10, 10);
618     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
619     // 3. OH_Drawing_MatrixRotate with the second parameter as null
620     OH_Drawing_MatrixRotate(matrix, 0, 10, 10);
621     // 4. OH_Drawing_MatrixRotate with the third parameter as null
622     OH_Drawing_MatrixRotate(matrix, 180, 0, 10);
623     // 5. OH_Drawing_MatrixRotate with the fourth parameter as null
624     OH_Drawing_MatrixRotate(matrix, 180, 10, 0);
625     // 6. Free memory
626     OH_Drawing_MatrixDestroy(matrix);
627 }
628 
629 /*
630  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0602
631  * @tc.name: testMatrixRotateAbnormal
632  * @tc.desc: test for testMatrixRotateAbnormal.
633  * @tc.size  : SmallTest
634  * @tc.type  : Function
635  * @tc.level : Level 3
636  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateAbnormal, TestSize.Level3)637 HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateAbnormal, TestSize.Level3) {
638     // 1. OH_Drawing_MatrixCreate
639     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
640     // 2. OH_Drawing_MatrixRotate with the third parameter as a negative number
641     OH_Drawing_MatrixRotate(matrix, 180, -10, 10);
642     // 3. OH_Drawing_MatrixRotate with the fourth parameter as a negative number
643     OH_Drawing_MatrixRotate(matrix, 180, 10, -10);
644     // 4. Free memory
645     OH_Drawing_MatrixDestroy(matrix);
646 }
647 
648 /*
649  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0603
650  * @tc.name: testMatrixRotateMaximum
651  * @tc.desc: test for testMatrixRotateMaximum.
652  * @tc.size  : SmallTest
653  * @tc.type  : Function
654  * @tc.level : Level 3
655  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateMaximum, TestSize.Level3)656 HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateMaximum, TestSize.Level3) {
657     // 1. OH_Drawing_MatrixCreate
658     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
659     // 2. OH_Drawing_MatrixRotate with the second parameter as the maximum value
660     OH_Drawing_MatrixRotate(matrix, FLT_MAX, 10.0f, 10.0f);
661     // 3. OH_Drawing_MatrixRotate with the third parameter as the maximum value
662     OH_Drawing_MatrixRotate(matrix, 180, FLT_MAX, 10.0f);
663     // 4. OH_Drawing_MatrixRotate with the fourth parameter as the maximum value
664     OH_Drawing_MatrixRotate(matrix, 180, 10.0f, FLT_MAX);
665     // 5. Free memory
666     OH_Drawing_MatrixDestroy(matrix);
667 }
668 
669 /*
670  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0604
671  * @tc.name: testMatrixRotateMultipleCalls
672  * @tc.desc: test for testMatrixRotateMultipleCalls.
673  * @tc.size  : SmallTest
674  * @tc.type  : Function
675  * @tc.level : Level 3
676  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateMultipleCalls, TestSize.Level3)677 HWTEST_F(DrawingNativeMatrixTest, testMatrixRotateMultipleCalls, TestSize.Level3) {
678     // 1. OH_Drawing_MatrixCreate
679     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
680     // 2. OH_Drawing_MatrixRotate, passing in random numbers for degree, px, and py
681     std::random_device rd;
682     std::mt19937 gen(rd());
683     std::uniform_real_distribution<float> dis(0.0, 100.0);
684     for (int i = 0; i < 10; i++) {
685         float degree = dis(gen);
686         float px = dis(gen);
687         float py = dis(gen);
688         OH_Drawing_MatrixRotate(matrix, degree, px, py);
689     }
690     // 3. Free memory
691     OH_Drawing_MatrixDestroy(matrix);
692 }
693 
694 /*
695  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0700
696  * @tc.name: testMatrixCreateScaleNormal
697  * @tc.desc: test for testMatrixCreateScaleNormal.
698  * @tc.size  : SmallTest
699  * @tc.type  : Function
700  * @tc.level : Level 0
701  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleNormal, TestSize.Level0)702 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleNormal, TestSize.Level0) {
703     // 1. OH_Drawing_MatrixCreateScale, passing in decimals
704     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateScale(10.0f, 10.0f, 10.0f, 10.0f);
705     EXPECT_NE(matrix, nullptr);
706     // 2. OH_Drawing_MatrixCreateScale, passing in integers
707     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateScale(20, 20, 20, 20);
708     EXPECT_NE(matrix2, nullptr);
709     // 3. Free memory
710     OH_Drawing_MatrixDestroy(matrix);
711     OH_Drawing_MatrixDestroy(matrix2);
712 }
713 
714 /*
715  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0701
716  * @tc.name: testMatrixCreateScaleNull
717  * @tc.desc: test for testMatrixCreateScaleNull.
718  * @tc.size  : SmallTest
719  * @tc.type  : Function
720  * @tc.level : Level 3
721  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleNull, TestSize.Level3)722 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleNull, TestSize.Level3) {
723     // 1. OH_Drawing_MatrixCreateScale with the first parameter as null
724     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateScale(0, 10.0f, 10.0f, 10.0f);
725     // 2. OH_Drawing_MatrixCreateScale with the second parameter as null
726     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateScale(10.0f, 0, 10.0f, 10.0f);
727     // 3. OH_Drawing_MatrixCreateScale with the third parameter as null
728     OH_Drawing_Matrix *matrix3 = OH_Drawing_MatrixCreateScale(10.0f, 10.0f, 0, 10.0f);
729     // 4. OH_Drawing_MatrixCreateScale with the fourth parameter as null
730     OH_Drawing_Matrix *matrix4 = OH_Drawing_MatrixCreateScale(10.0f, 10.0f, 10.0f, 0);
731     // 5. Free memory
732     OH_Drawing_MatrixDestroy(matrix);
733     OH_Drawing_MatrixDestroy(matrix2);
734     OH_Drawing_MatrixDestroy(matrix3);
735     OH_Drawing_MatrixDestroy(matrix4);
736 }
737 
738 /*
739  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0702
740  * @tc.name: testMatrixCreateScaleAbnormal
741  * @tc.desc: test for testMatrixCreateScaleAbnormal.
742  * @tc.size  : SmallTest
743  * @tc.type  : Function
744  * @tc.level : Level 3
745  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleAbnormal, TestSize.Level3)746 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleAbnormal, TestSize.Level3) {
747     // 1. OH_Drawing_MatrixCreateScale with the first parameter as a negative number
748     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateScale(-10.0f, 10.0f, 10.0f, 10.0f);
749     // 2. OH_Drawing_MatrixCreateScale with the second parameter as a negative number
750     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateScale(10.0f, -10.0f, 10.0f, 10.0f);
751     // 3. OH_Drawing_MatrixCreateScale with the third parameter as a negative number
752     OH_Drawing_Matrix *matrix3 = OH_Drawing_MatrixCreateScale(10.0f, 10.0f, -10.0f, 10.0f);
753     // 4. OH_Drawing_MatrixCreateScale with the fourth parameter as a negative number
754     OH_Drawing_Matrix *matrix4 = OH_Drawing_MatrixCreateScale(10.0f, 10.0f, 10.0f, -10.0f);
755     // 5. Free memory
756     OH_Drawing_MatrixDestroy(matrix);
757     OH_Drawing_MatrixDestroy(matrix2);
758     OH_Drawing_MatrixDestroy(matrix3);
759     OH_Drawing_MatrixDestroy(matrix4);
760 }
761 
762 /*
763  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0703
764  * @tc.name: testMatrixCreateScaleMaximum
765  * @tc.desc: test for testMatrixCreateScaleMaximum.
766  * @tc.size  : SmallTest
767  * @tc.type  : Function
768  * @tc.level : Level 3
769  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleMaximum, TestSize.Level3)770 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleMaximum, TestSize.Level3) {
771     // 1. OH_Drawing_MatrixCreateScale with the first parameter as the maximum value
772     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateScale(FLT_MAX, 10.0f, 10.0f, 10.0f);
773     // 2. OH_Drawing_MatrixCreateScale with the second parameter as the maximum value
774     OH_Drawing_Matrix *matrix2 = OH_Drawing_MatrixCreateScale(10.0f, FLT_MAX, 10.0f, 10.0f);
775     // 3. OH_Drawing_MatrixCreateScale with the third parameter as the maximum value
776     OH_Drawing_Matrix *matrix3 = OH_Drawing_MatrixCreateScale(10.0f, 10.0f, FLT_MAX, 10.0f);
777     // 4. OH_Drawing_MatrixCreateScale with the fourth parameter as the maximum value
778     OH_Drawing_Matrix *matrix4 = OH_Drawing_MatrixCreateScale(10.0f, 10.0f, 10.0f, FLT_MAX);
779     // 5. Free memory
780     OH_Drawing_MatrixDestroy(matrix);
781     OH_Drawing_MatrixDestroy(matrix2);
782     OH_Drawing_MatrixDestroy(matrix3);
783     OH_Drawing_MatrixDestroy(matrix4);
784 }
785 
786 /*
787  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0704
788  * @tc.name: testMatrixCreateScaleMultipleCalls
789  * @tc.desc: test for testMatrixCreateScaleMultipleCalls.
790  * @tc.size  : SmallTest
791  * @tc.type  : Function
792  * @tc.level : Level 3
793  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleMultipleCalls, TestSize.Level3)794 HWTEST_F(DrawingNativeMatrixTest, testMatrixCreateScaleMultipleCalls, TestSize.Level3) {
795     // 1. Call OH_Drawing_MatrixCreateScale 10 times with random numbers for sx, sy, px, and py, and ensure successful
796     // execution
797     std::random_device rd;
798     std::mt19937 gen(rd());
799     std::uniform_real_distribution<float> dis(0.0, 100.0);
800     for (int i = 0; i < 10; i++) {
801         float sx = dis(gen);
802         float sy = dis(gen);
803         float px = dis(gen);
804         float py = dis(gen);
805         OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreateScale(sx, sy, px, py);
806         EXPECT_NE(matrix, nullptr);
807         OH_Drawing_MatrixDestroy(matrix);
808     }
809 }
810 
811 /*
812  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0800
813  * @tc.name: testMatrixScaleNormal
814  * @tc.desc: test for testMatrixScaleNormal.
815  * @tc.size  : SmallTest
816  * @tc.type  : Function
817  * @tc.level : Level 0
818  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleNormal, TestSize.Level0)819 HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleNormal, TestSize.Level0) {
820     // 1. OH_Drawing_MatrixCreate
821     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
822     // 2. OH_Drawing_MatrixScale, passing in decimals
823     OH_Drawing_MatrixScale(matrix, 10.0f, 10.0f, 10.0f, 10.0f);
824     // 3. OH_Drawing_MatrixScale, passing in integers
825     OH_Drawing_MatrixScale(matrix, 20, 20, 20, 20);
826     // 4. Free memory
827     OH_Drawing_MatrixDestroy(matrix);
828 }
829 
830 /*
831  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0801
832  * @tc.name: testMatrixScaleNull
833  * @tc.desc: test for testMatrixScaleNull.
834  * @tc.size  : SmallTest
835  * @tc.type  : Function
836  * @tc.level : Level 3
837  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleNull, TestSize.Level3)838 HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleNull, TestSize.Level3) {
839     // 1. OH_Drawing_MatrixCreate
840     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
841     // 2. OH_Drawing_MatrixScale with the first parameter as null, check the error code using OH_Drawing_ErrorCodeGet
842     OH_Drawing_MatrixScale(nullptr, 10.0f, 10.0f, 10.0f, 10.0f);
843     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
844     // 3. OH_Drawing_MatrixScale with the second parameter as null
845     OH_Drawing_MatrixScale(matrix, 0, 10.0f, 10.0f, 10.0f);
846     // 4. OH_Drawing_MatrixScale with the third parameter as null
847     OH_Drawing_MatrixScale(matrix, 10.0f, 0, 10.0f, 10.0f);
848     // 5. OH_Drawing_MatrixScale with the fourth parameter as null
849     OH_Drawing_MatrixScale(matrix, 10.0f, 10.0f, 0, 10.0f);
850     // 6. OH_Drawing_MatrixScale with the fifth parameter as null
851     OH_Drawing_MatrixScale(matrix, 10.0f, 10.0f, 10.0f, 0);
852     // 7. Free memory
853     OH_Drawing_MatrixDestroy(matrix);
854 }
855 
856 /*
857  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0802
858  * @tc.name: testMatrixScaleAbnormal
859  * @tc.desc: test for testMatrixScaleAbnormal.
860  * @tc.size  : SmallTest
861  * @tc.type  : Function
862  * @tc.level : Level 3
863  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleAbnormal, TestSize.Level3)864 HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleAbnormal, TestSize.Level3) {
865     // 1. OH_Drawing_MatrixCreate
866     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
867     // 2. OH_Drawing_MatrixScale with the second parameter as a negative number
868     OH_Drawing_MatrixScale(matrix, -10.0f, 10.0f, 10.0f, 10.0f);
869     // 3. OH_Drawing_MatrixScale with the third parameter as a negative number
870     OH_Drawing_MatrixScale(matrix, 10.0f, -10.0f, 10.0f, 10.0f);
871     // 4. OH_Drawing_MatrixScale with the fourth parameter as a negative number
872     OH_Drawing_MatrixScale(matrix, 10.0f, 10.0f, -10.0f, 10.0f);
873     // 5. OH_Drawing_MatrixScale with the fifth parameter as a negative number
874     OH_Drawing_MatrixScale(matrix, 10.0f, 10.0f, 10.0f, -10.0f);
875     // 6. Free memory
876     OH_Drawing_MatrixDestroy(matrix);
877 }
878 
879 /*
880  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0803
881  * @tc.name: testMatrixScaleMaximum
882  * @tc.desc: test for testMatrixScaleMaximum.
883  * @tc.size  : SmallTest
884  * @tc.type  : Function
885  * @tc.level : Level 3
886  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleMaximum, TestSize.Level3)887 HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleMaximum, TestSize.Level3) {
888     // 1. OH_Drawing_MatrixCreate
889     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
890     // 2. OH_Drawing_MatrixScale with the second parameter as the maximum value
891     OH_Drawing_MatrixScale(matrix, FLT_MAX, 10.0f, 10.0f, 10.0f);
892     // 3. OH_Drawing_MatrixScale with the third parameter as the maximum value
893     OH_Drawing_MatrixScale(matrix, 10.0f, FLT_MAX, 10.0f, 10.0f);
894     // 4. OH_Drawing_MatrixScale with the fourth parameter as the maximum value
895     OH_Drawing_MatrixScale(matrix, 10.0f, 10.0f, FLT_MAX, 10.0f);
896     // 5. OH_Drawing_MatrixScale with the fifth parameter as the maximum value
897     OH_Drawing_MatrixScale(matrix, 10.0f, 10.0f, 10.0f, FLT_MAX);
898     // 6. Free memory
899     OH_Drawing_MatrixDestroy(matrix);
900 }
901 
902 /*
903  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0804
904  * @tc.name: testMatrixScaleMultipleCalls
905  * @tc.desc: test for testMatrixScaleMultipleCalls.
906  * @tc.size  : SmallTest
907  * @tc.type  : Function
908  * @tc.level : Level 3
909  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleMultipleCalls, TestSize.Level3)910 HWTEST_F(DrawingNativeMatrixTest, testMatrixScaleMultipleCalls, TestSize.Level3) {
911     // 1. OH_Drawing_MatrixCreate
912     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
913     // 2. Call OH_Drawing_MatrixCreateScale 10 times with random numbers for sx, sy, px, and py
914     std::random_device rd;
915     std::mt19937 gen(rd());
916     std::uniform_real_distribution<float> dis(0.0, 100.0);
917     for (int i = 0; i < 10; i++) {
918         float sx = dis(gen);
919         float sy = dis(gen);
920         float px = dis(gen);
921         float py = dis(gen);
922         OH_Drawing_MatrixScale(matrix, sx, sy, px, py);
923     }
924     // 3. Free memory
925     OH_Drawing_MatrixDestroy(matrix);
926 }
927 
928 /*
929  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0900
930  * @tc.name: testMatrixSetRectToRectNormal
931  * @tc.desc: test for testMatrixSetRectToRectNormal.
932  * @tc.size  : SmallTest
933  * @tc.type  : Function
934  * @tc.level : Level 0
935  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixSetRectToRectNormal, TestSize.Level0)936 HWTEST_F(DrawingNativeMatrixTest, testMatrixSetRectToRectNormal, TestSize.Level0) {
937     // 1. OH_Drawing_MatrixCreate
938     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
939     // 2. Enumerate OH_Drawing_ScaleToFit values in OH_Drawing_MatrixSetRectToRect
940     OH_Drawing_Rect *rectSrc = OH_Drawing_RectCreate(0, 0, 100, 100);
941     OH_Drawing_Rect *rectDst = OH_Drawing_RectCreate(0, 0, 200, 200);
942     OH_Drawing_ScaleToFit fitList[] = {
943         SCALE_TO_FIT_FILL,
944         SCALE_TO_FIT_START,
945         SCALE_TO_FIT_CENTER,
946         SCALE_TO_FIT_END,
947     };
948     for (OH_Drawing_ScaleToFit fit : fitList) {
949         bool isSuccess = OH_Drawing_MatrixSetRectToRect(matrix, rectSrc, rectDst, fit);
950         EXPECT_EQ(isSuccess, true);
951     }
952     // 3. Free memory
953     OH_Drawing_MatrixDestroy(matrix);
954     OH_Drawing_RectDestroy(rectSrc);
955     OH_Drawing_RectDestroy(rectDst);
956 }
957 
958 /*
959  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0901
960  * @tc.name: testMatrixSetRectToRectNull
961  * @tc.desc: test for testMatrixSetRectToRectNull.
962  * @tc.size  : SmallTest
963  * @tc.type  : Function
964  * @tc.level : Level 3
965  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixSetRectToRectNull, TestSize.Level3)966 HWTEST_F(DrawingNativeMatrixTest, testMatrixSetRectToRectNull, TestSize.Level3) {
967     // 1. OH_Drawing_MatrixCreate
968     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
969     OH_Drawing_Rect *rectSrc = OH_Drawing_RectCreate(0, 0, 0, 0);
970     OH_Drawing_Rect *rectDst = OH_Drawing_RectCreate(0, 0, 0, 0);
971     // 2. OH_Drawing_MatrixSetRectToRect, the first parameter is null, check the error code using
972     // OH_Drawing_ErrorCodeGet
973     OH_Drawing_MatrixSetRectToRect(nullptr, rectSrc, rectDst, SCALE_TO_FIT_FILL);
974     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
975     // 3. OH_Drawing_MatrixSetRectToRect, the second parameter is null, check the error code using
976     // OH_Drawing_ErrorCodeGet
977     OH_Drawing_MatrixSetRectToRect(matrix, nullptr, rectDst, SCALE_TO_FIT_FILL);
978     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
979     // 4. OH_Drawing_MatrixSetRectToRect, the third parameter is null, check the error code using
980     // OH_Drawing_ErrorCodeGet
981     OH_Drawing_MatrixSetRectToRect(matrix, rectSrc, nullptr, SCALE_TO_FIT_FILL);
982     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
983     // 5. Free memory
984     OH_Drawing_MatrixDestroy(matrix);
985     OH_Drawing_RectDestroy(rectSrc);
986     OH_Drawing_RectDestroy(rectDst);
987 }
988 
989 /*
990  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_0902
991  * @tc.name: testMatrixSetRectToRectMultipleCalls
992  * @tc.desc: test for testMatrixSetRectToRectMultipleCalls.
993  * @tc.size  : SmallTest
994  * @tc.type  : Function
995  * @tc.level : Level 3
996  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixSetRectToRectMultipleCalls, TestSize.Level3)997 HWTEST_F(DrawingNativeMatrixTest, testMatrixSetRectToRectMultipleCalls, TestSize.Level3) {
998     // 1. OH_Drawing_MatrixCreate
999     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1000     // 2. Call OH_Drawing_MatrixSetRectToRect 10 times with random enum values and different rect sizes
1001     std::random_device rd;
1002     std::mt19937 gen(rd());
1003     std::uniform_real_distribution<float> dis(0.0, 100.0);
1004     OH_Drawing_ScaleToFit fitList[] = {
1005         SCALE_TO_FIT_FILL,
1006         SCALE_TO_FIT_START,
1007         SCALE_TO_FIT_CENTER,
1008         SCALE_TO_FIT_END,
1009     };
1010     for (int i = 0; i < 10; i++) {
1011         OH_Drawing_Rect *rectSrc = OH_Drawing_RectCreate(dis(gen), dis(gen), dis(gen) + 100, dis(gen) + 100);
1012         OH_Drawing_Rect *rectDst = OH_Drawing_RectCreate(dis(gen), dis(gen), dis(gen) + 200, dis(gen) + 200);
1013         OH_Drawing_ScaleToFit fit = fitList[i % 4];
1014         bool isSuccess = OH_Drawing_MatrixSetRectToRect(matrix, rectSrc, rectDst, fit);
1015         EXPECT_EQ(isSuccess, true);
1016         OH_Drawing_RectDestroy(rectSrc);
1017         OH_Drawing_RectDestroy(rectDst);
1018     }
1019 }
1020 
1021 /*
1022  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1000
1023  * @tc.name: testMatrixPreRotateNormal
1024  * @tc.desc: test for testMatrixPreRotateNormal.
1025  * @tc.size  : SmallTest
1026  * @tc.type  : Function
1027  * @tc.level : Level 0
1028  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateNormal, TestSize.Level0)1029 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateNormal, TestSize.Level0) {
1030     // 1. OH_Drawing_MatrixCreate
1031     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1032     // 2. OH_Drawing_MatrixPreRotate, rotate angles include 0 degrees, 180 degrees, 360 degrees, -90 degrees, -180
1033     // degrees, -360 degrees, and 45.5 degrees, px and py cover both decimals and integers
1034     OH_Drawing_MatrixPreRotate(matrix, 0, 0, 0);
1035     OH_Drawing_MatrixPreRotate(matrix, 180, 10, 10);
1036     OH_Drawing_MatrixPreRotate(matrix, 360, 10.0f, 10.0f);
1037     OH_Drawing_MatrixPreRotate(matrix, -90, 20, 20);
1038     OH_Drawing_MatrixPreRotate(matrix, -180, 20.0f, 20.0f);
1039     OH_Drawing_MatrixPreRotate(matrix, -360, 30, 30);
1040     OH_Drawing_MatrixPreRotate(matrix, 45.5, 30.0f, 30.0f);
1041     // 3. Free memory
1042     OH_Drawing_MatrixDestroy(matrix);
1043 }
1044 
1045 /*
1046  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1001
1047  * @tc.name: testMatrixPreRotateNull
1048  * @tc.desc: test for testMatrixPreRotateNull.
1049  * @tc.size  : SmallTest
1050  * @tc.type  : Function
1051  * @tc.level : Level 3
1052  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateNull, TestSize.Level3)1053 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateNull, TestSize.Level3) {
1054     // 1. OH_Drawing_MatrixCreate
1055     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1056     // 2. OH_Drawing_MatrixPreRotate with the first parameter as null, check the error code using
1057     // OH_Drawing_ErrorCodeGet, no crash, error code returns OH_DRAWING_ERROR_INVALID_PARAMETER
1058     OH_Drawing_MatrixPreRotate(nullptr, 180, 10, 10);
1059     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1060     // 3. OH_Drawing_MatrixPreRotate with the second parameter as null
1061     OH_Drawing_MatrixPreRotate(matrix, 0, 10, 10);
1062     // 4. OH_Drawing_MatrixPreRotate with the third parameter as null
1063     OH_Drawing_MatrixPreRotate(matrix, 180, 0, 10);
1064     // 5. OH_Drawing_MatrixPreRotate with the fourth parameter as null
1065     OH_Drawing_MatrixPreRotate(matrix, 180, 10, 0);
1066     // 6. Free memory
1067     OH_Drawing_MatrixDestroy(matrix);
1068 }
1069 
1070 /*
1071  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1002
1072  * @tc.name: testMatrixPreRotateAbnormal
1073  * @tc.desc: test for testMatrixPreRotateAbnormal.
1074  * @tc.size  : SmallTest
1075  * @tc.type  : Function
1076  * @tc.level : Level 3
1077  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateAbnormal, TestSize.Level3)1078 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateAbnormal, TestSize.Level3) {
1079     // 1. OH_Drawing_MatrixCreate
1080     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1081     // 2. OH_Drawing_MatrixPreRotate with a negative value for the third parameter
1082     OH_Drawing_MatrixPreRotate(matrix, 180, -10, 10);
1083     // 3. OH_Drawing_MatrixPreRotate with a negative value for the fourth parameter
1084     OH_Drawing_MatrixPreRotate(matrix, 180, 10, -10);
1085     // 4. Free memory
1086     OH_Drawing_MatrixDestroy(matrix);
1087 }
1088 
1089 /*
1090  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1003
1091  * @tc.name: testMatrixPreRotateMaximum
1092  * @tc.desc: test for testMatrixPreRotateMaximum.
1093  * @tc.size  : SmallTest
1094  * @tc.type  : Function
1095  * @tc.level : Level 3
1096  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateMaximum, TestSize.Level3)1097 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateMaximum, TestSize.Level3) {
1098     // 1. OH_Drawing_MatrixCreate
1099     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1100     // 2. OH_Drawing_MatrixPreRotate with the second parameter as the maximum value
1101     OH_Drawing_MatrixPreRotate(matrix, FLT_MAX, 10.0f, 10.0f);
1102     // 3. OH_Drawing_MatrixPreRotate with the third parameter as the maximum value
1103     OH_Drawing_MatrixPreRotate(matrix, 180, FLT_MAX, 10.0f);
1104     // 4. OH_Drawing_MatrixPreRotate with the fourth parameter as the maximum value
1105     OH_Drawing_MatrixPreRotate(matrix, 180, 10.0f, FLT_MAX);
1106     // 5. Free memory
1107     OH_Drawing_MatrixDestroy(matrix);
1108 }
1109 
1110 /*
1111  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1004
1112  * @tc.name: testMatrixPreRotateMultipleCalls
1113  * @tc.desc: test for testMatrixPreRotateMultipleCalls.
1114  * @tc.size  : SmallTest
1115  * @tc.type  : Function
1116  * @tc.level : Level 3
1117  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateMultipleCalls, TestSize.Level3)1118 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreRotateMultipleCalls, TestSize.Level3) {
1119     // 1. OH_Drawing_MatrixCreate
1120     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1121     // 2. OH_Drawing_MatrixPreRotate, pass in random numbers for degree, px, and py
1122     std::random_device rd;
1123     std::mt19937 gen(rd());
1124     std::uniform_real_distribution<float> dis(0.0, 100.0);
1125     for (int i = 0; i < 10; i++) {
1126         float degree = dis(gen);
1127         float px = dis(gen);
1128         float py = dis(gen);
1129         OH_Drawing_MatrixPreRotate(matrix, degree, px, py);
1130     }
1131     // 3. Free memory
1132     OH_Drawing_MatrixDestroy(matrix);
1133 }
1134 
1135 /*
1136  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1100
1137  * @tc.name: testMatrixPreScaleNormal
1138  * @tc.desc: test for testMatrixPreScaleNormal.
1139  * @tc.size  : SmallTest
1140  * @tc.type  : Function
1141  * @tc.level : Level 0
1142  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleNormal, TestSize.Level0)1143 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleNormal, TestSize.Level0) {
1144     // 1. OH_Drawing_MatrixCreate
1145     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1146     // 2. OH_Drawing_MatrixPreScale, pass in decimals
1147     OH_Drawing_MatrixPreScale(matrix, 10.0f, 10.0f, 10.0f, 10.0f);
1148     // 3. OH_Drawing_MatrixPreScale, pass in integers
1149     OH_Drawing_MatrixPreScale(matrix, 20, 20, 20, 20);
1150     // 4. Free memory
1151     OH_Drawing_MatrixDestroy(matrix);
1152 }
1153 
1154 /*
1155  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1101
1156  * @tc.name: testMatrixPreScaleNull
1157  * @tc.desc: test for testMatrixPreScaleNull.
1158  * @tc.size  : SmallTest
1159  * @tc.type  : Function
1160  * @tc.level : Level 3
1161  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleNull, TestSize.Level3)1162 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleNull, TestSize.Level3) {
1163     // 1. OH_Drawing_MatrixCreate
1164     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1165     // 2. OH_Drawing_MatrixPreScale, the first parameter is null, check the error code using OH_Drawing_ErrorCodeGet, no
1166     // crash, error code returns OH_DRAWING_ERROR_INVALID_PARAMETER
1167     OH_Drawing_MatrixPreScale(nullptr, 10.0f, 10.0f, 10.0f, 10.0f);
1168     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1169     // 3. OH_Drawing_MatrixPreScale, the second parameter is null
1170     OH_Drawing_MatrixPreScale(matrix, 0, 10.0f, 10.0f, 10.0f);
1171     // 4. OH_Drawing_MatrixPreScale, the third parameter is null
1172     OH_Drawing_MatrixPreScale(matrix, 10.0f, 0, 10.0f, 10.0f);
1173     // 5. OH_Drawing_MatrixPreScale, the fourth parameter is null
1174     OH_Drawing_MatrixPreScale(matrix, 10.0f, 10.0f, 0, 10.0f);
1175     // 6. OH_Drawing_MatrixPreScale, the fifth parameter is null
1176     OH_Drawing_MatrixPreScale(matrix, 10.0f, 10.0f, 10.0f, 0);
1177     // 7. Free memory
1178     OH_Drawing_MatrixDestroy(matrix);
1179 }
1180 
1181 /*
1182  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1102
1183  * @tc.name: testMatrixPreScaleAbnormal
1184  * @tc.desc: test for testMatrixPreScaleAbnormal.
1185  * @tc.size  : SmallTest
1186  * @tc.type  : Function
1187  * @tc.level : Level 3
1188  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleAbnormal, TestSize.Level3)1189 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleAbnormal, TestSize.Level3) {
1190     // 1. OH_Drawing_MatrixCreate
1191     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1192     // 2. OH_Drawing_MatrixPreScale, the second parameter is negative
1193     OH_Drawing_MatrixPreScale(matrix, -10.0f, 10.0f, 10.0f, 10.0f);
1194     // 3. OH_Drawing_MatrixPreScale, the third parameter is negative
1195     OH_Drawing_MatrixPreScale(matrix, 10.0f, -10.0f, 10.0f, 10.0f);
1196     // 4. OH_Drawing_MatrixPreScale, the fourth parameter is negative
1197     OH_Drawing_MatrixPreScale(matrix, 10.0f, 10.0f, -10.0f, 10.0f);
1198     // 5. OH_Drawing_MatrixPreScale, the fifth parameter is negative
1199     OH_Drawing_MatrixPreScale(matrix, 10.0f, 10.0f, 10.0f, -10.0f);
1200     // 6. Free memory
1201     OH_Drawing_MatrixDestroy(matrix);
1202 }
1203 
1204 /*
1205  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1103
1206  * @tc.name: testMatrixPreScaleMaximum
1207  * @tc.desc: test for testMatrixPreScaleMaximum.
1208  * @tc.size  : SmallTest
1209  * @tc.type  : Function
1210  * @tc.level : Level 3
1211  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleMaximum, TestSize.Level3)1212 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleMaximum, TestSize.Level3) {
1213     // 1. OH_Drawing_MatrixCreate
1214     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1215     // 2. OH_Drawing_MatrixPreScale with the second parameter as the maximum value
1216     OH_Drawing_MatrixPreScale(matrix, FLT_MAX, 10.0f, 10.0f, 10.0f);
1217     // 3. OH_Drawing_MatrixPreScale with the third parameter as the maximum value
1218     OH_Drawing_MatrixPreScale(matrix, 10.0f, FLT_MAX, 10.0f, 10.0f);
1219     // 4. OH_Drawing_MatrixPreScale with the fourth parameter as the maximum value
1220     OH_Drawing_MatrixPreScale(matrix, 10.0f, 10.0f, FLT_MAX, 10.0f);
1221     // 5. OH_Drawing_MatrixPreScale with the fifth parameter as the maximum value
1222     OH_Drawing_MatrixPreScale(matrix, 10.0f, 10.0f, 10.0f, FLT_MAX);
1223     // 6. Free memory
1224     OH_Drawing_MatrixDestroy(matrix);
1225 }
1226 
1227 /*
1228  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1104
1229  * @tc.name: testMatrixPreScaleMultipleCalls
1230  * @tc.desc: test for testMatrixPreScaleMultipleCalls.
1231  * @tc.size  : SmallTest
1232  * @tc.type  : Function
1233  * @tc.level : Level 3
1234  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleMultipleCalls, TestSize.Level3)1235 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreScaleMultipleCalls, TestSize.Level3) {
1236     // 1. OH_Drawing_MatrixCreate
1237     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1238     // 2. Call OH_Drawing_MatrixCreateScale 10 times, passing in random numbers for sx, sy, px, and py
1239     std::random_device rd;
1240     std::mt19937 gen(rd());
1241     std::uniform_real_distribution<float> dis(0.0, 100.0);
1242     for (int i = 0; i < 10; i++) {
1243         float sx = dis(gen);
1244         float sy = dis(gen);
1245         float px = dis(gen);
1246         float py = dis(gen);
1247         OH_Drawing_MatrixPreScale(matrix, sx, sy, px, py);
1248     }
1249     // 3. Free memory
1250     OH_Drawing_MatrixDestroy(matrix);
1251 }
1252 
1253 /*
1254  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1200
1255  * @tc.name: testMatrixPreTranslateNormal
1256  * @tc.desc: test for testMatrixPreTranslateNormal.
1257  * @tc.size  : SmallTest
1258  * @tc.type  : Function
1259  * @tc.level : Level 0
1260  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateNormal, TestSize.Level0)1261 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateNormal, TestSize.Level0) {
1262     // 1. OH_Drawing_MatrixCreate
1263     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1264     // 2. OH_Drawing_MatrixPreTranslate, pass in decimals
1265     OH_Drawing_MatrixPreTranslate(matrix, 10.0f, 10.0f);
1266     // 3. OH_Drawing_MatrixPreTranslate, pass in integers
1267     OH_Drawing_MatrixPreTranslate(matrix, 20, 20);
1268     // 4. Free memory
1269     OH_Drawing_MatrixDestroy(matrix);
1270 }
1271 
1272 /*
1273  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1201
1274  * @tc.name: testMatrixPreTranslateNull
1275  * @tc.desc: test for testMatrixPreTranslateNull.
1276  * @tc.size  : SmallTest
1277  * @tc.type  : Function
1278  * @tc.level : Level 3
1279  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateNull, TestSize.Level3)1280 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateNull, TestSize.Level3) {
1281     // 1. OH_Drawing_MatrixCreate
1282     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1283     // 2. OH_Drawing_MatrixPreTranslate, the first parameter is null, check the error code using OH_Drawing_ErrorCodeGet
1284     OH_Drawing_MatrixPreTranslate(nullptr, 10.0f, 10.0f);
1285     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1286     // 3. OH_Drawing_MatrixPreTranslate, the second parameter is null
1287     OH_Drawing_MatrixPreTranslate(matrix, 0, 10.0f);
1288     // 4. OH_Drawing_MatrixPreTranslate, the third parameter is null
1289     OH_Drawing_MatrixPreTranslate(matrix, 10.0f, 0);
1290     // 5. Free memory
1291     OH_Drawing_MatrixDestroy(matrix);
1292 }
1293 
1294 /*
1295  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1202
1296  * @tc.name: testMatrixPreTranslateAbnormal
1297  * @tc.desc: test for testMatrixPreTranslateAbnormal.
1298  * @tc.size  : SmallTest
1299  * @tc.type  : Function
1300  * @tc.level : Level 3
1301  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateAbnormal, TestSize.Level3)1302 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateAbnormal, TestSize.Level3) {
1303     // 1. OH_Drawing_MatrixCreate
1304     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1305     // 2. OH_Drawing_MatrixPreTranslate, the second parameter is negative
1306     OH_Drawing_MatrixPreTranslate(matrix, -10.0f, 10.0f);
1307     // 3. OH_Drawing_MatrixPreTranslate, the third parameter is negative
1308     OH_Drawing_MatrixPreTranslate(matrix, 10.0f, -10.0f);
1309     // 4. Free memory
1310     OH_Drawing_MatrixDestroy(matrix);
1311 }
1312 
1313 /*
1314  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1203
1315  * @tc.name: testMatrixPreTranslateMaximum
1316  * @tc.desc: test for testMatrixPreTranslateMaximum.
1317  * @tc.size  : SmallTest
1318  * @tc.type  : Function
1319  * @tc.level : Level 3
1320  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateMaximum, TestSize.Level3)1321 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateMaximum, TestSize.Level3) {
1322     // 1. OH_Drawing_MatrixCreate
1323     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1324     // 2. OH_Drawing_MatrixPreTranslate with the second parameter as the maximum value
1325     OH_Drawing_MatrixPreTranslate(matrix, FLT_MAX, 10.0f);
1326     // 3. OH_Drawing_MatrixPreTranslate with the third parameter as the maximum value
1327     OH_Drawing_MatrixPreTranslate(matrix, 10.0f, FLT_MAX);
1328     // 4. Free memory
1329     OH_Drawing_MatrixDestroy(matrix);
1330 }
1331 
1332 /*
1333  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1204
1334  * @tc.name: testMatrixPreTranslateMultipleCalls
1335  * @tc.desc: test for testMatrixPreTranslateMultipleCalls.
1336  * @tc.size  : SmallTest
1337  * @tc.type  : Function
1338  * @tc.level : Level 3
1339  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateMultipleCalls, TestSize.Level3)1340 HWTEST_F(DrawingNativeMatrixTest, testMatrixPreTranslateMultipleCalls, TestSize.Level3) {
1341     // 1. OH_Drawing_MatrixCreate
1342     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1343     // 2. OH_Drawing_MatrixPreTranslate, pass in random numbers for dx and dy
1344     std::random_device rd;
1345     std::mt19937 gen(rd());
1346     std::uniform_real_distribution<float> dis(0.0, 100.0);
1347     for (int i = 0; i < 10; i++) {
1348         float dx = dis(gen);
1349         float dy = dis(gen);
1350         OH_Drawing_MatrixPreTranslate(matrix, dx, dy);
1351     }
1352     // 3. Free memory
1353     OH_Drawing_MatrixDestroy(matrix);
1354 }
1355 
1356 /*
1357  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1300
1358  * @tc.name: testMatrixPostRotateNormal
1359  * @tc.desc: test for testMatrixPostRotateNormal.
1360  * @tc.size  : SmallTest
1361  * @tc.type  : Function
1362  * @tc.level : Level 0
1363  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateNormal, TestSize.Level0)1364 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateNormal, TestSize.Level0) {
1365     // 1. OH_Drawing_MatrixCreate
1366     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1367     // 2. OH_Drawing_MatrixPostRotate, rotate angles include 0 degrees, 180 degrees, 360 degrees, -90 degrees, -180
1368     // degrees, -360 degrees, and 45.5 degrees, px and py cover decimals and integers
1369     OH_Drawing_MatrixPostRotate(matrix, 0, 0, 0);
1370     OH_Drawing_MatrixPostRotate(matrix, 180, 10, 10);
1371     OH_Drawing_MatrixPostRotate(matrix, 360, 10.0f, 10.0f);
1372     OH_Drawing_MatrixPostRotate(matrix, -90, 20, 20);
1373     OH_Drawing_MatrixPostRotate(matrix, -180, 20.0f, 20.0f);
1374     OH_Drawing_MatrixPostRotate(matrix, -360, 30, 30);
1375     OH_Drawing_MatrixPostRotate(matrix, 45.5, 30.0f, 30.0f);
1376     // 3. Free memory
1377     OH_Drawing_MatrixDestroy(matrix);
1378 }
1379 
1380 /*
1381  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1301
1382  * @tc.name: testMatrixPostRotateNull
1383  * @tc.desc: test for testMatrixPostRotateNull.
1384  * @tc.size  : SmallTest
1385  * @tc.type  : Function
1386  * @tc.level : Level 3
1387  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateNull, TestSize.Level3)1388 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateNull, TestSize.Level3) {
1389     // 1. OH_Drawing_MatrixCreate
1390     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1391     // 2. OH_Drawing_MatrixPostRotate with the first parameter as null, check the error code using
1392     // OH_Drawing_ErrorCodeGet
1393     OH_Drawing_MatrixPostRotate(nullptr, 180, 10, 10);
1394     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1395     // 3. OH_Drawing_MatrixPostRotate with the second parameter as null
1396     OH_Drawing_MatrixPostRotate(matrix, 0, 10, 10);
1397     // 4. OH_Drawing_MatrixPostRotate with the third parameter as null
1398     OH_Drawing_MatrixPostRotate(matrix, 180, 0, 10);
1399     // 5. OH_Drawing_MatrixPostRotate with the fourth parameter as null
1400     OH_Drawing_MatrixPostRotate(matrix, 180, 10, 0);
1401     // 6. Free memory
1402     OH_Drawing_MatrixDestroy(matrix);
1403 }
1404 
1405 /*
1406  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1302
1407  * @tc.name: testMatrixPostRotateAbnormal
1408  * @tc.desc: test for testMatrixPostRotateAbnormal.
1409  * @tc.size  : SmallTest
1410  * @tc.type  : Function
1411  * @tc.level : Level 3
1412  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateAbnormal, TestSize.Level3)1413 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateAbnormal, TestSize.Level3) {
1414     // 1. OH_Drawing_MatrixCreate
1415     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1416     // 2. OH_Drawing_MatrixPostRotate, the third parameter is negative
1417     OH_Drawing_MatrixPostRotate(matrix, 180, -10, 10);
1418     // 3. OH_Drawing_MatrixPostRotate, the fourth parameter is negative
1419     OH_Drawing_MatrixPostRotate(matrix, 180, 10, -10);
1420     // 4. Free memory
1421     OH_Drawing_MatrixDestroy(matrix);
1422 }
1423 
1424 /*
1425  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1303
1426  * @tc.name: testMatrixPostRotateMaximum
1427  * @tc.desc: test for testMatrixPostRotateMaximum.
1428  * @tc.size  : SmallTest
1429  * @tc.type  : Function
1430  * @tc.level : Level 3
1431  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateMaximum, TestSize.Level3)1432 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateMaximum, TestSize.Level3) {
1433     // 1. OH_Drawing_MatrixCreate
1434     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1435     // 2. OH_Drawing_MatrixPostRotate with the second parameter as the maximum value
1436     OH_Drawing_MatrixPostRotate(matrix, FLT_MAX, 10.0f, 10.0f);
1437     // 3. OH_Drawing_MatrixPostRotate with the third parameter as the maximum value
1438     OH_Drawing_MatrixPostRotate(matrix, 180, FLT_MAX, 10.0f);
1439     // 4. OH_Drawing_MatrixPostRotate with the fourth parameter as the maximum value
1440     OH_Drawing_MatrixPostRotate(matrix, 180, 10.0f, FLT_MAX);
1441     // 5. Free memory
1442     OH_Drawing_MatrixDestroy(matrix);
1443 }
1444 
1445 /*
1446  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1304
1447  * @tc.name: testMatrixPostRotateMultipleCalls
1448  * @tc.desc: test for testMatrixPostRotateMultipleCalls.
1449  * @tc.size  : SmallTest
1450  * @tc.type  : Function
1451  * @tc.level : Level 3
1452  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateMultipleCalls, TestSize.Level3)1453 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostRotateMultipleCalls, TestSize.Level3) {
1454     // 1. OH_Drawing_MatrixCreate
1455     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1456     // 2. OH_Drawing_MatrixPostRotate, pass in random numbers for degree, px, and py
1457     std::random_device rd;
1458     std::mt19937 gen(rd());
1459     std::uniform_real_distribution<float> dis(0.0, 100.0);
1460     for (int i = 0; i < 10; i++) {
1461         float degree = dis(gen);
1462         float px = dis(gen);
1463         float py = dis(gen);
1464         OH_Drawing_MatrixPostRotate(matrix, degree, px, py);
1465     }
1466     // 3. Free memory
1467     OH_Drawing_MatrixDestroy(matrix);
1468 }
1469 
1470 /*
1471  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1400
1472  * @tc.name: testMatrixPostScaleNormal
1473  * @tc.desc: test for testMatrixPostScaleNormal.
1474  * @tc.size  : SmallTest
1475  * @tc.type  : Function
1476  * @tc.level : Level 0
1477  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleNormal, TestSize.Level0)1478 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleNormal, TestSize.Level0) {
1479     // 1. OH_Drawing_MatrixCreate
1480     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1481     // 2. OH_Drawing_MatrixPostScale, pass in decimals
1482     OH_Drawing_MatrixPostScale(matrix, 10.0f, 10.0f, 10.0f, 10.0f);
1483     // 3. OH_Drawing_MatrixPostScale, pass in integers
1484     OH_Drawing_MatrixPostScale(matrix, 20, 20, 20, 20);
1485     // 4. Free memory
1486     OH_Drawing_MatrixDestroy(matrix);
1487 }
1488 
1489 /*
1490  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1401
1491  * @tc.name: testMatrixPostScaleNull
1492  * @tc.desc: test for testMatrixPostScaleNull.
1493  * @tc.size  : SmallTest
1494  * @tc.type  : Function
1495  * @tc.level : Level 3
1496  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleNull, TestSize.Level3)1497 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleNull, TestSize.Level3) {
1498     // 1. OH_Drawing_MatrixCreate
1499     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1500     // 2. OH_Drawing_MatrixPostScale, the first parameter is null, check the error code using OH_Drawing_ErrorCodeGet
1501     OH_Drawing_MatrixPostScale(nullptr, 10.0f, 10.0f, 10.0f, 10.0f);
1502     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
1503     // 3. OH_Drawing_MatrixPostScale, the second parameter is null
1504     OH_Drawing_MatrixPostScale(matrix, 0, 10.0f, 10.0f, 10.0f);
1505     // 4. OH_Drawing_MatrixPostScale, the third parameter is null
1506     OH_Drawing_MatrixPostScale(matrix, 10.0f, 0, 10.0f, 10.0f);
1507     // 5. OH_Drawing_MatrixPostScale, the fourth parameter is null
1508     OH_Drawing_MatrixPostScale(matrix, 10.0f, 10.0f, 0, 10.0f);
1509     // 6. OH_Drawing_MatrixPostScale, the fifth parameter is null
1510     OH_Drawing_MatrixPostScale(matrix, 10.0f, 10.0f, 10.0f, 0);
1511     // 7. Free memory
1512     OH_Drawing_MatrixDestroy(matrix);
1513 }
1514 
1515 /*
1516  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1402
1517  * @tc.name: testMatrixPostScaleAbnormal
1518  * @tc.desc: test for testMatrixPostScaleAbnormal.
1519  * @tc.size  : SmallTest
1520  * @tc.type  : Function
1521  * @tc.level : Level 3
1522  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleAbnormal, TestSize.Level3)1523 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleAbnormal, TestSize.Level3) {
1524     // 1. OH_Drawing_MatrixCreate
1525     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1526     // 2. OH_Drawing_MatrixPostScale, the second parameter is negative
1527     OH_Drawing_MatrixPostScale(matrix, -10.0f, 10.0f, 10.0f, 10.0f);
1528     // 3. OH_Drawing_MatrixPostScale, the third parameter is negative
1529     OH_Drawing_MatrixPostScale(matrix, 10.0f, -10.0f, 10.0f, 10.0f);
1530     // 4. OH_Drawing_MatrixPostScale, the fourth parameter is negative
1531     OH_Drawing_MatrixPostScale(matrix, 10.0f, 10.0f, -10.0f, 10.0f);
1532     // 5. OH_Drawing_MatrixPostScale, the fifth parameter is negative
1533     OH_Drawing_MatrixPostScale(matrix, 10.0f, 10.0f, 10.0f, -10.0f);
1534     // 6. Free memory
1535     OH_Drawing_MatrixDestroy(matrix);
1536 }
1537 
1538 /*
1539  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1403
1540  * @tc.name: testMatrixPostScaleMaximum
1541  * @tc.desc: test for testMatrixPostScaleMaximum.
1542  * @tc.size  : SmallTest
1543  * @tc.type  : Function
1544  * @tc.level : Level 3
1545  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleMaximum, TestSize.Level3)1546 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleMaximum, TestSize.Level3) {
1547     // 1. OH_Drawing_MatrixCreate
1548     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1549     // 2. OH_Drawing_MatrixPostScale, the second parameter is the maximum value
1550     OH_Drawing_MatrixPostScale(matrix, FLT_MAX, 10.0f, 10.0f, 10.0f);
1551     // 3. OH_Drawing_MatrixPostScale, the third parameter is the maximum value
1552     OH_Drawing_MatrixPostScale(matrix, 10.0f, FLT_MAX, 10.0f, 10.0f);
1553     // 4. OH_Drawing_MatrixPostScale, the fourth parameter is the maximum value
1554     OH_Drawing_MatrixPostScale(matrix, 10.0f, 10.0f, FLT_MAX, 10.0f);
1555     // 5. OH_Drawing_MatrixPostScale, the fifth parameter is the maximum value
1556     OH_Drawing_MatrixPostScale(matrix, 10.0f, 10.0f, 10.0f, FLT_MAX);
1557     // 6. Free memory
1558     OH_Drawing_MatrixDestroy(matrix);
1559 }
1560 
1561 /*
1562  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_MATRIX_1404
1563  * @tc.name: testMatrixPostScaleMultipleCalls
1564  * @tc.desc: test for testMatrixPostScaleMultipleCalls.
1565  * @tc.size  : SmallTest
1566  * @tc.type  : Function
1567  * @tc.level : Level 3
1568  */
HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleMultipleCalls, TestSize.Level3)1569 HWTEST_F(DrawingNativeMatrixTest, testMatrixPostScaleMultipleCalls, TestSize.Level3) {
1570     // 1. OH_Drawing_MatrixCreate
1571     OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
1572     // 2. Call OH_Drawing_MatrixCreateScale 10 times, passing in random numbers for sx, sy, px, and py
1573     std::random_device rd;
1574     std::mt19937 gen(rd());
1575     std::uniform_real_distribution<float> dis(0.0, 100.0);
1576     for (int i = 0; i < 10; i++) {
1577         float sx = dis(gen);
1578         float sy = dis(gen);
1579         float px = dis(gen);
1580         float py = dis(gen);
1581         OH_Drawing_MatrixPostScale(matrix, sx, sy, px, py);
1582     }
1583     // 3. Free memory
1584     OH_Drawing_MatrixDestroy(matrix);
1585 }
1586 
1587 } // namespace Drawing
1588 } // namespace Rosen
1589 } // namespace OHOS