blob: 4e7d795092e42f81a0fcf459a48237fb0d45d572 [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/memory.h>
#include <lib/fidl/llcpp/message.h>
#include <fidl/llcpp/linearized/test/llcpp/fidl.h>
#include <gtest/gtest.h>
namespace fidl_linearized = ::llcpp::fidl::llcpp::linearized::test;
TEST(LinearizedAndEncoded, FullyLinearizedAndEncoded) {
fidl_linearized::InnerStruct inner = {.x = 1};
fidl_linearized::FullyLinearizedStruct input{.ptr = fidl::unowned_ptr(&inner)};
fidl::OwnedEncodedMessage<fidl_linearized::FullyLinearizedStruct> encoded(&input);
EXPECT_TRUE(encoded.ok());
auto encoded_obj = reinterpret_cast<fidl_linearized::FullyLinearizedStruct*>(
encoded.GetOutgoingMessage().bytes());
EXPECT_NE(encoded_obj, &input);
EXPECT_EQ(*reinterpret_cast<uintptr_t*>(&encoded_obj->ptr), FIDL_ALLOC_PRESENT);
EXPECT_EQ(reinterpret_cast<fidl_linearized::InnerStruct*>(encoded_obj + 1)->x, input.ptr->x);
}