brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 539f6a1 Raw
131 lines · cpp
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-exception6//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_DECL131