| // Copyright 2019 The PDFium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "core/fxcrt/fx_memory_wrappers.h" | |
| #include <memory> | |
| #include <sstream> | |
| #include <string> | |
| #include <vector> | |
| #include "build/build_config.h" | |
| #include "testing/gtest/include/gtest/gtest.h" | |
| namespace { | |
| struct OnlyNumbers { | |
| int x; | |
| int y; | |
| }; | |
| } // namespace | |
| FX_DATA_PARTITION_EXCEPTION(OnlyNumbers); | |
| TEST(fxcrt, FxFreeDeleter) { | |
| std::unique_ptr<int, FxFreeDeleter> empty(nullptr); | |
| std::unique_ptr<int, FxFreeDeleter> thing(FX_Alloc(int, 1)); | |
| std::unique_ptr<int, FxFreeDeleter> several(FX_Alloc(int, 100)); | |
| EXPECT_FALSE(empty); | |
| EXPECT_TRUE(thing); | |
| EXPECT_TRUE(several); | |
| } | |
| TEST(fxcrt, FxAllocAllocator) { | |
| // Let ASAN sanity check some simple operations. | |
| std::vector<int, FxAllocAllocator<int>> vec; | |
| vec.push_back(42); | |
| vec.reserve(100); | |
| vec.resize(20); | |
| vec[11] = 42; | |
| std::vector<int, FxAllocAllocator<int>> vec2 = vec; | |
| vec = std::move(vec2); | |
| vec2.resize(0); | |
| vec2.push_back(42); | |
| } | |
| TEST(fxcrt, FxStringAllocator) { | |
| // Let ASAN sanity check some simple operations. | |
| std::basic_ostringstream<char, std::char_traits<char>, | |
| FxStringAllocator<char>> | |
| str; | |
| str << 'B'; | |
| str << "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; | |
| str << "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; | |
| str << "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; | |
| str << 42.0f; | |
| } | |
| TEST(fxcrt, FxAllocAllocatorStructException) { | |
| std::vector<OnlyNumbers, FxAllocAllocator<OnlyNumbers>> vec; | |
| vec.push_back({42, 73}); | |
| EXPECT_EQ(vec.back().x, 42); | |
| EXPECT_EQ(vec.back().y, 73); | |
| } |