brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · bd5ecec Raw
54 lines · cpp
1//===-- Unittests for a freelist --------------------------------*- C++ -*-===//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 <stddef.h>10 11#include "src/__support/freelist.h"12#include "test/UnitTest/Test.h"13 14using LIBC_NAMESPACE::Block;15using LIBC_NAMESPACE::FreeList;16using LIBC_NAMESPACE::cpp::byte;17using LIBC_NAMESPACE::cpp::optional;18 19TEST(LlvmLibcFreeList, FreeList) {20  byte mem[1024];21  optional<Block *> maybeBlock = Block::init(mem);22  ASSERT_TRUE(maybeBlock.has_value());23  Block *block1 = *maybeBlock;24 25  maybeBlock = block1->split(128);26  ASSERT_TRUE(maybeBlock.has_value());27  Block *block2 = *maybeBlock;28 29  maybeBlock = block2->split(128);30  ASSERT_TRUE(maybeBlock.has_value());31 32  FreeList list;33  list.push(block1);34  ASSERT_FALSE(list.empty());35  EXPECT_EQ(list.front(), block1);36 37  list.push(block2);38  EXPECT_EQ(list.front(), block1);39 40  list.pop();41  ASSERT_FALSE(list.empty());42  EXPECT_EQ(list.front(), block2);43 44  list.pop();45  ASSERT_TRUE(list.empty());46 47  list.push(block1);48  list.push(block2);49  list.remove(reinterpret_cast<FreeList::Node *>(block2->usable_space()));50  EXPECT_EQ(list.front(), block1);51  list.pop();52  ASSERT_TRUE(list.empty());53}54