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

success("StrictEnumInt8Struct") {
    value = StrictEnumInt8Struct{
        e: 0x01,
    },
    bytes = {
        v1, v2 = [
            0x01, padding:7,
        ],
    },
}

success("StrictEnumInt16Struct") {
    value = StrictEnumInt16Struct{
        e: 0x0102,
    },
    bytes = {
        v1, v2 = [
            0x02, 0x01, padding:6,
        ],
    },
}

success("StrictEnumInt32Struct") {
    value = StrictEnumInt32Struct{
        e: 0x01020304,
    },
    bytes = {
        v1, v2 = [
            0x04, 0x03, 0x02, 0x01, padding:4,
        ],
    },
}

success("StrictEnumInt64Struct") {
    value = StrictEnumInt64Struct{
        e: 0x0102030405060708,
    },
    bytes = {
        v1, v2 = [
            0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01,
        ],
    },
}

success("StrictEnumUint8Struct") {
    value = StrictEnumUint8Struct{
        e: 0x01,
    },
    bytes = {
        v1, v2 = [
            0x01, padding:7,
        ],
    },
}

success("StrictEnumUint16Struct") {
    value = StrictEnumUint16Struct{
        e: 0x0102,
    },
    bytes = {
        v1, v2 = [
            0x02, 0x01, padding:6,
        ],
    },
}

success("StrictEnumUint32Struct") {
    value = StrictEnumUint32Struct{
        e: 0x01020304,
    },
    bytes = {
        v1, v2 = [
            0x04, 0x03, 0x02, 0x01, padding:4,
        ],
    },
}

success("StrictEnumUint64Struct") {
    value = StrictEnumUint64Struct{
        e: 0x0102030405060708,
    },
    bytes = {
        v1, v2 = [
            0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01,
        ],
    },
}

success("VectorOfEnumStruct") {
    value = VectorOfEnumStruct{
        v: [0x0102],
    },
    bytes = {
        v1, v2 = [
            0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
            0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        ],
    },
}

encode_failure("StrictEnumInt8StructUnknownValue") {
    // Rust: cannot construct invalid enum.
    bindings_denylist = [rust],
    value = StrictEnumInt8Struct{
        e: 0x08, // invalid value
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

encode_failure("StrictEnumInt16StructUnknownValue") {
    // Rust: cannot construct invalid enum.
    bindings_denylist = [rust],
    value = StrictEnumInt16Struct{
        e: 0x08, // invalid value
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

encode_failure("StrictEnumInt32StructUnknownValue") {
    // Rust: cannot construct invalid enum.
    bindings_denylist = [rust],
    value = StrictEnumInt32Struct{
        e: 0x08, // invalid value
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

encode_failure("StrictEnumInt64StructUnknownValue") {
    // Rust: cannot construct invalid enum.
    bindings_denylist = [rust],
    value = StrictEnumInt64Struct{
        e: 0x08, // invalid value
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

encode_failure("StrictEnumUint8StructUnknownValue") {
    // Rust: cannot construct invalid enum.
    bindings_denylist = [rust],
    value = StrictEnumUint8Struct{
        e: 0x08, // invalid value
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

encode_failure("StrictEnumUint16StructUnknownValue") {
    // Rust: cannot construct invalid enum.
    bindings_denylist = [rust],
    value = StrictEnumUint16Struct{
        e: 0x08, // invalid value
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

encode_failure("StrictEnumUint32StructUnknownValue") {
    // Rust: cannot construct invalid enum.
    bindings_denylist = [rust],
    value = StrictEnumUint32Struct{
        e: 0x08, // invalid value
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

encode_failure("StrictEnumUint64StructUnknownValue") {
    // Rust: cannot construct invalid enum.
    bindings_denylist = [rust],
    value = StrictEnumUint64Struct{
        e: 0x08, // invalid value
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

decode_failure("StrictEnumInt8StructUnknownValue") {
    type = StrictEnumInt8Struct,
    bytes = {
        v1, v2 = [
            0xaa, padding:7,
        ],
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

decode_failure("StrictEnumInt16StructUnknownValue") {
    type = StrictEnumInt16Struct,
    bytes = {
        v1, v2 = [
            0xaa, 0xaa, padding:6,
        ],
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

decode_failure("StrictEnumInt32StructUnknownValue") {
    type = StrictEnumInt32Struct,
    bytes = {
        v1, v2 = [
            0xaa, 0xaa, 0xaa, 0xaa, padding:4,
        ],
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

decode_failure("StrictEnumInt64StructUnknownValue") {
    type = StrictEnumInt64Struct,
    bytes = {
        v1, v2 = [
            0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        ],
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

decode_failure("StrictEnumUint8StructUnknownValue") {
    type = StrictEnumUint8Struct,
    bytes = {
        v1, v2 = [
            0xaa, padding:7,
        ],
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

decode_failure("StrictEnumUint16StructUnknownValue") {
    type = StrictEnumUint16Struct,
    bytes = {
        v1, v2 = [
            0xaa, 0xaa, padding:6,
        ],
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

decode_failure("StrictEnumUint32StructUnknownValue") {
    type = StrictEnumUint32Struct,
    bytes = {
        v1, v2 = [
            0xaa, 0xaa, 0xaa, 0xaa, padding:4,
        ],
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}

decode_failure("StrictEnumUint64StructUnknownValue") {
    type = StrictEnumUint64Struct,
    bytes = {
        v1, v2 = [
            0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
        ],
    },
    err = STRICT_ENUM_UNKNOWN_VALUE,
}
