// Copyright 2019 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.
//
// Code generated by tools/fidl/gidl-conformance-suite/regen.sh; DO NOT EDIT.

// +build fuchsia

//

#include <conformance/cpp/fidl.h>
#include <gtest/gtest.h>
#include <lib/fidl/cpp/test/test_util.h>

TEST(Conformance, EmptyStruct_Encoding) {
  conformance::EmptyStruct v1;

  auto expected = std::vector<uint8_t>{
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, EmptyStruct_Decoding) {
  auto input = std::vector<uint8_t>{
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  conformance::EmptyStruct v1;

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, EmptyStructSandwich_Encoding) {
  conformance::EmptyStructSandwich v1;

  std::string v2 = "before";
  v1.before = std::move(v2);

  conformance::EmptyStruct v3;
  v1.es = std::move(v3);

  std::string v4 = "after";
  v1.after = std::move(v4);

  auto expected = std::vector<uint8_t>{
      0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x00, 0x00,
      0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, EmptyStructSandwich_Decoding) {
  auto input = std::vector<uint8_t>{
      0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x00, 0x00,
      0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  conformance::EmptyStructSandwich v1;

  std::string v2 = "before";
  v1.before = std::move(v2);

  conformance::EmptyStruct v3;
  v1.es = std::move(v3);

  std::string v4 = "after";
  v1.after = std::move(v4);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, Uint8Uint16Uint32Uint64_Encoding) {
  conformance::Uint8Uint16Uint32Uint64 v1;

  uint64_t v2 = 515ull;
  v1.f2 = std::move(v2);

  uint64_t v3 = 67438087ull;
  v1.f3 = std::move(v3);

  uint64_t v4 = 579005069656919567ull;
  v1.f4 = std::move(v4);

  uint64_t v5 = 1ull;
  v1.f1 = std::move(v5);

  auto expected = std::vector<uint8_t>{
      0x01, 0x00, 0x03, 0x02, 0x07, 0x06, 0x05, 0x04,
      0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, Uint8Uint16Uint32Uint64_Decoding) {
  auto input = std::vector<uint8_t>{
      0x01, 0x00, 0x03, 0x02, 0x07, 0x06, 0x05, 0x04,
      0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,

  };

  conformance::Uint8Uint16Uint32Uint64 v1;

  uint64_t v2 = 515ull;
  v1.f2 = std::move(v2);

  uint64_t v3 = 67438087ull;
  v1.f3 = std::move(v3);

  uint64_t v4 = 579005069656919567ull;
  v1.f4 = std::move(v4);

  uint64_t v5 = 1ull;
  v1.f1 = std::move(v5);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, Uint64Uint32Uint16Uint8_Encoding) {
  conformance::Uint64Uint32Uint16Uint8 v1;

  uint64_t v2 = 579005069656919567ull;
  v1.f1 = std::move(v2);

  uint64_t v3 = 67438087ull;
  v1.f2 = std::move(v3);

  uint64_t v4 = 515ull;
  v1.f3 = std::move(v4);

  uint64_t v5 = 1ull;
  v1.f4 = std::move(v5);

  auto expected = std::vector<uint8_t>{
      0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
      0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, Uint64Uint32Uint16Uint8_Decoding) {
  auto input = std::vector<uint8_t>{
      0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
      0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,

  };

  conformance::Uint64Uint32Uint16Uint8 v1;

  uint64_t v2 = 579005069656919567ull;
  v1.f1 = std::move(v2);

  uint64_t v3 = 67438087ull;
  v1.f2 = std::move(v3);

  uint64_t v4 = 515ull;
  v1.f3 = std::move(v4);

  uint64_t v5 = 1ull;
  v1.f4 = std::move(v5);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, SimpleTableEmpty_Encoding) {
  conformance::StructOfSimpleTable v1;

  conformance::SimpleTable v2;
  v1.table = std::move(v2);

  auto expected = std::vector<uint8_t>{
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, SimpleTableEmpty_Decoding) {
  auto input = std::vector<uint8_t>{
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,

  };

  conformance::StructOfSimpleTable v1;

  conformance::SimpleTable v2;
  v1.table = std::move(v2);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, SimpleTableXAndY_Encoding) {
  conformance::StructOfSimpleTable v1;

  conformance::SimpleTable v2;

  uint64_t v3 = 42ull;
  v2.set_x(std::move(v3));

  uint64_t v4 = 67ull;
  v2.set_y(std::move(v4));
  v1.table = std::move(v2);

  auto expected = std::vector<uint8_t>{
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
      0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, SimpleTableXAndY_Decoding) {
  auto input = std::vector<uint8_t>{
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
      0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00,

  };

  conformance::StructOfSimpleTable v1;

  conformance::SimpleTable v2;

  uint64_t v3 = 42ull;
  v2.set_x(std::move(v3));

  uint64_t v4 = 67ull;
  v2.set_y(std::move(v4));
  v1.table = std::move(v2);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, SimpleTableJustY_Encoding) {
  conformance::StructOfSimpleTable v1;

  conformance::SimpleTable v2;

  uint64_t v3 = 67ull;
  v2.set_y(std::move(v3));
  v1.table = std::move(v2);

  auto expected = std::vector<uint8_t>{
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
      0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, SimpleTableJustY_Decoding) {
  auto input = std::vector<uint8_t>{
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
      0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  conformance::StructOfSimpleTable v1;

  conformance::SimpleTable v2;

  uint64_t v3 = 67ull;
  v2.set_y(std::move(v3));
  v1.table = std::move(v2);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, TableWithStringAndVectorNoVectorContent_Encoding) {
  conformance::StructOfTableWithStringAndVector v1;

  conformance::TableWithStringAndVector v2;

  std::string v3 = "hello";
  v2.set_foo(std::move(v3));

  uint64_t v4 = 27ull;
  v2.set_bar(std::move(v4));
  v1.table = std::move(v2);

  auto expected = std::vector<uint8_t>{
      0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
      0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, TableWithStringAndVectorNoVectorContent_Decoding) {
  auto input = std::vector<uint8_t>{
      0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
      0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  conformance::StructOfTableWithStringAndVector v1;

  conformance::TableWithStringAndVector v2;

  std::string v3 = "hello";
  v2.set_foo(std::move(v3));

  uint64_t v4 = 27ull;
  v2.set_bar(std::move(v4));
  v1.table = std::move(v2);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, SimpleTableThenUint64_Encoding) {
  conformance::SimpleTableThenUint64 v1;

  conformance::SimpleTable v2;

  uint64_t v3 = 42ull;
  v2.set_x(std::move(v3));

  uint64_t v4 = 67ull;
  v2.set_y(std::move(v4));
  v1.table = std::move(v2);

  uint64_t v5 = 16045690984833335023ull;
  v1.number = std::move(v5);

  auto expected = std::vector<uint8_t>{
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde,
      0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, SimpleTableThenUint64_Decoding) {
  auto input = std::vector<uint8_t>{
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde,
      0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  conformance::SimpleTableThenUint64 v1;

  conformance::SimpleTable v2;

  uint64_t v3 = 42ull;
  v2.set_x(std::move(v3));

  uint64_t v4 = 67ull;
  v2.set_y(std::move(v4));
  v1.table = std::move(v2);

  uint64_t v5 = 16045690984833335023ull;
  v1.number = std::move(v5);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, InlineXUnionInStruct_Encoding) {
  conformance::TestInlineXUnionInStruct v1;

  std::string v2 = "before";
  v1.before = std::move(v2);

  conformance::SampleXUnion v3;

  uint64_t v4 = 3735928559ull;
  v3.set_u(std::move(v4));
  v1.xu = std::move(v3);

  std::string v5 = "after";
  v1.after = std::move(v5);

  auto expected = std::vector<uint8_t>{
      0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0xb2, 0x56, 0x9c, 0x38, 0x00, 0x00, 0x00, 0x00,
      0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0xef, 0xbe, 0xad, 0xde, 0x00, 0x00, 0x00, 0x00,
      0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, InlineXUnionInStruct_Decoding) {
  auto input = std::vector<uint8_t>{
      0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0xb2, 0x56, 0x9c, 0x38, 0x00, 0x00, 0x00, 0x00,
      0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0xef, 0xbe, 0xad, 0xde, 0x00, 0x00, 0x00, 0x00,
      0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  conformance::TestInlineXUnionInStruct v1;

  std::string v2 = "before";
  v1.before = std::move(v2);

  conformance::SampleXUnion v3;

  uint64_t v4 = 3735928559ull;
  v3.set_u(std::move(v4));
  v1.xu = std::move(v3);

  std::string v5 = "after";
  v1.after = std::move(v5);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, OptionalXUnionInStructAbsent_Encoding) {
  conformance::TestOptionalXUnionInStruct v1;

  std::string v2 = "before";
  v1.before = std::move(v2);

  std::string v3 = "after";
  v1.after = std::move(v3);

  auto expected = std::vector<uint8_t>{
      0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, OptionalXUnionInStructAbsent_Decoding) {
  auto input = std::vector<uint8_t>{
      0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  conformance::TestOptionalXUnionInStruct v1;

  std::string v2 = "before";
  v1.before = std::move(v2);

  std::string v3 = "after";
  v1.after = std::move(v3);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, OptionalXUnionInStructPresent_Encoding) {
  conformance::TestOptionalXUnionInStruct v1;

  auto v2 = std::make_unique<conformance::SampleXUnion>();

  uint64_t v3 = 3735928559ull;
  v2->set_u(std::move(v3));
  v1.xu = std::move(v2);

  std::string v4 = "after";
  v1.after = std::move(v4);

  std::string v5 = "before";
  v1.before = std::move(v5);

  auto expected = std::vector<uint8_t>{
      0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0xb2, 0x56, 0x9c, 0x38, 0x00, 0x00, 0x00, 0x00,
      0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0xef, 0xbe, 0xad, 0xde, 0x00, 0x00, 0x00, 0x00,
      0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, OptionalXUnionInStructPresent_Decoding) {
  auto input = std::vector<uint8_t>{
      0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0xb2, 0x56, 0x9c, 0x38, 0x00, 0x00, 0x00, 0x00,
      0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0xef, 0xbe, 0xad, 0xde, 0x00, 0x00, 0x00, 0x00,
      0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  conformance::TestOptionalXUnionInStruct v1;

  auto v2 = std::make_unique<conformance::SampleXUnion>();

  uint64_t v3 = 3735928559ull;
  v2->set_u(std::move(v3));
  v1.xu = std::move(v2);

  std::string v4 = "after";
  v1.after = std::move(v4);

  std::string v5 = "before";
  v1.before = std::move(v5);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, XUnionInTableXUnionAbsent_Encoding) {
  conformance::TestXUnionInTable v1;

  conformance::XUnionInTable v2;

  std::string v3 = "before";
  v2.set_before(std::move(v3));

  std::string v4 = "after";
  v2.set_after(std::move(v4));
  v1.value = std::move(v2);

  auto expected = std::vector<uint8_t>{
      0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x61, 0x66, 0x74, 0x65,
      0x72, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, XUnionInTableXUnionAbsent_Decoding) {
  auto input = std::vector<uint8_t>{
      0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x61, 0x66, 0x74, 0x65,
      0x72, 0x00, 0x00, 0x00,

  };

  conformance::TestXUnionInTable v1;

  conformance::XUnionInTable v2;

  std::string v3 = "before";
  v2.set_before(std::move(v3));

  std::string v4 = "after";
  v2.set_after(std::move(v4));
  v1.value = std::move(v2);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, XUnionInTableXUnionPresent_Encoding) {
  conformance::TestXUnionInTable v1;

  conformance::XUnionInTable v2;

  std::string v3 = "before";
  v2.set_before(std::move(v3));

  conformance::SampleXUnion v4;

  uint64_t v5 = 3735928559ull;
  v4.set_u(std::move(v5));
  v2.set_xu(std::move(v4));

  std::string v6 = "after";
  v2.set_after(std::move(v6));
  v1.value = std::move(v2);

  auto expected = std::vector<uint8_t>{
      0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
      0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0xb2, 0x56, 0x9c, 0x38, 0x00, 0x00, 0x00, 0x00,
      0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0xef, 0xbe, 0xad, 0xde, 0x00, 0x00, 0x00, 0x00,
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, XUnionInTableXUnionPresent_Decoding) {
  auto input = std::vector<uint8_t>{
      0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
      0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x65, 0x66, 0x6f,
      0x72, 0x65, 0x00, 0x00, 0xb2, 0x56, 0x9c, 0x38, 0x00, 0x00, 0x00, 0x00,
      0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0xef, 0xbe, 0xad, 0xde, 0x00, 0x00, 0x00, 0x00,
      0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00,

  };

  conformance::TestXUnionInTable v1;

  conformance::XUnionInTable v2;

  std::string v3 = "before";
  v2.set_before(std::move(v3));

  conformance::SampleXUnion v4;

  uint64_t v5 = 3735928559ull;
  v4.set_u(std::move(v5));
  v2.set_xu(std::move(v4));

  std::string v6 = "after";
  v2.set_after(std::move(v6));
  v1.value = std::move(v2);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, AddEthernetDeviceRequest_Encoding) {
  conformance::TestAddEthernetDeviceRequest v1;

  std::string v2 = "@/dev/sys/pci/00:03.0/e1000/ethernet";
  v1.topological_path = std::move(v2);

  conformance::InterfaceConfig v3;

  std::string v4 = "ethp0003";
  v3.name = std::move(v4);

  conformance::IpAddressConfig v5;

  bool v6 = true;
  v5.set_dhcp(std::move(v6));
  v3.ip_address_config = std::move(v5);
  v1.config = std::move(v3);

  uint64_t v7 = 4294967295ull;
  v1.this_should_be_a_handle = std::move(v7);

  auto expected = std::vector<uint8_t>{
      0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
      0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x40, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x79, 0x73, 0x2f, 0x70, 0x63,
      0x69, 0x2f, 0x30, 0x30, 0x3a, 0x30, 0x33, 0x2e, 0x30, 0x2f, 0x65, 0x31,
      0x30, 0x30, 0x30, 0x2f, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74,
      0x00, 0x00, 0x00, 0x00, 0x65, 0x74, 0x68, 0x70, 0x30, 0x30, 0x30, 0x33,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, AddEthernetDeviceRequest_Decoding) {
  auto input = std::vector<uint8_t>{
      0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
      0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x40, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x79, 0x73, 0x2f, 0x70, 0x63,
      0x69, 0x2f, 0x30, 0x30, 0x3a, 0x30, 0x33, 0x2e, 0x30, 0x2f, 0x65, 0x31,
      0x30, 0x30, 0x30, 0x2f, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74,
      0x00, 0x00, 0x00, 0x00, 0x65, 0x74, 0x68, 0x70, 0x30, 0x30, 0x30, 0x33,

  };

  conformance::TestAddEthernetDeviceRequest v1;

  std::string v2 = "@/dev/sys/pci/00:03.0/e1000/ethernet";
  v1.topological_path = std::move(v2);

  conformance::InterfaceConfig v3;

  std::string v4 = "ethp0003";
  v3.name = std::move(v4);

  conformance::IpAddressConfig v5;

  bool v6 = true;
  v5.set_dhcp(std::move(v6));
  v3.ip_address_config = std::move(v5);
  v1.config = std::move(v3);

  uint64_t v7 = 4294967295ull;
  v1.this_should_be_a_handle = std::move(v7);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, FileGetAttrResponse_Encoding) {
  conformance::FileGetAttrResponse v1;

  uint64_t v2 = 2125315759ull;
  v1.s = std::move(v2);

  conformance::NodeAttributes v3;

  uint64_t v4 = 1ull;
  v3.link_count = std::move(v4);

  uint64_t v5 = 9833440827789222417ull;
  v3.creation_time = std::move(v5);

  uint64_t v6 = 72038755451251353ull;
  v3.modification_time = std::move(v6);

  uint64_t v7 = 2518909348ull;
  v3.mode = std::move(v7);

  uint64_t v8 = 1ull;
  v3.id = std::move(v8);

  uint64_t v9 = 231ull;
  v3.content_size = std::move(v9);

  uint64_t v10 = 231ull;
  v3.storage_size = std::move(v10);
  v1.attributes = std::move(v3);

  auto expected = std::vector<uint8_t>{
      0xaf, 0xbe, 0xad, 0x7e, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x81, 0x23,
      0x96, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
      0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, FileGetAttrResponse_Decoding) {
  auto input = std::vector<uint8_t>{
      0xaf, 0xbe, 0xad, 0x7e, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x81, 0x23,
      0x96, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
      0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00,

  };

  conformance::FileGetAttrResponse v1;

  uint64_t v2 = 2125315759ull;
  v1.s = std::move(v2);

  conformance::NodeAttributes v3;

  uint64_t v4 = 1ull;
  v3.link_count = std::move(v4);

  uint64_t v5 = 9833440827789222417ull;
  v3.creation_time = std::move(v5);

  uint64_t v6 = 72038755451251353ull;
  v3.modification_time = std::move(v6);

  uint64_t v7 = 2518909348ull;
  v3.mode = std::move(v7);

  uint64_t v8 = 1ull;
  v3.id = std::move(v8);

  uint64_t v9 = 231ull;
  v3.content_size = std::move(v9);

  uint64_t v10 = 231ull;
  v3.storage_size = std::move(v10);
  v1.attributes = std::move(v3);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}

TEST(Conformance, Optionals_Encoding) {
  conformance::StructWithOptionals v1;

  auto v2 = std::make_unique<conformance::UnionWithEmptyStruct>();

  conformance::EmptyStruct v3;
  v2->set_s(std::move(v3));
  v1.u2 = std::move(v2);

  conformance::EmptyStruct v4;
  v1.s = std::move(v4);

  auto v5 = std::make_unique<conformance::EmptyStruct>();
  v1.s2 = std::move(v5);

  conformance::TableWithEmptyStruct v6;

  conformance::EmptyStruct v7;
  v6.set_s(std::move(v7));
  v1.t = std::move(v6);

  conformance::XUnionWithEmptyStruct v8;

  conformance::EmptyStruct v9;
  v8.set_s(std::move(v9));
  v1.xu = std::move(v8);

  auto v10 = std::make_unique<conformance::XUnionWithEmptyStruct>();

  conformance::EmptyStruct v11;
  v10->set_s(std::move(v11));
  v1.xu2 = std::move(v10);

  conformance::UnionWithEmptyStruct v12;

  conformance::EmptyStruct v13;
  v12.set_s(std::move(v13));
  v1.u = std::move(v12);

  auto expected = std::vector<uint8_t>{
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xe0, 0x99, 0x74,
      0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xe0, 0x99, 0x74,
      0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  EXPECT_TRUE(::fidl::test::util::ValueToBytes(v1, expected));
}

TEST(Conformance, Optionals_Decoding) {
  auto input = std::vector<uint8_t>{
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
      0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xe0, 0x99, 0x74,
      0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xe0, 0x99, 0x74,
      0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  };

  conformance::StructWithOptionals v1;

  auto v2 = std::make_unique<conformance::UnionWithEmptyStruct>();

  conformance::EmptyStruct v3;
  v2->set_s(std::move(v3));
  v1.u2 = std::move(v2);

  conformance::EmptyStruct v4;
  v1.s = std::move(v4);

  auto v5 = std::make_unique<conformance::EmptyStruct>();
  v1.s2 = std::move(v5);

  conformance::TableWithEmptyStruct v6;

  conformance::EmptyStruct v7;
  v6.set_s(std::move(v7));
  v1.t = std::move(v6);

  conformance::XUnionWithEmptyStruct v8;

  conformance::EmptyStruct v9;
  v8.set_s(std::move(v9));
  v1.xu = std::move(v8);

  auto v10 = std::make_unique<conformance::XUnionWithEmptyStruct>();

  conformance::EmptyStruct v11;
  v10->set_s(std::move(v11));
  v1.xu2 = std::move(v10);

  conformance::UnionWithEmptyStruct v12;

  conformance::EmptyStruct v13;
  v12.set_s(std::move(v13));
  v1.u = std::move(v12);

  auto expected = ::fidl::test::util::DecodedBytes<decltype(v1)>(input);
  EXPECT_TRUE(::fidl::Equals(v1, expected));
}
