1f6603c60Sopenharmony_ci/*
2f6603c60Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License.
5f6603c60Sopenharmony_ci * You may obtain a copy of the License at
6f6603c60Sopenharmony_ci *
7f6603c60Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8f6603c60Sopenharmony_ci *
9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and
13f6603c60Sopenharmony_ci * limitations under the License.
14f6603c60Sopenharmony_ci */
15f6603c60Sopenharmony_ci
16f6603c60Sopenharmony_ci#include <stdio.h>
17f6603c60Sopenharmony_ci#include <string.h>
18f6603c60Sopenharmony_ci#include <stdlib.h>
19f6603c60Sopenharmony_ci#include <time.h>
20f6603c60Sopenharmony_ci#include <unistd.h>
21f6603c60Sopenharmony_ci#include <sched.h>
22f6603c60Sopenharmony_ci#include <malloc.h>
23f6603c60Sopenharmony_ci#include <sys/time.h>
24f6603c60Sopenharmony_ci#include <sys/resource.h>
25f6603c60Sopenharmony_ci
26f6603c60Sopenharmony_ci#include "gtest/gtest.h"
27f6603c60Sopenharmony_ci#include "XtsActsUtil.h"
28f6603c60Sopenharmony_ci#include "KernelConstants.h"
29f6603c60Sopenharmony_ci
30f6603c60Sopenharmony_ciusing namespace testing::ext;
31f6603c60Sopenharmony_ci
32f6603c60Sopenharmony_ciclass ActsMemApiTest : public testing::Test {
33f6603c60Sopenharmony_ciprotected:
34f6603c60Sopenharmony_ci    // SetUpTestCase: Testsuit setup, run before 1st testcase
35f6603c60Sopenharmony_ci    static void SetUpTestCase(void)
36f6603c60Sopenharmony_ci    {
37f6603c60Sopenharmony_ci    }
38f6603c60Sopenharmony_ci    // TearDownTestCase: Testsuit teardown, run after last testcase
39f6603c60Sopenharmony_ci    static void TearDownTestCase(void)
40f6603c60Sopenharmony_ci    {
41f6603c60Sopenharmony_ci    }
42f6603c60Sopenharmony_ci    // Testcase setup
43f6603c60Sopenharmony_ci    virtual void SetUp()
44f6603c60Sopenharmony_ci    {
45f6603c60Sopenharmony_ci        errno = 0;
46f6603c60Sopenharmony_ci    }
47f6603c60Sopenharmony_ci    // Testcase teardown
48f6603c60Sopenharmony_ci    virtual void TearDown()
49f6603c60Sopenharmony_ci    {
50f6603c60Sopenharmony_ci    }
51f6603c60Sopenharmony_ci};
52f6603c60Sopenharmony_ci
53f6603c60Sopenharmony_ci/**
54f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_BCMP_0100
55f6603c60Sopenharmony_ci* @tc.name       test bcmp api
56f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
57f6603c60Sopenharmony_ci*/
58f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemBcmp_0100, Function | MediumTest | Level1) {
59f6603c60Sopenharmony_ci    char str1[] = "this is string1";
60f6603c60Sopenharmony_ci    char str2[] = "this is string2";
61f6603c60Sopenharmony_ci    int returnVal;
62f6603c60Sopenharmony_ci
63f6603c60Sopenharmony_ci    returnVal = bcmp(str1, str2, 7);
64f6603c60Sopenharmony_ci    LogPrint("    bcmp *s1:='%s' *s2:='%s' size:='7',   --> returnVal:='%d'\n", str1, str2, returnVal);
65f6603c60Sopenharmony_ci    EXPECT_EQ(0, returnVal)
66f6603c60Sopenharmony_ci        << "ErrInfo: bcmp *s1:='" << str1 << "' *s2:='" << str2
67f6603c60Sopenharmony_ci        << "' size:='7',   --> returnVal:='" << returnVal << "'";
68f6603c60Sopenharmony_ci}
69f6603c60Sopenharmony_ci
70f6603c60Sopenharmony_ci/**
71f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_BCMP_1000
72f6603c60Sopenharmony_ci* @tc.name       test bcmp api NE
73f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
74f6603c60Sopenharmony_ci*/
75f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemBcmp_1000, Function | MediumTest | Level1) {
76f6603c60Sopenharmony_ci    char str1[] = "this is string1";
77f6603c60Sopenharmony_ci    char str2[] = "this is string2";
78f6603c60Sopenharmony_ci    int returnVal;
79f6603c60Sopenharmony_ci
80f6603c60Sopenharmony_ci    returnVal = bcmp(str1, str2, 15);
81f6603c60Sopenharmony_ci    LogPrint("    bcmp *s1:='%s' *s2:='%s' size:='15',   --> returnVal:='%d'\n", str1, str2, returnVal);
82f6603c60Sopenharmony_ci    EXPECT_NE(0, returnVal)
83f6603c60Sopenharmony_ci        << "ErrInfo: bcmp *s1:='" << str1 << "' *s2:='" << str2
84f6603c60Sopenharmony_ci        << "' size:='15',   --> returnVal:='" << returnVal << "'";
85f6603c60Sopenharmony_ci}
86f6603c60Sopenharmony_ci
87f6603c60Sopenharmony_ci/**
88f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_BCOPY_0100
89f6603c60Sopenharmony_ci* @tc.name       test bcopy api
90f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
91f6603c60Sopenharmony_ci*/
92f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemBcopy_0100, Function | MediumTest | Level1) {
93f6603c60Sopenharmony_ci    char srcStr[] = "this";
94f6603c60Sopenharmony_ci    char destStr[] = "00000000";
95f6603c60Sopenharmony_ci    int iRtn = 1;
96f6603c60Sopenharmony_ci
97f6603c60Sopenharmony_ci    LogPrint("    bcopy *src:='%s' *dest:='%s', size:='4', \n", srcStr, destStr);
98f6603c60Sopenharmony_ci    bcopy(srcStr, destStr, 4);
99f6603c60Sopenharmony_ci    LogPrint("    --> *dest:='%s'\n", destStr);
100f6603c60Sopenharmony_ci
101f6603c60Sopenharmony_ci    for (int iLoop = 0; iLoop < 4; iLoop++)
102f6603c60Sopenharmony_ci    {
103f6603c60Sopenharmony_ci        if (srcStr[iLoop] != destStr[iLoop]) {
104f6603c60Sopenharmony_ci            iRtn = 0;
105f6603c60Sopenharmony_ci            break;
106f6603c60Sopenharmony_ci        }
107f6603c60Sopenharmony_ci    }
108f6603c60Sopenharmony_ci
109f6603c60Sopenharmony_ci    EXPECT_EQ(1, iRtn)
110f6603c60Sopenharmony_ci        << "ErrInfo: bcopy *src:='" << srcStr << "' *dest:='"
111f6603c60Sopenharmony_ci        << "' size:='4',   --> *dest:='" << destStr << "'";
112f6603c60Sopenharmony_ci}
113f6603c60Sopenharmony_ci
114f6603c60Sopenharmony_ci/**
115f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_BZERO_0100
116f6603c60Sopenharmony_ci* @tc.name       test bzero api
117f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
118f6603c60Sopenharmony_ci*/
119f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemBzero_0100, Function | MediumTest | Level1) {
120f6603c60Sopenharmony_ci    char srcStr[] = "this is string1";
121f6603c60Sopenharmony_ci    char destStr[] = "this is string1";
122f6603c60Sopenharmony_ci    int iFlag = 1;
123f6603c60Sopenharmony_ci
124f6603c60Sopenharmony_ci    LogPrint("    bzero *s:='%s' size:='4',   ", srcStr);
125f6603c60Sopenharmony_ci    bzero(destStr, 4);
126f6603c60Sopenharmony_ci    LogPrint("--> afterrun s:='%s', ", destStr);
127f6603c60Sopenharmony_ci
128f6603c60Sopenharmony_ci    for(int iLoop = 0; iLoop < 4; iLoop++)
129f6603c60Sopenharmony_ci    {
130f6603c60Sopenharmony_ci        if (destStr[iLoop] != '\0') {
131f6603c60Sopenharmony_ci            iFlag = 0;
132f6603c60Sopenharmony_ci            break;
133f6603c60Sopenharmony_ci        } else {
134f6603c60Sopenharmony_ci            destStr[iLoop] = '0';
135f6603c60Sopenharmony_ci        }
136f6603c60Sopenharmony_ci    }
137f6603c60Sopenharmony_ci    LogPrint("  for_print s:='%s'\n", destStr);
138f6603c60Sopenharmony_ci
139f6603c60Sopenharmony_ci    EXPECT_EQ(1, iFlag)
140f6603c60Sopenharmony_ci        << "ErrInfo: bzero *:='" << srcStr << "' size:='4',   --> afterrun s:='" << destStr << "'";
141f6603c60Sopenharmony_ci}
142f6603c60Sopenharmony_ci
143f6603c60Sopenharmony_ci/**
144f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MALLOC_USABLE_SIZE_0100
145f6603c60Sopenharmony_ci* @tc.name       test malloc_usable_size api
146f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
147f6603c60Sopenharmony_ci*/
148f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMallocUsableSize_0100, Function | MediumTest | Level1) {
149f6603c60Sopenharmony_ci    char *pt = nullptr;
150f6603c60Sopenharmony_ci    size_t size;
151f6603c60Sopenharmony_ci
152f6603c60Sopenharmony_ci    pt = (char *)malloc(128);
153f6603c60Sopenharmony_ci    if (pt) {
154f6603c60Sopenharmony_ci        LogPrint("    Mem allocated at: %x\n", pt);
155f6603c60Sopenharmony_ci    } else {
156f6603c60Sopenharmony_ci        LogPrint("    No enough Mem!\n");
157f6603c60Sopenharmony_ci    }
158f6603c60Sopenharmony_ci
159f6603c60Sopenharmony_ci    size = malloc_usable_size(pt);
160f6603c60Sopenharmony_ci    LogPrint("    malloc_usable_size *ptr:='%x',   --> return size:='%d'\n", pt, size);
161f6603c60Sopenharmony_ci
162f6603c60Sopenharmony_ci    EXPECT_GT((int)size, 1)
163f6603c60Sopenharmony_ci        << "ErrInfo: malloc_usable_size *ptr:='" << pt << "',   --> return size:='" << size << "'";
164f6603c60Sopenharmony_ci    free(pt);
165f6603c60Sopenharmony_ci}
166f6603c60Sopenharmony_ci
167f6603c60Sopenharmony_ci/**
168f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MALLOC_USABLE_SIZE_1000
169f6603c60Sopenharmony_ci* @tc.name       test malloc_usable_size api exception null
170f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
171f6603c60Sopenharmony_ci*/
172f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMallocUsableSize_1000, Function | MediumTest | Level1) {
173f6603c60Sopenharmony_ci    size_t size;
174f6603c60Sopenharmony_ci
175f6603c60Sopenharmony_ci    size = malloc_usable_size(nullptr);
176f6603c60Sopenharmony_ci    LogPrint("    malloc_usable_size *ptr:='nullptr',   --> return size:='%d'\n", size);
177f6603c60Sopenharmony_ci
178f6603c60Sopenharmony_ci    EXPECT_EQ((int)size, 0)
179f6603c60Sopenharmony_ci        << "ErrInfo: malloc_usable_size *ptr:='nullptr',   --> return size:='" << size << "'";
180f6603c60Sopenharmony_ci}
181f6603c60Sopenharmony_ci
182f6603c60Sopenharmony_ci/**
183f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MEMCCPY_0100
184f6603c60Sopenharmony_ci* @tc.name       test memccpy api
185f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
186f6603c60Sopenharmony_ci*/
187f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemCcpy_0100, Function | MediumTest | Level1) {
188f6603c60Sopenharmony_ci    char srcStr[] = "this is str1:stop here";
189f6603c60Sopenharmony_ci    char destStr[] = "000000000000000000000000";
190f6603c60Sopenharmony_ci    char *pt = nullptr;
191f6603c60Sopenharmony_ci
192f6603c60Sopenharmony_ci    LogPrint("    bcopy *dest:='%s' *src:='%s' c:=':' size:='18', \n", destStr, srcStr);
193f6603c60Sopenharmony_ci    pt = (char *)memccpy(destStr, srcStr, ':', 18);
194f6603c60Sopenharmony_ci    LogPrint("    --> return pt:='%x', dest:='%s'\n", pt, destStr);
195f6603c60Sopenharmony_ci    ASSERT_TRUE(pt)
196f6603c60Sopenharmony_ci        << "ErrInfo: bcopy *dest:='destStr' *src:='"
197f6603c60Sopenharmony_ci        << srcStr << "' c:=':' size:='18',   --> afterrun dest:='" << destStr << "'";
198f6603c60Sopenharmony_ci}
199f6603c60Sopenharmony_ci
200f6603c60Sopenharmony_ci/**
201f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MEMCCPY_0200
202f6603c60Sopenharmony_ci* @tc.name       test memccpy api not find c
203f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
204f6603c60Sopenharmony_ci*/
205f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemCcpy_0200, Function | MediumTest | Level1) {
206f6603c60Sopenharmony_ci    char srcStr[] = "this is str1:stop here";
207f6603c60Sopenharmony_ci    char destStr[] = "000000000000000000000000";
208f6603c60Sopenharmony_ci    char *pt = nullptr;
209f6603c60Sopenharmony_ci
210f6603c60Sopenharmony_ci    LogPrint("    bcopy *dest:='%s' *src:='%s' c:=';' size:='18', \n", destStr, srcStr);
211f6603c60Sopenharmony_ci    pt = (char *)memccpy(destStr, srcStr, ';', 18);
212f6603c60Sopenharmony_ci    LogPrint("    --> return pt:='%x', *dest:='%s'\n", pt, destStr);
213f6603c60Sopenharmony_ci    ASSERT_FALSE(pt)
214f6603c60Sopenharmony_ci        << "ErrInfo: bcopy *dest:='destStr' *src:='"
215f6603c60Sopenharmony_ci        << srcStr << "' c:=':' size:='18',   --> return pt:='" << pt << "', dest:='" << destStr << "'";
216f6603c60Sopenharmony_ci}
217f6603c60Sopenharmony_ci
218f6603c60Sopenharmony_ci/**
219f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MEMPCPY_0100
220f6603c60Sopenharmony_ci* @tc.name       test mempcpy api
221f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
222f6603c60Sopenharmony_ci*/
223f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMempcpy_0100, Function | MediumTest | Level1) {
224f6603c60Sopenharmony_ci    char srcStr[] = "this is str1";
225f6603c60Sopenharmony_ci    char destStr[] = "00000000000000000000";
226f6603c60Sopenharmony_ci    char *pt = nullptr;
227f6603c60Sopenharmony_ci
228f6603c60Sopenharmony_ci    LogPrint("    mempcpy *dest:='%s' *src:='%s' size:='16',", destStr, srcStr);
229f6603c60Sopenharmony_ci    pt = (char *)mempcpy(destStr, srcStr, 16);
230f6603c60Sopenharmony_ci    LogPrint("    --> return pt:='%x', *dest:='%s'\n", pt, destStr);
231f6603c60Sopenharmony_ci    ASSERT_TRUE(pt)
232f6603c60Sopenharmony_ci        << "ErrInfo: mempcpy *dest:='destStr' *src:='"
233f6603c60Sopenharmony_ci        << srcStr << "' size:='16',   --> return pt:='" << pt << "', dest:='" << destStr << "'";
234f6603c60Sopenharmony_ci}
235f6603c60Sopenharmony_ci
236f6603c60Sopenharmony_ci/**
237f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MEMCHR_0100
238f6603c60Sopenharmony_ci* @tc.name       test memchr api
239f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
240f6603c60Sopenharmony_ci*/
241f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemchr_0100, Function | MediumTest | Level1) {
242f6603c60Sopenharmony_ci    char srcStr[] = "this is str a;";
243f6603c60Sopenharmony_ci    char *pos = nullptr;
244f6603c60Sopenharmony_ci
245f6603c60Sopenharmony_ci    LogPrint("    memchr *s:='%s' c:='a' size:='14',", srcStr);
246f6603c60Sopenharmony_ci    pos = (char *)memchr(srcStr, 'a', 14);
247f6603c60Sopenharmony_ci    LogPrint("    --> return pos:='%x'\n", pos);
248f6603c60Sopenharmony_ci
249f6603c60Sopenharmony_ci    ASSERT_TRUE(pos)
250f6603c60Sopenharmony_ci        << "ErrInfo: memchr *s:='" << srcStr << "' c:='a' size:='14',"
251f6603c60Sopenharmony_ci        << "   --> return pos:='" << pos << "'";
252f6603c60Sopenharmony_ci}
253f6603c60Sopenharmony_ci
254f6603c60Sopenharmony_ci/**
255f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MEMCHR_1000
256f6603c60Sopenharmony_ci* @tc.name       test memchr api para len not enough
257f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
258f6603c60Sopenharmony_ci*/
259f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemchr_1000, Function | MediumTest | Level1) {
260f6603c60Sopenharmony_ci    char srcStr[] = "this is str a;";
261f6603c60Sopenharmony_ci    char *pos = nullptr;
262f6603c60Sopenharmony_ci
263f6603c60Sopenharmony_ci    LogPrint("    memchr *s:='%s' c:='a' size:='4',", srcStr);
264f6603c60Sopenharmony_ci    pos = (char *)memchr(srcStr, 'a', 4);
265f6603c60Sopenharmony_ci    LogPrint("    --> return pos:='%x'\n", pos);
266f6603c60Sopenharmony_ci    ASSERT_FALSE(pos)
267f6603c60Sopenharmony_ci        << "ErrInfo: memchr *s:='" << srcStr << "' c:='a' size:='4',"
268f6603c60Sopenharmony_ci        << "   --> return pos:='" << pos << "'";
269f6603c60Sopenharmony_ci}
270f6603c60Sopenharmony_ci
271f6603c60Sopenharmony_ci/**
272f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MEMCHR_1100
273f6603c60Sopenharmony_ci* @tc.name       test memchr api para c not found
274f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
275f6603c60Sopenharmony_ci*/
276f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemchr_1100, Function | MediumTest | Level1) {
277f6603c60Sopenharmony_ci    char srcStr[] = "this is str a;";
278f6603c60Sopenharmony_ci    char *pos = nullptr;
279f6603c60Sopenharmony_ci
280f6603c60Sopenharmony_ci    LogPrint("    memchr *s:='%s' c:='b' size:='14',", srcStr);
281f6603c60Sopenharmony_ci    pos = (char *)memchr(srcStr, 'b', 14);
282f6603c60Sopenharmony_ci    LogPrint("    --> return pos:='%x'\n", pos);
283f6603c60Sopenharmony_ci    ASSERT_FALSE(pos)
284f6603c60Sopenharmony_ci        << "ErrInfo: memchr *s:='" << srcStr << "' c:='b' size:='14',"
285f6603c60Sopenharmony_ci        << "   --> return pos:='" << pos << "'";
286f6603c60Sopenharmony_ci}
287f6603c60Sopenharmony_ci
288f6603c60Sopenharmony_ci/**
289f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MEMMEM_0100
290f6603c60Sopenharmony_ci* @tc.name       test memmem api
291f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
292f6603c60Sopenharmony_ci*/
293f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemmem_0100, Function | MediumTest | Level1) {
294f6603c60Sopenharmony_ci    char srcStr[] = "this is str a;";
295f6603c60Sopenharmony_ci    char srcSubStr[] = "str";
296f6603c60Sopenharmony_ci    char *pos = nullptr;
297f6603c60Sopenharmony_ci
298f6603c60Sopenharmony_ci    LogPrint("    memmem *haystack:='%s' size_haystack:='%d' ", srcStr, strlen(srcStr));
299f6603c60Sopenharmony_ci    LogPrint("*needle:='%s' size_needle:='%d',\n", srcSubStr, strlen(srcSubStr));
300f6603c60Sopenharmony_ci    if (strlen(srcStr) >= strlen(srcSubStr)) {
301f6603c60Sopenharmony_ci    pos = (char *)memmem(srcStr, strlen(srcStr), srcSubStr, strlen(srcSubStr));
302f6603c60Sopenharmony_ci    LogPrint("    --> return pos:='%x'\n", pos);
303f6603c60Sopenharmony_ci    }
304f6603c60Sopenharmony_ci
305f6603c60Sopenharmony_ci    ASSERT_TRUE(pos)
306f6603c60Sopenharmony_ci        << "ErrInfo: memmem *haystack:='" << srcStr << " size_haystack:='"
307f6603c60Sopenharmony_ci        << strlen(srcStr) << "' *needle:='" << srcSubStr << "' size_needle:='" << strlen(srcSubStr)
308f6603c60Sopenharmony_ci        << "   --> return pos:='" << pos << "'";
309f6603c60Sopenharmony_ci}
310f6603c60Sopenharmony_ci
311f6603c60Sopenharmony_ci/**
312f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_MEMMEM_1000
313f6603c60Sopenharmony_ci* @tc.name       test memmem api para not found
314f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
315f6603c60Sopenharmony_ci*/
316f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemmem_1000, Function | MediumTest | Level1) {
317f6603c60Sopenharmony_ci    char srcStr[] = "this is str a;";
318f6603c60Sopenharmony_ci    char srcSubStr[] = "strb";
319f6603c60Sopenharmony_ci    char *pos = nullptr;
320f6603c60Sopenharmony_ci
321f6603c60Sopenharmony_ci    if (strlen(srcStr) < strlen(srcSubStr)) {
322f6603c60Sopenharmony_ci        FAIL();
323f6603c60Sopenharmony_ci    }
324f6603c60Sopenharmony_ci    pos = (char *)memmem(srcStr, strlen(srcStr), srcSubStr, strlen(srcSubStr));
325f6603c60Sopenharmony_ci    LogPrint("    memmem *haystack:='%s' size_haystack:='%d' ", srcStr, strlen(srcStr));
326f6603c60Sopenharmony_ci    LogPrint("*needle:='%s' size_needle:='%d',\n", srcSubStr, strlen(srcSubStr));
327f6603c60Sopenharmony_ci    LogPrint("    --> return pos:='%x'\n", pos);
328f6603c60Sopenharmony_ci
329f6603c60Sopenharmony_ci    ASSERT_FALSE(pos)
330f6603c60Sopenharmony_ci        << "ErrInfo: memmem *haystack:='" << srcStr << " size_haystack:='"
331f6603c60Sopenharmony_ci        << strlen(srcStr) << "' *needle:='" << srcSubStr << "' size_needle:='" << strlen(srcSubStr)
332f6603c60Sopenharmony_ci        << "   --> return pos:='" << pos << "'";
333f6603c60Sopenharmony_ci}
334f6603c60Sopenharmony_ci
335f6603c60Sopenharmony_ci/**
336f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_OPEN_MEMSTREAM_0100
337f6603c60Sopenharmony_ci* @tc.name       test open_memstream api
338f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
339f6603c60Sopenharmony_ci*/
340f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testOpenMemStream_0100, Function | MediumTest | Level1) {
341f6603c60Sopenharmony_ci    FILE *memStream;
342f6603c60Sopenharmony_ci    char *ptr = nullptr;
343f6603c60Sopenharmony_ci    size_t sizeLoc;
344f6603c60Sopenharmony_ci
345f6603c60Sopenharmony_ci    memStream = open_memstream(&ptr, &sizeLoc);
346f6603c60Sopenharmony_ci    LogPrint("    open_memstream **ptr:='*ptr' *sizeloc:='*sizeLoc', ");
347f6603c60Sopenharmony_ci    LogPrint("    --> return memStream:='%x'\n", memStream);
348f6603c60Sopenharmony_ci    LogPrint("    ptr:='%x', sizeLoc:='%d'\n", ptr, sizeLoc);
349f6603c60Sopenharmony_ci
350f6603c60Sopenharmony_ci    ASSERT_TRUE(memStream)
351f6603c60Sopenharmony_ci        << "ErrInfo: open_memstream **ptr:='*ptr' *sizeloc:='*sizeLoc', "
352f6603c60Sopenharmony_ci        << "   --> return memStream:='" << memStream << "'";
353f6603c60Sopenharmony_ci
354f6603c60Sopenharmony_ci    LogPrint("    fprintf(memStream, 'Hello!');\n");
355f6603c60Sopenharmony_ci    fprintf(memStream, "Hello!");
356f6603c60Sopenharmony_ci    fflush(memStream);
357f6603c60Sopenharmony_ci    LogPrint("    ptr:='%s', sizeloc:='%zu'\n", ptr, sizeLoc);
358f6603c60Sopenharmony_ci
359f6603c60Sopenharmony_ci    LogPrint("    fclose(memStream);\n");
360f6603c60Sopenharmony_ci    fclose(memStream);
361f6603c60Sopenharmony_ci    LogPrint("    ptr:='%s', sizeloc:='%zu'\n", ptr, sizeLoc);
362f6603c60Sopenharmony_ci    free(ptr);
363f6603c60Sopenharmony_ci}
364f6603c60Sopenharmony_ci
365f6603c60Sopenharmony_ci/**
366f6603c60Sopenharmony_ci* @tc.number     SUB_KERNEL_NDKAPI_MEM_GETPAGESIZE_0100
367f6603c60Sopenharmony_ci* @tc.name       test getpagesize api
368f6603c60Sopenharmony_ci* @tc.desc       [C- SOFTWARE -0200]
369f6603c60Sopenharmony_ci*/
370f6603c60Sopenharmony_ciHWTEST_F(ActsMemApiTest, testMemGetpagesize_0100, Function | MediumTest | Level1) {
371f6603c60Sopenharmony_ci    size_t returnVal;
372f6603c60Sopenharmony_ci
373f6603c60Sopenharmony_ci    returnVal = getpagesize();
374f6603c60Sopenharmony_ci    LogPrint("    getpagesize,   --> returnVal:='%d'\n", returnVal);
375f6603c60Sopenharmony_ci    EXPECT_GE(returnVal, 0U);
376f6603c60Sopenharmony_ci    EXPECT_EQ(returnVal, PAGE_SIZE)
377f6603c60Sopenharmony_ci        << "ErrInfo: getpagesize,   --> returnVal:='" << returnVal << "'";
378f6603c60Sopenharmony_ci}
379