blob: 40b7a62157760b9a8b782407729eca1e043fd915 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <lib/fidl/llcpp/buffer_then_heap_allocator.h>
#include <lib/fidl/llcpp/memory.h>
#include <fbl/string.h>
#include <gtest/gtest.h>
TEST(Memory, TrackingPointerUnowned) {
uint32_t obj;
fidl::unowned_ptr_t<uint32_t> ptr = fidl::unowned_ptr(&obj);
EXPECT_EQ(ptr.get(), &obj);
}
TEST(Memory, VectorViewUnownedArray) {
uint32_t obj[1] = {1};
fidl::VectorView<uint32_t> vv = fidl::unowned_vec(obj);
EXPECT_EQ(vv.count(), std::size(obj));
EXPECT_EQ(vv.data(), std::data(obj));
}
TEST(Memory, VectorViewUnownedFidlArray) {
fidl::Array<uint32_t, 1> obj = {1};
fidl::VectorView<uint32_t> vv = fidl::unowned_vec(obj);
EXPECT_EQ(vv.count(), std::size(obj));
EXPECT_EQ(vv.data(), std::data(obj));
}
TEST(Memory, VectorViewUnownedStdVector) {
std::vector<uint32_t> obj;
obj.push_back(1);
fidl::VectorView<uint32_t> vv = fidl::unowned_vec(obj);
EXPECT_EQ(vv.count(), std::size(obj));
EXPECT_EQ(vv.data(), std::data(obj));
}
TEST(Memory, VectorViewHeapCopyArray) {
uint32_t obj[1] = {1};
fidl::VectorView<uint32_t> vv = fidl::heap_copy_vec(obj);
EXPECT_EQ(vv.count(), std::size(obj));
EXPECT_NE(vv.data(), std::data(obj));
EXPECT_EQ(vv.data()[0], std::data(obj)[0]);
}
TEST(Memory, VectorViewHeapCopyFidlArray) {
fidl::Array<uint32_t, 1> obj = {1};
fidl::VectorView<uint32_t> vv = fidl::heap_copy_vec(obj);
EXPECT_EQ(vv.count(), std::size(obj));
EXPECT_NE(vv.data(), std::data(obj));
EXPECT_EQ(vv.data()[0], std::data(obj)[0]);
}
TEST(Memory, VectorViewHeapCopyStdVector) {
std::vector<uint32_t> obj;
obj.push_back(1);
fidl::VectorView<uint32_t> vv = fidl::heap_copy_vec(obj);
EXPECT_EQ(vv.count(), std::size(obj));
EXPECT_NE(vv.data(), std::data(obj));
EXPECT_EQ(vv.data()[0], std::data(obj)[0]);
}
TEST(Memory, VectorViewCopyArray) {
fidl::BufferThenHeapAllocator<2048> allocator;
uint32_t obj[1] = {1};
fidl::VectorView<uint32_t> vv = fidl::copy_vec(allocator, obj);
EXPECT_EQ(vv.count(), std::size(obj));
EXPECT_NE(vv.data(), std::data(obj));
EXPECT_EQ(vv.data()[0], std::data(obj)[0]);
}
TEST(Memory, VectorViewCopyFidlArray) {
fidl::BufferThenHeapAllocator<2048> allocator;
fidl::Array<uint32_t, 1> obj = {1};
fidl::VectorView<uint32_t> vv = fidl::copy_vec(allocator, obj);
EXPECT_EQ(vv.count(), std::size(obj));
EXPECT_NE(vv.data(), std::data(obj));
EXPECT_EQ(vv.data()[0], std::data(obj)[0]);
}
TEST(Memory, VectorViewCopyStdVector) {
fidl::BufferThenHeapAllocator<2048> allocator;
std::vector<uint32_t> obj;
obj.push_back(1);
fidl::VectorView<uint32_t> vv = fidl::copy_vec(allocator, obj);
EXPECT_EQ(vv.count(), std::size(obj));
EXPECT_NE(vv.data(), std::data(obj));
EXPECT_EQ(vv.data()[0], std::data(obj)[0]);
}
TEST(Memory, StringViewUnownedStdString) {
std::string str = "abcd";
fidl::StringView sv = fidl::unowned_str(str);
EXPECT_EQ(sv.size(), str.size());
EXPECT_EQ(sv.data(), str.data());
}
TEST(Memory, StringViewUnownedFblString) {
fbl::String str = "abcd";
fidl::StringView sv = fidl::unowned_str(str);
EXPECT_EQ(sv.size(), str.size());
EXPECT_EQ(sv.data(), str.data());
}
TEST(Memory, StringViewUnownedStdStringView) {
std::string_view str = "abcd";
fidl::StringView sv = fidl::unowned_str(str);
EXPECT_EQ(sv.size(), str.size());
EXPECT_EQ(sv.data(), str.data());
}
TEST(Memory, StringViewUnownedCharPtrLength) {
const char* str = "abcd";
constexpr size_t len = 2;
fidl::StringView sv = fidl::unowned_str(str, len);
EXPECT_EQ(sv.size(), len);
EXPECT_EQ(sv.data(), str);
}
TEST(Memory, StringViewHeapCopyStdString) {
std::string str = "abcd";
fidl::StringView sv = fidl::heap_copy_str(str);
EXPECT_EQ(sv.size(), str.size());
EXPECT_NE(sv.data(), str.data());
for (size_t i = 0; i < str.size(); i++) {
EXPECT_EQ(sv[i], str[i]);
}
}
TEST(Memory, StringViewHeapCopyFblString) {
fbl::String str = "abcd";
fidl::StringView sv = fidl::heap_copy_str(str);
EXPECT_EQ(sv.size(), str.size());
EXPECT_NE(sv.data(), str.data());
for (size_t i = 0; i < str.size(); i++) {
EXPECT_EQ(sv[i], str[i]);
}
}
TEST(Memory, StringViewHeapCopyStdStringView) {
std::string_view str = "abcd";
fidl::StringView sv = fidl::heap_copy_str(str);
EXPECT_EQ(sv.size(), str.size());
EXPECT_NE(sv.data(), str.data());
for (size_t i = 0; i < str.size(); i++) {
EXPECT_EQ(sv[i], str[i]);
}
}
TEST(Memory, StringViewHeapCopyCharPtrLength) {
const char* str = "abcd";
constexpr size_t len = 2;
fidl::StringView sv = fidl::heap_copy_str(str, len);
EXPECT_EQ(sv.size(), len);
EXPECT_NE(sv.data(), str);
for (size_t i = 0; i < len; i++) {
EXPECT_EQ(sv[i], str[i]);
}
}
TEST(Memory, StringViewCopyStdString) {
fidl::BufferThenHeapAllocator<2048> allocator;
std::string str = "abcd";
fidl::StringView sv = fidl::copy_str(allocator, str);
EXPECT_EQ(sv.size(), str.size());
EXPECT_NE(sv.data(), str.data());
for (size_t i = 0; i < str.size(); i++) {
EXPECT_EQ(sv[i], str[i]);
}
}
TEST(Memory, StringViewCopyFblString) {
fidl::BufferThenHeapAllocator<2048> allocator;
fbl::String str = "abcd";
fidl::StringView sv = fidl::copy_str(allocator, str);
EXPECT_EQ(sv.size(), str.size());
EXPECT_NE(sv.data(), str.data());
for (size_t i = 0; i < str.size(); i++) {
EXPECT_EQ(sv[i], str[i]);
}
}
TEST(Memory, StringViewCopyStdStringView) {
fidl::BufferThenHeapAllocator<2048> allocator;
std::string_view str = "abcd";
fidl::StringView sv = fidl::copy_str(allocator, str);
EXPECT_EQ(sv.size(), str.size());
EXPECT_NE(sv.data(), str.data());
for (size_t i = 0; i < str.size(); i++) {
EXPECT_EQ(sv[i], str[i]);
}
}
TEST(Memory, StringViewCopyCharPtrLength) {
fidl::BufferThenHeapAllocator<2048> allocator;
const char* str = "abcd";
constexpr size_t len = 2;
fidl::StringView sv = fidl::copy_str(allocator, str, len);
EXPECT_EQ(sv.size(), len);
EXPECT_NE(sv.data(), str);
for (size_t i = 0; i < len; i++) {
EXPECT_EQ(sv[i], str[i]);
}
}