// 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.

library conformance;

union UnionWithBoundString {
    string:5 boundFiveStr;
};

struct UnionWithBoundStringStruct {
    UnionWithBoundString v;
};

union SingleVariantUnion {
    1: uint32 x;
};

struct SingleVariantUnionStruct {
    SingleVariantUnion u;
};

union UnionSize8Alignment4 {
    1: uint8 unused1;
    2: uint8 unused2;
    3: uint32 variant;
};

struct SandwichUnionSize8Alignment4 {
    uint32 before;
    UnionSize8Alignment4 union;
    uint32 after;
};

union UnionSize12Alignment4 {
    1: uint8 unused1;
    2: uint8 unused2;
    3: uint8 unused3;
    4: array<uint8>:6 variant;
};

struct SandwichUnionSize12Alignment4 {
    uint32 before;
    UnionSize12Alignment4 union;
    uint32 after;
};

struct StructSize16Alignment8 {
    uint64 f1;
    uint64 f2;
};

union UnionSize24Alignment8 {
    1: uint8 unused1;
    2: uint8 unused2;
    3: uint8 unused3;
    4: StructSize16Alignment8 variant;
};

struct SandwichUnionSize24Alignment8 {
    uint32 before;
    UnionSize24Alignment8 union;
    uint32 after;
};

union UnionSize36Alignment4 {
    1: uint8 unused1;
    2: uint8 unused2;
    3: uint8 unused3;
    4: array<uint8>:32 variant;
};

struct SandwichUnionSize36Alignment4 {
    uint32 before;
    UnionSize36Alignment4 union;
    uint32 after;
};
