// 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 test.conformance;

type ThreeByte = struct {
    elem1 uint8;
    elem2 uint8;
    elem3 uint8;
};

type FiveByte = struct {
    elem1 uint32;
    elem2 uint8;
};

type ThreeByteInStruct = struct {
    elem1 ThreeByte;
    elem2 ThreeByte;
    elem3 ThreeByte;
};

type FiveByteInStruct = struct {
    elem1 FiveByte;
    elem2 FiveByte;
    elem3 FiveByte;
};

type ThreeByteInVector = struct {
    elems vector<ThreeByte>;
};

type FiveByteInVector = struct {
    elems vector<FiveByte>;
};

type ThreeByteInArray = struct {
    elems array<ThreeByte, 3>;
};

type FiveByteInArray = struct {
    elems array<FiveByte, 3>;
};
