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

strict bits StrictBitsUint8 : uint8 {
    A = 0x1;
    B = 0x2;
};

strict bits StrictBitsUint16 : uint16 {
    A = 0x1;
    B = 0x2;
};

strict bits StrictBitsUint32 : uint32 {
    A = 0x1;
    B = 0x2;
};

strict bits StrictBitsUint64 : uint64 {
    A = 0x1;
    B = 0x2;
};

struct StrictBitsUint8Struct {
    StrictBitsUint8 b;
};

struct StrictBitsUint16Struct {
    StrictBitsUint16 b;
};

struct StrictBitsUint32Struct {
    StrictBitsUint32 b;
};

struct StrictBitsUint64Struct {
    StrictBitsUint64 b;
};
