/* * libfud * Copyright 2024 Dominick Allen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "fud_allocator.hpp" #include "test_common.hpp" #include "gtest/gtest.h" namespace fud { struct FailAllocator : public MockFudAlloc { virtual std::byte* operator()(size_t size) override { static_cast(size); return nullptr; } }; TEST(AllocatorTest, TestFudAllocator) { FudAllocator fudAllocator{}; ASSERT_NE(&fudAllocator, &globalFudAllocator); ASSERT_FALSE(fudAllocator.isEqual(globalFudAllocator)); auto allocResult{fudAllocator.allocate(1)}; ASSERT_TRUE(allocResult.isOkay()); auto* mem = allocResult.getOkay(); ASSERT_NE(mem, nullptr); fudAllocator.deallocate(mem, 0); fudAllocator.deallocate(mem, 1); mem = nullptr; fudAllocator.deallocate(mem, 1); FailAllocator failAllocator{}; globalMockFudAlloc.m_allocator = &failAllocator; allocResult = fudAllocator.allocate(1); ASSERT_TRUE(allocResult.isError()); } } // namespace fud