1//===-- Unittests for memmem ----------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "src/__support/macros/config.h"
10#include "src/string/memmem.h"
11#include "test/UnitTest/Test.h"
12
13#include "src/string/string_utils.h"
14
15namespace LIBC_NAMESPACE_DECL {
16
17TEST(LlvmLibcMemmemTest, EmptyHaystackEmptyNeedleReturnsHaystck) {
18 char *h = nullptr;
19 char *n = nullptr;
20 void *result = LIBC_NAMESPACE::memmem(h, 0, n, 0);
21 ASSERT_EQ(static_cast<char *>(result), h);
22}
23
24TEST(LlvmLibcMemmemTest, EmptyHaystackNonEmptyNeedleReturnsNull) {
25 char *h = nullptr;
26 char n[] = {'a', 'b', 'c'};
27 void *result = LIBC_NAMESPACE::memmem(h, 0, n, sizeof(n));
28 ASSERT_EQ(result, static_cast<void *>(nullptr));
29}
30
31TEST(LlvmLibcMemmemTest, EmptyNeedleReturnsHaystack) {
32 char h[] = {'a', 'b', 'c'};
33 char *n = nullptr;
34 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, 0);
35 ASSERT_EQ(static_cast<char *>(result), h + 0);
36}
37
38TEST(LlvmLibcMemmemTest, ExactMatchReturnsHaystack) {
39 char h[] = {'a', 'b', 'c'};
40 char n[] = {'a', 'b', 'c'};
41 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, sizeof(n));
42 ASSERT_EQ(static_cast<char *>(result), h + 0);
43}
44
45TEST(LlvmLibcMemmemTest, ReturnFirstMatchOfNeedle) {
46 char h[] = {'a', 'a', 'b', 'c'};
47 char n[] = {'a'};
48 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, sizeof(n));
49 ASSERT_EQ(static_cast<char *>(result), h + 0);
50}
51
52TEST(LlvmLibcMemmemTest, ReturnFirstExactMatchOfNeedle) {
53 {
54 char h[] = {'a', 'b', 'a', 'c', 'a', 'a'};
55 char n[] = {'a', 'a'};
56 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, sizeof(n));
57 ASSERT_EQ(static_cast<char *>(result), h + 4);
58 }
59 {
60 char h[] = {'a', 'a', 'b', 'a', 'b', 'a'};
61 char n[] = {'a', 'b', 'a'};
62 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, sizeof(n));
63 ASSERT_EQ(static_cast<char *>(result), h + 1);
64 }
65}
66
67TEST(LlvmLibcMemmemTest, NullTerminatorDoesNotInterruptMatch) {
68 char h[] = {'\0', 'a', 'b'};
69 char n[] = {'a', 'b'};
70 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, sizeof(n));
71 ASSERT_EQ(static_cast<char *>(result), h + 1);
72}
73
74TEST(LlvmLibcMemmemTest, ReturnNullIfNoExactMatch) {
75 {
76 char h[] = {'a'};
77 char n[] = {'a', 'a'};
78 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, sizeof(n));
79 ASSERT_EQ(result, static_cast<void *>(nullptr));
80 }
81 {
82 char h[] = {'a', 'A'};
83 char n[] = {'a', 'a'};
84 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, sizeof(n));
85 ASSERT_EQ(result, static_cast<void *>(nullptr));
86 }
87 {
88 char h[] = {'a'};
89 char n[] = {'a', '\0'};
90 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, sizeof(n));
91 ASSERT_EQ(result, static_cast<void *>(nullptr));
92 }
93 {
94 char h[] = {'\0'};
95 char n[] = {'\0', '\0'};
96 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, sizeof(n));
97 ASSERT_EQ(result, static_cast<void *>(nullptr));
98 }
99}
100
101TEST(LlvmLibcMemmemTest, ReturnMatchOfSpecifiedNeedleLength) {
102 {
103 char h[] = {'a', 'b', 'c'};
104 char n[] = {'x', 'y', 'z'};
105 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, 0);
106 ASSERT_EQ(static_cast<char *>(result), h + 0);
107 }
108 {
109 char h[] = {'a', 'b', 'c'};
110 char n[] = {'b', 'c', 'a'};
111 void *result = LIBC_NAMESPACE::memmem(h, sizeof(h), n, 2);
112 ASSERT_EQ(static_cast<char *>(result), h + 1);
113 }
114}
115
116TEST(LlvmLibcMemmemTest, ReturnNullIfInadequateHaystackLength) {
117 {
118 char h[] = {'a', 'b', 'c'};
119 char n[] = {'c'};
120 void *result = LIBC_NAMESPACE::memmem(h, 2, n, sizeof(n));
121 ASSERT_EQ(result, static_cast<void *>(nullptr));
122 }
123 {
124 char h[] = {'a', 'b', 'c'};
125 char n[] = {'a', 'b', 'c'};
126 void *result = LIBC_NAMESPACE::memmem(h, 2, n, sizeof(n));
127 ASSERT_EQ(result, static_cast<void *>(nullptr));
128 }
129}
130} // namespace LIBC_NAMESPACE_DECL
131

Provided by KDAB

Privacy Policy
Improve your Profiling and Debugging skills
Find out more

source code of libc/test/src/string/memmem_test.cpp