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

type FlexibleBitsUint8 = flexible bits : uint8 {
    A = 0x1;
    B = 0x2;
};

type FlexibleBitsUint16 = flexible bits : uint16 {
    A = 0x1;
    B = 0x2;
};

type FlexibleBitsUint32 = flexible bits : uint32 {
    A = 0x1;
    B = 0x2;
};

type FlexibleBitsUint64 = flexible bits : uint64 {
    A = 0x1;
    B = 0x2;
};

type FlexibleBitsUint8Struct = struct {
    b FlexibleBitsUint8;
};

type FlexibleBitsUint16Struct = struct {
    b FlexibleBitsUint16;
};

type FlexibleBitsUint32Struct = struct {
    b FlexibleBitsUint32;
};

type FlexibleBitsUint64Struct = struct {
    b FlexibleBitsUint64;
};
