xref: /llvm-project/libc/test/src/__support/CPP/algorithm_test.cpp (revision 5ff3ff33ff930e4ec49da7910612d8a41eb068cb)
1e44cea59SPiJoules //===-- Unittests for Algorithm -------------------------------------------===//
2e44cea59SPiJoules //
3e44cea59SPiJoules // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e44cea59SPiJoules // See https://llvm.org/LICENSE.txt for license information.
5e44cea59SPiJoules // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e44cea59SPiJoules //
7e44cea59SPiJoules //===----------------------------------------------------------------------===//
8e44cea59SPiJoules 
9e44cea59SPiJoules #include "src/__support/CPP/algorithm.h"
10e44cea59SPiJoules #include "src/__support/CPP/array.h"
11*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h"
12e44cea59SPiJoules #include "test/UnitTest/Test.h"
13e44cea59SPiJoules 
14e44cea59SPiJoules // TODO(https://github.com/llvm/llvm-project/issues/94066): Add unittests for
15e44cea59SPiJoules // the remaining algorithm functions.
16*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL {
17*5ff3ff33SPetr Hosek namespace cpp {
18e44cea59SPiJoules 
19e44cea59SPiJoules TEST(LlvmLibcAlgorithmTest, FindIfNot) {
20e44cea59SPiJoules   array<int, 4> nums{1, 2, 3, 4};
21e44cea59SPiJoules   EXPECT_EQ(find_if_not(nums.begin(), nums.end(), [](int i) { return i == 0; }),
22e44cea59SPiJoules             nums.begin());
23e44cea59SPiJoules   EXPECT_EQ(find_if_not(nums.begin(), nums.end(), [](int i) { return i == 1; }),
24e44cea59SPiJoules             nums.begin() + 1);
25e44cea59SPiJoules   EXPECT_EQ(find_if_not(nums.begin(), nums.end(), [](int i) { return i < 4; }),
26e44cea59SPiJoules             nums.begin() + 3);
27e44cea59SPiJoules   EXPECT_EQ(find_if_not(nums.begin(), nums.end(), [](int i) { return i < 5; }),
28e44cea59SPiJoules             nums.end());
29e44cea59SPiJoules 
30e44cea59SPiJoules   EXPECT_EQ(
31e44cea59SPiJoules       find_if_not(nums.begin() + 1, nums.end(), [](int i) { return i == 0; }),
32e44cea59SPiJoules       nums.begin() + 1);
33e44cea59SPiJoules   EXPECT_EQ(
34e44cea59SPiJoules       find_if_not(nums.begin(), nums.begin(), [](int i) { return i == 0; }),
35e44cea59SPiJoules       nums.begin());
36e44cea59SPiJoules }
37e44cea59SPiJoules 
38e44cea59SPiJoules TEST(LlvmLibcAlgorithmTest, AllOf) {
39e44cea59SPiJoules   array<int, 4> nums{1, 2, 3, 4};
40e44cea59SPiJoules   EXPECT_TRUE(all_of(nums.begin(), nums.end(), [](int i) { return i < 5; }));
41e44cea59SPiJoules   EXPECT_FALSE(all_of(nums.begin(), nums.end(), [](int i) { return i < 4; }));
42e44cea59SPiJoules   EXPECT_TRUE(
43e44cea59SPiJoules       all_of(nums.begin(), nums.begin() + 3, [](int i) { return i < 4; }));
44e44cea59SPiJoules   EXPECT_TRUE(
45e44cea59SPiJoules       all_of(nums.begin() + 1, nums.end(), [](int i) { return i > 1; }));
46e44cea59SPiJoules   EXPECT_TRUE(all_of(nums.begin(), nums.begin(), [](int i) { return i < 0; }));
47e44cea59SPiJoules }
48e44cea59SPiJoules 
49*5ff3ff33SPetr Hosek } // namespace cpp
50*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL
51