1 //===-- Unittests for a freelist --------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
11 #include "src/__support/freelist.h"
12 #include "test/UnitTest/Test.h"
14 using LIBC_NAMESPACE::Block
;
15 using LIBC_NAMESPACE::FreeList
;
16 using LIBC_NAMESPACE::cpp::byte
;
17 using LIBC_NAMESPACE::cpp::optional
;
19 TEST(LlvmLibcFreeList
, FreeList
) {
21 optional
<Block
<> *> maybeBlock
= Block
<>::init(mem1
);
22 ASSERT_TRUE(maybeBlock
.has_value());
23 Block
<> *block1
= *maybeBlock
;
26 maybeBlock
= Block
<>::init(mem2
);
27 ASSERT_TRUE(maybeBlock
.has_value());
28 Block
<> *block2
= *maybeBlock
;
32 ASSERT_FALSE(list
.empty());
33 EXPECT_EQ(list
.front(), block1
);
36 EXPECT_EQ(list
.front(), block1
);
39 ASSERT_FALSE(list
.empty());
40 EXPECT_EQ(list
.front(), block2
);
43 ASSERT_TRUE(list
.empty());
47 list
.remove(reinterpret_cast<FreeList::Node
*>(block2
->usable_space()));
48 EXPECT_EQ(list
.front(), block1
);
50 ASSERT_TRUE(list
.empty());