blob: 763836116fc1b6e569cac224281ac2003c731282 [file] [log] [blame]
// 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);
}