• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- Unittests for lsearch ---------------------------------------------===//
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/search/lsearch.h"
10 #include "test/UnitTest/Test.h"
11 
compar(const void * a,const void * b)12 int compar(const void *a, const void *b) {
13   return *reinterpret_cast<const int *>(a) != *reinterpret_cast<const int *>(b);
14 }
15 
TEST(LlvmLibcLsearchTest,SearchHead)16 TEST(LlvmLibcLsearchTest, SearchHead) {
17   int list[3] = {1, 2, 3};
18   size_t len = 3;
19   int key = 1;
20   void *ret = LIBC_NAMESPACE::lsearch(&key, list, &len, sizeof(int), compar);
21   ASSERT_TRUE(ret == &list[0]);
22 }
23 
TEST(LlvmLibcLsearchTest,SearchMiddle)24 TEST(LlvmLibcLsearchTest, SearchMiddle) {
25   int list[3] = {1, 2, 3};
26   size_t len = 3;
27   int key = 2;
28   void *ret = LIBC_NAMESPACE::lsearch(&key, list, &len, sizeof(int), compar);
29   ASSERT_TRUE(ret == &list[1]);
30 }
31 
TEST(LlvmLibcLsearchTest,SearchTail)32 TEST(LlvmLibcLsearchTest, SearchTail) {
33   int list[3] = {1, 2, 3};
34   size_t len = 3;
35   int key = 3;
36   void *ret = LIBC_NAMESPACE::lsearch(&key, list, &len, sizeof(int), compar);
37   ASSERT_TRUE(ret == &list[2]);
38 }
39 
TEST(LlvmLibcLsearchTest,SearchNonExistent)40 TEST(LlvmLibcLsearchTest, SearchNonExistent) {
41   int list[4] = {1, 2, 3, 0};
42   size_t len = 3;
43   int key = 4;
44   void *ret = LIBC_NAMESPACE::lsearch(&key, list, &len, sizeof(int), compar);
45   ASSERT_TRUE(ret == &list[3]);
46   ASSERT_EQ(key, list[3]);
47   ASSERT_EQ(len, size_t{4});
48 }
49 
TEST(LlvmLibcLsearchTest,SearchExceptional)50 TEST(LlvmLibcLsearchTest, SearchExceptional) {
51   int list[3] = {1, 2, 3};
52   size_t len = 3;
53   size_t max_len = ~0;
54   int key = 3;
55 
56   ASSERT_EQ(LIBC_NAMESPACE::lsearch(nullptr, list, &len, sizeof(int), compar),
57             nullptr);
58   ASSERT_EQ(LIBC_NAMESPACE::lsearch(&key, nullptr, &len, sizeof(int), compar),
59             nullptr);
60   ASSERT_EQ(LIBC_NAMESPACE::lsearch(&key, list, nullptr, sizeof(int), compar),
61             nullptr);
62   ASSERT_EQ(LIBC_NAMESPACE::lsearch(&key, list, &max_len, sizeof(int), compar),
63             nullptr);
64   ASSERT_EQ(LIBC_NAMESPACE::lsearch(&key, list, &len, sizeof(int), nullptr),
65             nullptr);
66 }
67