brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 3de138c Raw
115 lines · cpp
1//===-- Unittests for strstr ----------------------------------------------===//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/string/strstr.h"10#include "test/UnitTest/Test.h"11 12TEST(LlvmLibcStrStrTest, NeedleNotInHaystack) {13  const char *haystack = "12345";14  const char *needle = "a";15  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), nullptr);16}17 18TEST(LlvmLibcStrStrTest, NeedleIsEmptyString) {19  const char *haystack = "12345";20  const char *needle = "";21  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), haystack);22}23 24TEST(LlvmLibcStrStrTest, HaystackIsEmptyString) {25  const char *haystack = "";26  const char *needle = "12345";27  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), nullptr);28}29 30TEST(LlvmLibcStrStrTest, HaystackAndNeedleAreEmptyStrings) {31  const char *haystack = "";32  const char *needle = "";33  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), "");34}35 36TEST(LlvmLibcStrStrTest, HaystackAndNeedleAreSingleCharacters) {37  const char *haystack = "a";38  // Same characer returns that character.39  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, /*needle=*/"a"), "a");40  // Different character returns nullptr.41  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, /*needle=*/"b"), nullptr);42}43 44TEST(LlvmLibcStrStrTest, NeedleEqualToHaystack) {45  const char *haystack = "12345";46  const char *needle = "12345";47  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), "12345");48}49 50TEST(LlvmLibcStrStrTest, NeedleSmallerThanHaystack) {51  const char *haystack = "12345";52  const char *needle = "345";53  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), "345");54}55 56TEST(LlvmLibcStrStrTest, NeedleLargerThanHaystack) {57  const char *haystack = "123";58  const char *needle = "12345";59  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), nullptr);60}61 62TEST(LlvmLibcStrStrTest, NeedleAtBeginning) {63  const char *haystack = "12345";64  const char *needle = "12";65  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), "12345");66}67 68TEST(LlvmLibcStrStrTest, NeedleInMiddle) {69  const char *haystack = "abcdefghi";70  const char *needle = "def";71  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), "defghi");72}73 74TEST(LlvmLibcStrStrTest, NeedleDirectlyBeforeNullTerminator) {75  const char *haystack = "abcdefghi";76  const char *needle = "ghi";77  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), "ghi");78}79 80TEST(LlvmLibcStrStrTest, NeedlePastNullTerminator) {81  const char haystack[5] = {'1', '2', '\0', '3', '4'};82  // Shouldn't find anything after the null terminator.83  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, /*needle=*/"3"), nullptr);84  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, /*needle=*/"4"), nullptr);85}86 87TEST(LlvmLibcStrStrTest, PartialNeedle) {88  const char *haystack = "la_ap_lap";89  const char *needle = "lap";90  // Shouldn't find la or ap.91  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), "lap");92}93 94TEST(LlvmLibcStrStrTest, MisspelledNeedle) {95  const char *haystack = "atalloftwocities...wait, tale";96  const char *needle = "tale";97  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), "tale");98}99 100TEST(LlvmLibcStrStrTest, AnagramNeedle) {101  const char *haystack = "dgo_ogd_god_odg_gdo_dog";102  const char *needle = "dog";103  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, needle), "dog");104}105 106TEST(LlvmLibcStrStrTest, MorphedNeedle) {107  // Changes a single letter in the needle to mismatch with the haystack.108  const char *haystack = "once upon a time";109  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, "time"), "time");110  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, "lime"), nullptr);111  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, "tome"), nullptr);112  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, "tire"), nullptr);113  ASSERT_STREQ(LIBC_NAMESPACE::strstr(haystack, "timo"), nullptr);114}115