blob: 495bcbf84fcf314404b570fd4415662d853bb1fe [file] [log] [blame]
// 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.
success("Sandwich1Case1") {
value = Sandwich1 {
before: 0x04030201,
the_union: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
after: 0x08070605,
},
bytes = {
old = [
16: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
)
],
v1 = [
48: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x00, 0x00, 0x00, 0x00, // Sandwich1.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
0x00, 0x00, 0x00, 0x00, // Sandwich1.after (padding)
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data, i.e. Sandwich1.the_union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
)
],
},
}
success("Sandwich1Case1WithHdr") {
value = Sandwich1Message {
header: TransactionHeader {
tx_id: 0xf3f2f1f0,
flags: [0xf4, 0xf5, 0xf6],
magic_number: 0xf7,
ordinal: 0xfffefdfcfbfaf9f8,
},
body: Sandwich1 {
before: 0x04030201,
the_union: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
after: 0x08070605,
},
},
bytes = {
old = [
32: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
),
],
v1 = [
64: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x00, 0x00, 0x00, 0x00, // Sandwich1.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
0x00, 0x00, 0x00, 0x00, // Sandwich1.after (padding)
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data, i.e. Sandwich1.the_union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
),
],
},
}
success("Sandwich1WithOptUnionPresent") {
value = Sandwich1WithOptUnion {
before: 0x04030201,
opt_union: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
after: 0x08070605,
},
bytes = {
old = [
32: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich1WithOptUnion.before
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.before (padding)
0xff, 0xff, 0xff, 0xff, // Sandwich1WithOptUnion.opt_union (present)
0xff, 0xff, 0xff, 0xff, // Sandwich1WithOptUnion.opt_union (present) [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1WithOptUnion.after
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.after (padding)
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1WithOptUnion.opt_union
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
)
],
v1 = [
48: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich1WithOptUnion.before
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1WithOptUnion.union
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.env.presence (present)
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.presence (present) [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1WithOptUnion.after
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.after (padding)
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data, i.e. Sandwich1WithOptUnion.union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
)
],
},
}
success("Sandwich1WithOptUnionAbsent") {
value = Sandwich1WithOptUnion {
before: 0x04030201,
after: 0x08070605,
},
bytes = {
old = [
24: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich1WithOptUnion.before
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.before (padding)
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.opt_union (absent)
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.opt_union (absent) [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1WithOptUnion.after
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.after (padding)
)
],
v1 = [
40: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich1WithOptUnion.before
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.before (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1WithOptUnion.opt_union
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.padding
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_handle
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.presence (absent)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.presence (absent) [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1WithOptUnion.after
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.after (padding)
)
],
},
}
success("Sandwich2Case1") {
value = Sandwich2 {
before: 0x04030201,
the_union: UnionSize12Align4 {
variant: [0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5],
},
after: 0x08070605,
},
bytes = {
old = [
24: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich2.before
0x03, 0x00, 0x00, 0x00, // UnionSize16Aligned4.tag, i.e. Sandwich2.the_union
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize16Aligned4.data
0xa4, 0xa5, 0x00, 0x00, // UnionSize16Aligned4.data [cont.] and padding
0x05, 0x06, 0x07, 0x08, // Sandwich2.after
0x00, 0x00, 0x00, 0x00, // padding for top-level struct
)
],
v1 = [
48: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich2.before
0x00, 0x00, 0x00, 0x00, // Sandwich2.before (padding)
0x04, 0x00, 0x00, 0x00, // UnionSize16Aligned4.tag, i.e. Sandwich2.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize16Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize16Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize16Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize16Aligned4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize16Aligned4.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich2.after
0x00, 0x00, 0x00, 0x00, // Sandwich2.after (padding)
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize16Aligned4.data, i.e. Sandwich2.the_union.data
0xa4, 0xa5, 0x00, 0x00, // UnionSize16Aligned4.data [cont.] and padding
)
],
},
}
success("Sandwich3Case1") {
value = Sandwich3 {
before: 0x04030201,
the_union: UnionSize24Align8 {
variant: StructSize16Align8 {
f1: 0xa7a6a5a4a3a2a1a0,
f2: 0xafaeadacabaaa9a8,
},
},
after: 0x08070605,
},
bytes = {
old = [
40: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich3.before
0x00, 0x00, 0x00, 0x00, // Sandwich3.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize24Alignement8.tag, i.e. Sandwich3.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize24Alignement8.tag (padding)
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize24Alignement8.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize24Alignement8.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize24Alignement8.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionSize24Alignement8.data [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich3.after
0x00, 0x00, 0x00, 0x00, // Sandwich3.after (padding)
)
],
v1 = [
56: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich3.before
0x00, 0x00, 0x00, 0x00, // Sandwich3.before (padding)
0x04, 0x00, 0x00, 0x00, // UnionSize24Alignement8.tag, i.e. Sandwich2.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize24Alignement8.padding
0x10, 0x00, 0x00, 0x00, // UnionSize24Alignement8.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize24Alignement8.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize24Alignement8.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize24Alignement8.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich3.after
0x00, 0x00, 0x00, 0x00, // Sandwich3.after (padding)
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize24Alignement8.data, i.e Sandwich2.the_union.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize24Alignement8.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize24Alignement8.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionSize24Alignement8.data [cont.]
)
],
},
}
success("Sandwich4Case1") {
value = Sandwich4 {
before: 0x04030201,
the_union: UnionSize36Align4 {
variant: [
0xa0, 0xa1, 0xa2, 0xa3,
0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab,
0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3,
0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb,
0xbc, 0xbd, 0xbe, 0xbf,
],
},
after: 0x08070605,
},
bytes = {
old = [
48: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich4.before
0x03, 0x00, 0x00, 0x00, // UnionSize36Align4.tag, i.e. Sandwich4.the_union
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize36Align4.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize36Align4.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize36Align4.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionSize36Align4.data [cont.]
0xb0, 0xb1, 0xb2, 0xb3, // UnionSize36Align4.data [cont.]
0xb4, 0xb5, 0xb6, 0xb7, // UnionSize36Align4.data [cont.]
0xb8, 0xb9, 0xba, 0xbb, // UnionSize36Align4.data [cont.]
0xbc, 0xbd, 0xbe, 0xbf, // UnionSize36Align4.data [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich4.after
0x00, 0x00, 0x00, 0x00, // padding for top-level struct
)
],
v1 = [
72: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich4.before
0x00, 0x00, 0x00, 0x00, // Sandwich4.before (padding)
0x04, 0x00, 0x00, 0x00, // UnionSize36Align4.tag, i.e. Sandwich4.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize36Align4.tag (padding)
0x20, 0x00, 0x00, 0x00, // UnionSize36Align4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize36Align4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize36Align4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize36Align4.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich4.after
0x00, 0x00, 0x00, 0x00, // Sandwich4.after (padding)
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize36Align4.data, i.e. Sandwich4.the_union.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize36Align4.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize36Align4.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionSize36Align4.data [cont.]
0xb0, 0xb1, 0xb2, 0xb3, // UnionSize36Align4.data [cont.]
0xb4, 0xb5, 0xb6, 0xb7, // UnionSize36Align4.data [cont.]
0xb8, 0xb9, 0xba, 0xbb, // UnionSize36Align4.data [cont.]
0xbc, 0xbd, 0xbe, 0xbf, // UnionSize36Align4.data [cont.]
)
],
},
}
success("Sandwich4Case1WithHdr") {
value = Sandwich4Message {
header: TransactionHeader {
tx_id: 0,
flags: [0, 0, 0],
magic_number: 0,
ordinal: 0,
},
body: Sandwich4 {
before: 0x04030201,
the_union: UnionSize36Align4 {
variant: [
0xa0, 0xa1, 0xa2, 0xa3,
0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab,
0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3,
0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb,
0xbc, 0xbd, 0xbe, 0xbf,
],
},
after: 0x08070605,
},
},
bytes = {
old = [
64: raw(
0x00, 0x00, 0x00, 0x00, // Fake transaction header 0x00
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x01, 0x02, 0x03, 0x04, // Sandwich4.before 0x10
0x03, 0x00, 0x00, 0x00, // UnionSize36Alignment4.tag, i.e. Sandwich4.the_union
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize36Alignment4.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize36Alignment4.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize36Alignment4.data [cont.] 0x20
0xac, 0xad, 0xae, 0xaf, // UnionSize36Alignment4.data [cont.]
0xb0, 0xb1, 0xb2, 0xb3, // UnionSize36Alignment4.data [cont.]
0xb4, 0xb5, 0xb6, 0xb7, // UnionSize36Alignment4.data [cont.]
0xb8, 0xb9, 0xba, 0xbb, // UnionSize36Alignment4.data [cont.] 0x30
0xbc, 0xbd, 0xbe, 0xbf, // UnionSize36Alignment4.data [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich4.after
0x00, 0x00, 0x00, 0x00, // padding for top-level struct
)
],
v1 = [
88: raw(
0x00, 0x00, 0x00, 0x00, // Fake transaction header 0x00
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x01, 0x02, 0x03, 0x04, // Sandwich4.before 0x10
0x00, 0x00, 0x00, 0x00, // Sandwich4.before (padding)
0x04, 0x00, 0x00, 0x00, // UnionSize36Alignment4.tag, i.e. Sandwich4.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize36Alignment4.tag (padding)
0x20, 0x00, 0x00, 0x00, // UnionSize36Alignment4.env.num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // UnionSize36Alignment4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize36Alignment4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize36Alignment4.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich4.after 0x30
0x00, 0x00, 0x00, 0x00, // Sandwich4.after (padding)
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize36Alignment4.data, i.e. Sandwich4.the_union.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize36Alignment4.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize36Alignment4.data [cont.] 0x40
0xac, 0xad, 0xae, 0xaf, // UnionSize36Alignment4.data [cont.]
0xb0, 0xb1, 0xb2, 0xb3, // UnionSize36Alignment4.data [cont.]
0xb4, 0xb5, 0xb6, 0xb7, // UnionSize36Alignment4.data [cont.]
0xb8, 0xb9, 0xba, 0xbb, // UnionSize36Alignment4.data [cont.] 0x50
0xbc, 0xbd, 0xbe, 0xbf, // UnionSize36Alignment4.data [cont.]
)
],
},
}
success("Sandwich5Case1") {
value = Sandwich5 {
before: 0x04030201,
union_of_union: UnionOfUnion {
size8align4: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
},
after: 0x08070605,
},
bytes = {
old = [
48: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich5.before
0x00, 0x00, 0x00, 0x00, // Sandwich5.before (padding)
0x01, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.tag
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.tag (padding)
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e Sandwich5.UnionOfUnion.data
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.UnionSize8Aligned4.data (padding)
0x05, 0x06, 0x07, 0x08, // Sandwich5.after
0x00, 0x00, 0x00, 0x00, // Sandwich5.after (padding)
)
],
v1 = [
72: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich5.before
0x00, 0x00, 0x00, 0x00, // Sandwich5.before (padding)
0x02, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.ordinal
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.padding
0x20, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.env.num_bytes
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.env.num_handle
0xff, 0xff, 0xff, 0xff, // Sandwich5.UnionOfUnion.env.presence
0xff, 0xff, 0xff, 0xff, // Sandwich5.UnionOfUnion.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich5.after
0x00, 0x00, 0x00, 0x00, // Sandwich5.after (padding)
0x03, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.ordinal
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize8Aligned4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize8Aligned4.env.presence [cont.]
0x09, 0x0a, 0x0b, 0x0c, // UnionOfUnion.UnionSize8Aligned4.data
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.data (padding)
)
],
},
}
success("Sandwich5Case1WithHdr") {
value = Sandwich5Message {
header: TransactionHeader {
tx_id: 0xf3f2f1f0,
flags: [0xf4, 0xf5, 0xf6],
magic_number: 0xf7,
ordinal: 0xfffefdfcfbfaf9f8,
},
body: Sandwich5 {
before: 0x04030201,
union_of_union: UnionOfUnion {
size8align4: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
},
after: 0x08070605,
},
},
bytes = {
old = [
64: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x01, 0x02, 0x03, 0x04, // Sandwich5.before
0x00, 0x00, 0x00, 0x00, // Sandwich5.before (padding)
0x01, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.tag
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.tag (padding)
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e Sandwich5.UnionOfUnion.data
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.UnionSize8Aligned4.data (padding)
0x05, 0x06, 0x07, 0x08, // Sandwich5.after
0x00, 0x00, 0x00, 0x00, // Sandwich5.after (padding)
),
],
v1 = [
88: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x01, 0x02, 0x03, 0x04, // Sandwich5.before
0x00, 0x00, 0x00, 0x00, // Sandwich5.before (padding)
0x02, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.ordinal
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.padding
0x20, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.env.num_bytes
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.env.num_handle
0xff, 0xff, 0xff, 0xff, // Sandwich5.UnionOfUnion.env.presence
0xff, 0xff, 0xff, 0xff, // Sandwich5.UnionOfUnion.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich5.after
0x00, 0x00, 0x00, 0x00, // Sandwich5.after (padding)
0x03, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.ordinal
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize8Aligned4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize8Aligned4.env.presence [cont.]
0x09, 0x0a, 0x0b, 0x0c, // UnionOfUnion.UnionSize8Aligned4.data
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.data (padding)
),
],
},
}
success("Sandwich5Case2") {
value = Sandwich5 {
before: 0x04030201,
union_of_union: UnionOfUnion {
size24align8: UnionSize24Align8 {
variant: StructSize16Align8 {
f1: 0xa7a6a5a4a3a2a1a0,
f2: 0xafaeadacabaaa9a8,
},
},
},
after: 0x08070605,
},
bytes = {
old = [
48: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich5.before
0x00, 0x00, 0x00, 0x00, // Sandwich5.before (padding)
0x04, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.tag
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.tag (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize24Align8.tag, i.e Sandwich5.UnionOfUnion.data
0x00, 0x00, 0x00, 0x00, // UnionSize24Align8.tag (padding)
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize24Align8.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize24Align8.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize24Align8.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionSize24Align8.data [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich5.after
0x00, 0x00, 0x00, 0x00, // Sandwich5.after (padding)
)
],
v1 = [
80: raw (
0x01, 0x02, 0x03, 0x04, // Sandwich5.before
0x00, 0x00, 0x00, 0x00, // Sandwich5.before (padding)
0x05, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.ordinal
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.padding
0x28, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.env.num_bytes
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.env.num_handle
0xff, 0xff, 0xff, 0xff, // Sandwich5.UnionOfUnion.env.presence
0xff, 0xff, 0xff, 0xff, // Sandwich5.UnionOfUnion.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich5.after
0x00, 0x00, 0x00, 0x00, // Sandwich5.after (padding)
0x04, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize24Align8.ordinal
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize24Align8.padding
0x10, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize24Align8.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize24Align8.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize24Align8.env.presence
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize24Align8.env.presence [cont.]
0xa0, 0xa1, 0xa2, 0xa3, // UnionOfUnion.UnionSize24Align8.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionOfUnion.UnionSize24Align8.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionOfUnion.UnionSize24Align8.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionOfUnion.UnionSize24Align8.data [cont.]
)
],
},
}
success("Sandwich5Case2WithHdr") {
value = Sandwich5Message {
header: TransactionHeader {
tx_id: 0xf3f2f1f0,
flags: [0xf4, 0xf5, 0xf6],
magic_number: 0xf7,
ordinal: 0xfffefdfcfbfaf9f8,
},
body: Sandwich5 {
before: 0x04030201,
union_of_union: UnionOfUnion {
size24align8: UnionSize24Align8 {
variant: StructSize16Align8 {
f1: 0xa7a6a5a4a3a2a1a0,
f2: 0xafaeadacabaaa9a8,
},
},
},
after: 0x08070605,
},
},
bytes = {
old = [
64: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x01, 0x02, 0x03, 0x04, // Sandwich5.before
0x00, 0x00, 0x00, 0x00, // Sandwich5.before (padding)
0x04, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.tag
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.tag (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize24Alignment8.tag, i.e Sandwich5.UnionOfUnion.data
0x00, 0x00, 0x00, 0x00, // UnionSize24Alignment8.tag (padding)
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize24Alignment8.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize24Alignment8.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize24Alignment8.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionSize24Alignment8.data [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich5.after
0x00, 0x00, 0x00, 0x00, // Sandwich5.after (padding)
)
],
v1 = [
96: raw (
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x01, 0x02, 0x03, 0x04, // Sandwich5.before
0x00, 0x00, 0x00, 0x00, // Sandwich5.before (padding)
0x05, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.ordinal
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.padding
0x28, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.env.num_bytes
0x00, 0x00, 0x00, 0x00, // Sandwich5.UnionOfUnion.env.num_handle
0xff, 0xff, 0xff, 0xff, // Sandwich5.UnionOfUnion.env.presence
0xff, 0xff, 0xff, 0xff, // Sandwich5.UnionOfUnion.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich5.after
0x00, 0x00, 0x00, 0x00, // Sandwich5.after (padding)
0x04, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize24Alignment8.ordinal
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize24Alignment8.padding
0x10, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize24Alignment8.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize24Alignment8.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize24Alignment8.env.presence
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize24Alignment8.env.presence [cont.]
0xa0, 0xa1, 0xa2, 0xa3, // UnionOfUnion.UnionSize24Alignment8.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionOfUnion.UnionSize24Alignment8.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionOfUnion.UnionSize24Alignment8.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionOfUnion.UnionSize24Alignment8.data [cont.]
)
],
},
}
success("Sandwich6Case1") {
value = Sandwich6 {
before: 0x04030201,
the_union: UnionWithVector {
vector_of_uint8: [
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5
],
},
after: 0x08070605,
},
bytes = {
old = [
48: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x01, 0x00, 0x00, 0x00, // UnionWithVector.tag (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag (padding)
0x06, 0x00, 0x00, 0x00, // vector<uint8>.size (start of UnionWithVector.data)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0xa0, 0xa1, 0xa2, 0xa3, // vector<uint8>.data
0xa4, 0xa5, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
)
],
v1 = [
64: raw (
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x02, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (padding)
0x18, 0x00, 0x00, 0x00, // UnionWithVector.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x06, 0x00, 0x00, 0x00, // vector<uint8>.size, i.e. Sandwich6.the_union.data
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0xa0, 0xa1, 0xa2, 0xa3, // vector<uint8>.data
0xa4, 0xa5, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
)
],
},
}
success("Sandwich6Case1AbsentVector") {
value = Sandwich6 {
before: 0x04030201,
the_union: UnionWithVector {
vector_of_uint8: []
},
after: 0x08070605,
},
bytes = {
old = [
40: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x01, 0x00, 0x00, 0x00, // UnionWithVector.tag (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag (padding)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size (start of UnionWithVector.data)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
)
],
v1 = [
56: raw (
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x02, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (padding)
0x10, 0x00, 0x00, 0x00, // UnionWithVector.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size, i.e. Sandwich6.the_union.data
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
)
],
},
}
success("Sandwich6Case2") {
value = Sandwich6 {
before: 0x04030201,
the_union: UnionWithVector {
s: "soft migrations rock!",
},
after: 0x08070605,
},
bytes = {
old = [
64: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x02, 0x00, 0x00, 0x00, // UnionWithVector.tag (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag (padding)
0x15, 0x00, 0x00, 0x00, // vector<uint8>.size (start of UnionWithVector.data)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x73, 0x6f, 0x66, 0x74, // vector<uint8>.data ("soft migrations rock!")
0x20, 0x6d, 0x69, 0x67, // vector<uint8>.data [cont.]
0x72, 0x61, 0x74, 0x69, // vector<uint8>.data [cont.]
0x6f, 0x6e, 0x73, 0x20, // vector<uint8>.data [cont.]
0x72, 0x6f, 0x63, 0x6b, // vector<uint8>.data [cont.]
0x21, 0x00, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
)
],
v1 = [
80: raw (
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (padding)
0x28, 0x00, 0x00, 0x00, // UnionWithVector.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x15, 0x00, 0x00, 0x00, // vector<uint8>.size (21), i.e. Sandwich6.the_union.data
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x73, 0x6f, 0x66, 0x74, // vector<uint8>.data
0x20, 0x6d, 0x69, 0x67, // vector<uint8>.data [cont.]
0x72, 0x61, 0x74, 0x69, // vector<uint8>.data [cont.]
0x6f, 0x6e, 0x73, 0x20, // vector<uint8>.data [cont.]
0x72, 0x6f, 0x63, 0x6b, // vector<uint8>.data [cont.]
0x21, 0x00, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
)
],
},
}
success("Sandwich6Case3") {
value = Sandwich6 {
before: 0x04030201,
the_union: UnionWithVector {
vector_s3_a1: [
StructSize3Align1 {
three_bytes: [0x73, 0x6f, 0x66]
},
StructSize3Align1 {
three_bytes: [0x20, 0x6d, 0x69]
},
StructSize3Align1 {
three_bytes: [0x72, 0x61, 0x74]
},
],
},
after: 0x08070605,
},
bytes = {
old = [
56: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionWithVector.tag (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag (padding)
0x03, 0x00, 0x00, 0x00, // vector<uint8>.size (start of UnionWithVector.data)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x73, 0x6f, 0x66, 0x20, // StructSize3Align1 (element #1 & start of element #2)
0x6d, 0x69, 0x72, 0x61, // StructSize3Align1 (element #2 [cont.] & start of element #3)
0x74, 0x00, 0x00, 0x00, // StructSize3Align1 (element #3 [cont.d])
0x00, 0x00, 0x00, 0x00, // (padding)
)
],
v1 = [
72: raw (
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x04, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (padding)
0x20, 0x00, 0x00, 0x00, // UnionWithVector.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x03, 0x00, 0x00, 0x00, // vector<struct>.size (21), i.e. Sandwich6.the_union.data
0x00, 0x00, 0x00, 0x00, // vector<struct>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<struct>.presence
0xff, 0xff, 0xff, 0xff, // vector<struct>.presence [cont.]
0x73, 0x6f, 0x66, 0x20, // StructSize3Align1 (element #1 & start of element #2)
0x6d, 0x69, 0x72, 0x61, // StructSize3Align1 (element #2 [cont.] & start of element #3)
0x74, 0x00, 0x00, 0x00, // StructSize3Align1 (element #3 [cont.d])
0x00, 0x00, 0x00, 0x00, // (padding)
)
],
},
}
success("Sandwich6Case4") {
value = Sandwich6 {
before: 0x04030201,
the_union: UnionWithVector {
vector_s3_a2: [
StructSize3Align2 {
f1: 0x6f73,
f2: 0x66,
},
StructSize3Align2 {
f1: 0x6d20,
f2: 0x69,
},
StructSize3Align2 {
f1: 0x6172,
f2: 0x74,
},
],
},
after: 0x08070605,
},
bytes = {
old = [
56: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x04, 0x00, 0x00, 0x00, // UnionWithVector.tag (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag (padding)
0x03, 0x00, 0x00, 0x00, // vector<uint8>.size (start of UnionWithVector.data)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x73, 0x6f, 0x66, 0x00, // StructSize3Align2 (start of vector<struct>.data)
0x20, 0x6d, 0x69, 0x00, // StructSize3Align2 (element #2)
0x72, 0x61, 0x74, 0x00, // StructSize3Align2 (element #3)
0x00, 0x00, 0x00, 0x00, // (padding)
)
],
v1 = [
72: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x05, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (padding)
0x20, 0x00, 0x00, 0x00, // UnionWithVector.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x03, 0x00, 0x00, 0x00, // vector<struct>.size (21), i.e. Sandwich6.the_union.data
0x00, 0x00, 0x00, 0x00, // vector<struct>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<struct>.presence
0xff, 0xff, 0xff, 0xff, // vector<struct>.presence [cont.]
0x73, 0x6f, 0x66, 0x00, // StructSize3Align2 (start of vector<struct>.data)
0x20, 0x6d, 0x69, 0x00, // StructSize3Align2 (element #2)
0x72, 0x61, 0x74, 0x00, // StructSize3Align2 (element #3)
0x00, 0x00, 0x00, 0x00, // (padding)
)
],
},
}
success("Sandwich6Case5") {
value = Sandwich6 {
before: 0x04030201,
the_union: UnionWithVector {
// TODO(fxb/36441): Support handles in GIDL.
handles: [
0xffffffff,
0xffffffff,
0xffffffff,
],
},
after: 0x08070605,
},
bytes = {
old = [
56: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x05, 0x00, 0x00, 0x00, // UnionWithVector.tag (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag (padding)
0x03, 0x00, 0x00, 0x00, // vector<handle>.size, i.e. Sandwich6.the_union.data
0x00, 0x00, 0x00, 0x00, // vector<handle>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<handle>.presence
0xff, 0xff, 0xff, 0xff, // vector<handle>.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0xff, 0xff, 0xff, 0xff, // vector<handle>.data
0xff, 0xff, 0xff, 0xff, // vector<handle>.data
0xff, 0xff, 0xff, 0xff, // vector<handle>.data
0x00, 0x00, 0x00, 0x00, // vector<handle>.data (padding)
)
],
v1 = [
72: raw (
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x06, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (padding)
0x20, 0x00, 0x00, 0x00, // UnionWithVector.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x03, 0x00, 0x00, 0x00, // vector<handle>.size, i.e. Sandwich6.the_union.data
0x00, 0x00, 0x00, 0x00, // vector<handle>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<handle>.presence
0xff, 0xff, 0xff, 0xff, // vector<handle>.presence [cont.]
0xff, 0xff, 0xff, 0xff, // vector<handle>.data
0xff, 0xff, 0xff, 0xff, // vector<handle>.data
0xff, 0xff, 0xff, 0xff, // vector<handle>.data
0x00, 0x00, 0x00, 0x00, // vector<handle>.data (padding)
)
],
},
}
success("Sandwich6Case6") {
value = Sandwich6 {
before: 0x04030201,
the_union: UnionWithVector {
array_s3_a1: [
StructSize3Align1 {
three_bytes: [
0xa1, 0xa2, 0xa3,
],
},
StructSize3Align1 {
three_bytes: [
0xa4, 0xa5, 0xa6,
],
},
],
},
after: 0x08070605,
},
bytes = {
old = [
40: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x06, 0x00, 0x00, 0x00, // UnionWithVector.tag (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag (padding)
0xa1, 0xa2, 0xa3, 0xa4, // array<StructSize3Align1>:2, i.e. Sandwich6.the_union.data
0xa5, 0xa6, 0x00, 0x00, // array<StructSize3Align1>:2
0x00, 0x00, 0x00, 0x00, // Sandwich6.the_union.data (padding)
0x00, 0x00, 0x00, 0x00, // Sandwich6.the_union.data (padding)
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
)
],
v1 = [
48: raw (
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x07, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (padding)
0x08, 0x00, 0x00, 0x00, // UnionWithVector.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0xa1, 0xa2, 0xa3, 0xa4, // array<StructSize3Align1>:2, i.e. Sandwich6.the_union.data
0xa5, 0xa6, 0x00, 0x00, // array<StructSize3Align1>:2
)
],
},
}
success("Sandwich6Case7") {
value = Sandwich6 {
before: 0x04030201,
the_union: UnionWithVector {
array_s3_a2: [
StructSize3Align2 {
f1: 0xa2a1,
f2: 0xa3,
},
StructSize3Align2 {
f1: 0xa5a4,
f2: 0xa6,
},
],
},
after: 0x08070605,
},
bytes = {
old = [
40: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x07, 0x00, 0x00, 0x00, // UnionWithVector.tag (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag (padding)
0xa1, 0xa2, 0xa3, 0x00, // array<StructSize3Align2>:2, i.e. Sandwich6.the_union.data
0xa4, 0xa5, 0xa6, 0x00, // array<StructSize3Align2>:2
0x00, 0x00, 0x00, 0x00, // Sandwich6.the_union.data (padding)
0x00, 0x00, 0x00, 0x00, // Sandwich6.the_union.data (padding)
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
)
],
v1 = [
48: raw (
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x08, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (padding)
0x08, 0x00, 0x00, 0x00, // UnionWithVector.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0xa1, 0xa2, 0xa3, 0x00, // array<StructSize3Align2>:2, i.e. Sandwich6.the_union.data
0xa4, 0xa5, 0xa6, 0x00, // array<StructSize3Align2>:2
)
],
},
}
success("Sandwich6Case8") {
value = Sandwich6 {
before: 0x04030201,
the_union: UnionWithVector {
vector_union: [
UnionSize8Align4 {
variant: 0x0c0b0a09,
},
],
},
after: 0x08070605,
},
bytes = {
old = [
48: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x08, 0x00, 0x00, 0x00, // UnionWithVector.tag (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag (padding)
0x01, 0x00, 0x00, 0x00, // vector<UnionWithVector>.size (outer vector)
0x00, 0x00, 0x00, 0x00, // vector<UnionWithVector>.size [cont.]
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x02, 0x00, 0x00, 0x00, // UnionSize8Align4.tag, i.e. Sandwich1.the_union
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Align4.data
)
],
v1 = [
88: raw (
0x01, 0x02, 0x03, 0x04, // Sandwich6.before
0x00, 0x00, 0x00, 0x00, // Sandwich6.before (padding)
0x09, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (start of Sandwich6.the_union)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.ordinal (padding)
0x30, 0x00, 0x00, 0x00, // UnionWithVector.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence
0xff, 0xff, 0xff, 0xff, // UnionWithVector.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich6.after
0x00, 0x00, 0x00, 0x00, // Sandwich6.after (padding)
0x01, 0x00, 0x00, 0x00, // vector<UnionSize8Align4>.size (start of Sandwich6.the_union.data)
0x00, 0x00, 0x00, 0x00, // vector<UnionSize8Align4>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<UnionSize8Align4>.presence
0xff, 0xff, 0xff, 0xff, // vector<UnionSize8Align4>.presence [cont.]
0x03, 0x00, 0x00, 0x00, // UnionSize8Align4.ordinal (first element, outer vector)
0x00, 0x00, 0x00, 0x00, // UnionSize8Align4.ordinal (padding)
0x08, 0x00, 0x00, 0x00, // UnionSize8Align4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Align4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Align4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize8Align4.env.presence [cont.]
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Align4.data, i.e. Sandwich1.the_union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Align4.data (padding)
)
],
},
}
success("Sandwich7Case1") {
value = Sandwich7 {
before: 0x14131211,
opt_sandwich1: Sandwich1 {
before: 0x04030201,
the_union: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
after: 0x08070605,
},
after: 0x24232221,
},
bytes = {
old = [
40: raw(
0x11, 0x12, 0x13, 0x14, // Sandwich7.before
0x00, 0x00, 0x00, 0x00, // Sandwich7.before (padding)
0xff, 0xff, 0xff, 0xff, // Sandwich7.opt_sandwich1.presence
0xff, 0xff, 0xff, 0xff, // Sandwich7.opt_sandwich1.presence [cont.]
0x21, 0x22, 0x23, 0x24, // Sandwich7.after
0x00, 0x00, 0x00, 0x00, // Sandwich7.after (padding)
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
)
],
v1 = [
72: raw(
0x11, 0x12, 0x13, 0x14, // Sandwich7.before
0x00, 0x00, 0x00, 0x00, // Sandwich7.before (padding)
0xff, 0xff, 0xff, 0xff, // Sandwich7.opt_sandwich1.presence
0xff, 0xff, 0xff, 0xff, // Sandwich7.opt_sandwich1.presence [cont.]
0x21, 0x22, 0x23, 0x24, // Sandwich7.after
0x00, 0x00, 0x00, 0x00, // Sandwich7.after (padding)
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x00, 0x00, 0x00, 0x00, // Sandwich1.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
0x00, 0x00, 0x00, 0x00, // Sandwich1.after (padding)
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data, i.e. Sandwich1.the_union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
)
],
},
}
success("Sandwich7Case1WithHdr") {
value = Sandwich7Message {
header: TransactionHeader {
tx_id: 0xf3f2f1f0,
flags: [0xf4, 0xf5, 0xf6],
magic_number: 0xf7,
ordinal: 0xfffefdfcfbfaf9f8,
},
body: Sandwich7 {
before: 0x14131211,
opt_sandwich1: Sandwich1 {
before: 0x04030201,
the_union: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
after: 0x08070605,
},
after: 0x24232221,
},
},
bytes = {
old = [
56: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x11, 0x12, 0x13, 0x14, // Sandwich7.before
0x00, 0x00, 0x00, 0x00, // Sandwich7.before (padding)
0xff, 0xff, 0xff, 0xff, // Sandwich7.opt_sandwich1.presence
0xff, 0xff, 0xff, 0xff, // Sandwich7.opt_sandwich1.presence [cont.]
0x21, 0x22, 0x23, 0x24, // Sandwich7.after
0x00, 0x00, 0x00, 0x00, // Sandwich7.after (padding)
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
),
],
v1 = [
88: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x11, 0x12, 0x13, 0x14, // Sandwich7.before
0x00, 0x00, 0x00, 0x00, // Sandwich7.before (padding)
0xff, 0xff, 0xff, 0xff, // Sandwich7.opt_sandwich1.presence
0xff, 0xff, 0xff, 0xff, // Sandwich7.opt_sandwich1.presence [cont.]
0x21, 0x22, 0x23, 0x24, // Sandwich7.after
0x00, 0x00, 0x00, 0x00, // Sandwich7.after (padding)
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x00, 0x00, 0x00, 0x00, // Sandwich1.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
0x00, 0x00, 0x00, 0x00, // Sandwich1.after (padding)
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data, i.e. Sandwich1.the_union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
),
],
},
}
success("Sandwich7Case2") {
value = Sandwich7 {
before: 0x14131211,
after: 0x24232221,
},
bytes = {
old = [
24: raw(
0x11, 0x12, 0x13, 0x14, // Sandwich7.before
0x00, 0x00, 0x00, 0x00, // Sandwich7.before (padding)
0x00, 0x00, 0x00, 0x00, // Sandwich7.opt_sandwich1.absence
0x00, 0x00, 0x00, 0x00, // Sandwich7.opt_sandwich1.absence [cont.]
0x21, 0x22, 0x23, 0x24, // Sandwich7.after
0x00, 0x00, 0x00, 0x00, // Sandwich7.after (padding)
)
],
v1 = [
24: raw(
0x11, 0x12, 0x13, 0x14, // Sandwich7.before
0x00, 0x00, 0x00, 0x00, // Sandwich7.before (padding)
0x00, 0x00, 0x00, 0x00, // Sandwich7.opt_sandwich1.absence
0x00, 0x00, 0x00, 0x00, // Sandwich7.opt_sandwich1.absence [cont.]
0x21, 0x22, 0x23, 0x24, // Sandwich7.after
0x00, 0x00, 0x00, 0x00, // Sandwich7.after (padding)
)
],
},
}
success("Sandwich7Case2WithHdr") {
value = Sandwich7Message {
header: TransactionHeader {
tx_id: 0xf3f2f1f0,
flags: [0xf4, 0xf5, 0xf6],
magic_number: 0xf7,
ordinal: 0xfffefdfcfbfaf9f8,
},
body: Sandwich7 {
before: 0x14131211,
after: 0x24232221,
},
},
bytes = {
old = [
40: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x11, 0x12, 0x13, 0x14, // Sandwich7.before
0x00, 0x00, 0x00, 0x00, // Sandwich7.before (padding)
0x00, 0x00, 0x00, 0x00, // Sandwich7.opt_sandwich1.absence
0x00, 0x00, 0x00, 0x00, // Sandwich7.opt_sandwich1.absence [cont.]
0x21, 0x22, 0x23, 0x24, // Sandwich7.after
0x00, 0x00, 0x00, 0x00, // Sandwich7.after (padding)
),
],
v1 = [
40: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x11, 0x12, 0x13, 0x14, // Sandwich7.before
0x00, 0x00, 0x00, 0x00, // Sandwich7.before (padding)
0x00, 0x00, 0x00, 0x00, // Sandwich7.opt_sandwich1.preabsentsence
0x00, 0x00, 0x00, 0x00, // Sandwich7.opt_sandwich1.absence [cont.]
0x21, 0x22, 0x23, 0x24, // Sandwich7.after
0x00, 0x00, 0x00, 0x00, // Sandwich7.after (padding)
),
],
},
}
success("Regression1") {
value = Regression1 {
f1: 0x01,
f2: 0x02,
f3: 0x03,
f4: 0x04,
f5: 0x05,
f6: 0x06,
},
bytes = {
// old & v1 bytes are the same.
old = [
32: raw(
0x01, 0x00, 0x00, 0x00, // f1 and padding
0x02, 0x00, 0x00, 0x00, // f2 and padding
0x03, 0x00, 0x04, 0x00, // f3, f3 padding and f4
0x00, 0x00, 0x00, 0x00, // f4 padding
0x05, 0x00, 0x00, 0x00, // f5
0x00, 0x00, 0x00, 0x00, // f5
0x06, 0x00, 0x00, 0x00, // f6 and padding
0x00, 0x00, 0x00, 0x00, // f6 padding
)
],
v1 = [
32: raw(
0x01, 0x00, 0x00, 0x00, // f1 and padding
0x02, 0x00, 0x00, 0x00, // f2 and padding
0x03, 0x00, 0x04, 0x00, // f3, f3 padding and f4
0x00, 0x00, 0x00, 0x00, // f4 padding
0x05, 0x00, 0x00, 0x00, // f5
0x00, 0x00, 0x00, 0x00, // f5
0x06, 0x00, 0x00, 0x00, // f6 and padding
0x00, 0x00, 0x00, 0x00, // f6 padding
)
],
},
}
success("Regression2") {
value = Regression2 {
head: Regression1 {
f1: 0x01,
f2: 0x02,
f3: 0x03,
f4: 0x04,
f5: 0x05,
f6: 0x06,
},
f7: 0x07,
},
bytes = {
// old & v1 bytes are the same.
old = [
40: raw(
0x01, 0x00, 0x00, 0x00, // f1 and padding
0x02, 0x00, 0x00, 0x00, // f2 and padding
0x03, 0x00, 0x04, 0x00, // f3, f3 padding and f4
0x00, 0x00, 0x00, 0x00, // f4 padding
0x05, 0x00, 0x00, 0x00, // f5
0x00, 0x00, 0x00, 0x00, // f5
0x06, 0x00, 0x00, 0x00, // f6 and padding
0x00, 0x00, 0x00, 0x00, // f6 padding
0x07, 0x00, 0x00, 0x00, // f7 and padding
0x00, 0x00, 0x00, 0x00, // f7 padding
)
],
v1 = [
40: raw(
0x01, 0x00, 0x00, 0x00, // f1 and padding
0x02, 0x00, 0x00, 0x00, // f2 and padding
0x03, 0x00, 0x04, 0x00, // f3, f3 padding and f4
0x00, 0x00, 0x00, 0x00, // f4 padding
0x05, 0x00, 0x00, 0x00, // f5
0x00, 0x00, 0x00, 0x00, // f5
0x06, 0x00, 0x00, 0x00, // f6 and padding
0x00, 0x00, 0x00, 0x00, // f6 padding
0x07, 0x00, 0x00, 0x00, // f7 and padding
0x00, 0x00, 0x00, 0x00, // f7 padding
)
],
},
}
success("Regression3Absent") {
value = Regression3 {
},
bytes = {
// old & v1 bytes are the same.
old = [
8: raw(
0x00, 0x00, 0x00, 0x00, // opt_value.absence
0x00, 0x00, 0x00, 0x00, // opt_value.absence [cont.]
)
],
v1 = [
8: raw(
0x00, 0x00, 0x00, 0x00, // opt_value.absence
0x00, 0x00, 0x00, 0x00, // opt_value.absence [cont.]
)
],
},
}
success("Regression3Present") {
value = Regression3 {
opt_value: Regression2 {
head: Regression1 {
f1: 0x01,
f2: 0x02,
f3: 0x03,
f4: 0x04,
f5: 0x05,
f6: 0x06,
},
f7: 0x07,
},
},
bytes = {
// old & v1 bytes are the same.
old = [
48: raw(
0xFF, 0xFF, 0xFF, 0xFF, // opt_value.presence
0xFF, 0xFF, 0xFF, 0xFF, // opt_value.presence [cont.]
0x01, 0x00, 0x00, 0x00, // f1 and padding
0x02, 0x00, 0x00, 0x00, // f2 and padding
0x03, 0x00, 0x04, 0x00, // f3, f3 padding and f4
0x00, 0x00, 0x00, 0x00, // f4 padding
0x05, 0x00, 0x00, 0x00, // f5
0x00, 0x00, 0x00, 0x00, // f5
0x06, 0x00, 0x00, 0x00, // f6 and padding
0x00, 0x00, 0x00, 0x00, // f6 padding
0x07, 0x00, 0x00, 0x00, // f7 and padding
0x00, 0x00, 0x00, 0x00, // f7 padding
)
],
v1 = [
48: raw(
0xFF, 0xFF, 0xFF, 0xFF, // opt_value.presence
0xFF, 0xFF, 0xFF, 0xFF, // opt_value.presence [cont.]
0x01, 0x00, 0x00, 0x00, // f1 and padding
0x02, 0x00, 0x00, 0x00, // f2 and padding
0x03, 0x00, 0x04, 0x00, // f3, f3 padding and f4
0x00, 0x00, 0x00, 0x00, // f4 padding
0x05, 0x00, 0x00, 0x00, // f5
0x00, 0x00, 0x00, 0x00, // f5
0x06, 0x00, 0x00, 0x00, // f6 and padding
0x00, 0x00, 0x00, 0x00, // f6 padding
0x07, 0x00, 0x00, 0x00, // f7 and padding
0x00, 0x00, 0x00, 0x00, // f7 padding
)
],
},
}
success("Size5Alignment1Array") {
value = Size5Alignment1Array {
a: [
Size5Alignment1 {
data: [0x01, 0x02, 0x03, 0x04, 0x05],
},
Size5Alignment1 {
data: [0x06, 0x07, 0x08, 0x09, 0x0a],
},
Size5Alignment1 {
data: [0x0b, 0x0c, 0x0d, 0x0e, 0x0f],
},
],
},
bytes = {
// old & v1 bytes are the same.
old = [
16: raw(
0x01, 0x02, 0x03, 0x04, // a.data[0]
0x05, 0x06, 0x07, 0x08, // a.data[0] & a.data[1]
0x09, 0x0a, 0x0b, 0x0c, // a.data[1] & a.data[2]
0x0d, 0x0e, 0x0f, 0x00, // a.data[2] & padding
)
],
v1 = [
16: raw(
0x01, 0x02, 0x03, 0x04, // a.data[0]
0x05, 0x06, 0x07, 0x08, // a.data[0] & a.data[1]
0x09, 0x0a, 0x0b, 0x0c, // a.data[1] & a.data[2]
0x0d, 0x0e, 0x0f, 0x00, // a.data[2] & padding
)
],
},
}
success("Size5Alignment4Array") {
value = Size5Alignment4Array {
a: [
Size5Alignment4 {
four: 0x04030201,
one: 0x05,
},
Size5Alignment4 {
four: 0x09080706,
one: 0x0a,
},
Size5Alignment4 {
four: 0x0e0d0c0b,
one: 0x0f,
},
],
},
bytes = {
// old & v1 bytes are the same.
old = [
24: raw(
0x01, 0x02, 0x03, 0x04, // a[0].four
0x05, 0x00, 0x00, 0x00, // a[0].one + padding
0x06, 0x07, 0x08, 0x09, // a[1].four
0x0a, 0x00, 0x00, 0x00, // a[1].one + padding
0x0b, 0x0c, 0x0d, 0x0e, // a[2].four
0x0f, 0x00, 0x00, 0x00, // a[2].one + padding
)
],
v1 = [
24: raw(
0x01, 0x02, 0x03, 0x04, // a[0].four
0x05, 0x00, 0x00, 0x00, // a[0].one + padding
0x06, 0x07, 0x08, 0x09, // a[1].four
0x0a, 0x00, 0x00, 0x00, // a[1].one + padding
0x0b, 0x0c, 0x0d, 0x0e, // a[2].four
0x0f, 0x00, 0x00, 0x00, // a[2].one + padding
)
]
},
}
success("Size5Alignment1Vector") {
value = Size5Alignment1Vector {
v: [
Size5Alignment1 {
data: [0x01, 0x02, 0x03, 0x04, 0x05],
},
Size5Alignment1 {
data: [0x06, 0x07, 0x08, 0x09, 0x0a],
},
],
},
bytes = {
// old & v1 bytes are the same.
old = [
32: raw(
0x02, 0x00, 0x00, 0x00, // v.size
0x00, 0x00, 0x00, 0x00, // v.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // v.presence
0xFF, 0xFF, 0xFF, 0xFF, // v.presence [cont.]
0x01, 0x02, 0x03, 0x04, // v[0].a.data
0x05, 0x06, 0x07, 0x08, // v[0].a.data [cont.] & v[1].a.data
0x09, 0x0a, 0x00, 0x00, // v[1].a.data [cont.] & padding
0x00, 0x00, 0x00, 0x00, // padding for top-level struct
)
],
v1 = [
32: raw(
0x02, 0x00, 0x00, 0x00, // v.size
0x00, 0x00, 0x00, 0x00, // v.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // v.presence
0xFF, 0xFF, 0xFF, 0xFF, // v.presence [cont.]
0x01, 0x02, 0x03, 0x04, // v[0].a.data
0x05, 0x06, 0x07, 0x08, // v[0].a.data [cont.] & v[1].a.data
0x09, 0x0a, 0x00, 0x00, // v[1].a.data [cont.] & padding
0x00, 0x00, 0x00, 0x00, // padding for top-level struct
)
],
},
}
success("Size5Alignment4Vector") {
value = Size5Alignment4Vector {
v: [
Size5Alignment4 {
four: 0x04030201,
one: 0x05,
},
Size5Alignment4 {
four: 0x09080706,
one: 0x0a,
},
],
},
bytes = {
// old & v1 bytes are the same.
old = [
32: raw(
0x02, 0x00, 0x00, 0x00, // v.size
0x00, 0x00, 0x00, 0x00, // v.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // v.presence
0xFF, 0xFF, 0xFF, 0xFF, // v.presence [cont.]
0x01, 0x02, 0x03, 0x04, // a[0].four
0x05, 0x00, 0x00, 0x00, // a[0].one + padding
0x06, 0x07, 0x08, 0x09, // a[1].four
0x0a, 0x00, 0x00, 0x00, // a[1].one + padding
)
],
v1 = [
32: raw(
0x02, 0x00, 0x00, 0x00, // v.size
0x00, 0x00, 0x00, 0x00, // v.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // v.presence
0xFF, 0xFF, 0xFF, 0xFF, // v.presence [cont.]
0x01, 0x02, 0x03, 0x04, // a[0].four
0x05, 0x00, 0x00, 0x00, // a[0].one + padding
0x06, 0x07, 0x08, 0x09, // a[1].four
0x0a, 0x00, 0x00, 0x00, // a[1].one + padding
)
],
},
}
success("Table_NoFields") {
// TODO(fxb/40782): Fix encoding bug in LLCPP.
bindings_denylist = [llcpp],
value = Struct_Table_NoFields {
t: Table_NoFields {},
},
bytes = {
// old & v1 bytes are the same.
old = [
16: raw(
0x00, 0x00, 0x00, 0x00, // Table_NoFields.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_NoFields.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
),
],
v1 = [
16: raw(
0x00, 0x00, 0x00, 0x00, // Table_NoFields.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_NoFields.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
),
],
},
}
success("Table_TwoReservedFields") {
// TODO(fxb/40782): Fix encoding bug in LLCPP.
bindings_denylist = [llcpp],
value = Struct_Table_TwoReservedFields {
t: Table_TwoReservedFields {},
},
bytes = {
// old & v1 bytes are the same.
old = [
16: raw(
0x00, 0x00, 0x00, 0x00, // Table_TwoReservedFields.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_TwoReservedFields.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
),
],
v1 = [
16: raw(
0x00, 0x00, 0x00, 0x00, // Table_TwoReservedFields.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_TwoReservedFields.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
),
],
},
}
success("Table_StructWithReservedSandwich") {
value = Table_StructWithReservedSandwichStruct {
table: Table_StructWithReservedSandwich {
s1: StructSize3Align1 {
three_bytes: [ 0x09, 0x0a, 0x0b ]
},
s2: StructSize3Align1 {
three_bytes: [ 0x19, 0x1a, 0x1b ]
},
}
},
bytes = {
// old & v1 bytes are the same.
old = [
80: raw(
0x03, 0x00, 0x00, 0x00, // Table_StructWithReservedSandwich.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_StructWithReservedSandwich.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_handles
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].presence
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[1].num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // vector<envelope>[1].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[2].num_bytes 0x30
0x00, 0x00, 0x00, 0x00, // vector<envelope>[2].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence [cont.]
0x09, 0x0A, 0x0B, 0x00, // StructSize3Alignment1 data (3 bytes) + padding (1 byte) 0x40
0x00, 0x00, 0x00, 0x00, // StructSize3Alignment1 padding [cont.]
0x19, 0x1A, 0x1B, 0x00, // StructSize3Alignment1 data (3 bytes) + padding (1 byte)
0x00, 0x00, 0x00, 0x00, // StructSize3Alignment1 padding [cont.]
)
],
v1 = [
80: raw(
0x03, 0x00, 0x00, 0x00, // Table_StructWithReservedSandwich.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_StructWithReservedSandwich.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_handles
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].presence
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[1].num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // vector<envelope>[1].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[2].num_bytes 0x30
0x00, 0x00, 0x00, 0x00, // vector<envelope>[2].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence [cont.]
0x09, 0x0A, 0x0B, 0x00, // StructSize3Alignment1 data (3 bytes) + padding (1 byte) 0x40
0x00, 0x00, 0x00, 0x00, // StructSize3Alignment1 padding [cont.]
0x19, 0x1A, 0x1B, 0x00, // StructSize3Alignment1 data (3 bytes) + padding (1 byte)
0x00, 0x00, 0x00, 0x00, // StructSize3Alignment1 padding [cont.]
)
],
},
}
success("Table_StructWithUint32Sandwich") {
value = Table_StructWithUint32SandwichStruct {
table: Table_StructWithUint32Sandwich {
i: 0x04030201,
s1: StructSize3Align1 {
three_bytes: [ 0x09, 0x0a, 0x0b ]
},
s2: StructSize3Align1 {
three_bytes: [ 0x19, 0x1a, 0x1b ]
},
i2: 0x0d0c0b0a,
}
},
bytes = {
// old & v1 bytes are the same.
old = [
112: raw(
0x04, 0x00, 0x00, 0x00, // Table_StructWithUint32Sandwich.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_StructWithUint32Sandwich.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[0].num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[0].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[0].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[1].num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // vector<envelope>[1].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[2].num_bytes 0x30
0x00, 0x00, 0x00, 0x00, // vector<envelope>[2].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[3].num_bytes 0x40
0x00, 0x00, 0x00, 0x00, // vector<envelope>[3].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[3].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[3].presence [cont.]
0x01, 0x02, 0x03, 0x04, // i 0x50
0x00, 0x00, 0x00, 0x00, // i padding
0x09, 0x0A, 0x0B, 0x00, // StructSize3Alignment1 data (3 bytes) + padding (1 byte)
0x00, 0x00, 0x00, 0x00, // StructSize3Alignment1 padding [cont.]
0x19, 0x1A, 0x1B, 0x00, // StructSize3Alignment1 data (3 bytes) + padding (1 byte) 0x60
0x00, 0x00, 0x00, 0x00, // StructSize3Alignment1 padding [cont.]
0x0A, 0x0B, 0x0C, 0x0D, // i2
0x00, 0x00, 0x00, 0x00, // i2 padding
)
],
v1 = [
112: raw(
0x04, 0x00, 0x00, 0x00, // Table_StructWithUint32Sandwich.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_StructWithUint32Sandwich.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[0].num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[0].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[0].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[1].num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // vector<envelope>[1].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[2].num_bytes 0x30
0x00, 0x00, 0x00, 0x00, // vector<envelope>[2].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[3].num_bytes 0x40
0x00, 0x00, 0x00, 0x00, // vector<envelope>[3].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[3].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[3].presence [cont.]
0x01, 0x02, 0x03, 0x04, // i 0x50
0x00, 0x00, 0x00, 0x00, // i padding
0x09, 0x0A, 0x0B, 0x00, // StructSize3Alignment1 data (3 bytes) + padding (1 byte)
0x00, 0x00, 0x00, 0x00, // StructSize3Alignment1 padding [cont.]
0x19, 0x1A, 0x1B, 0x00, // StructSize3Alignment1 data (3 bytes) + padding (1 byte) 0x60
0x00, 0x00, 0x00, 0x00, // StructSize3Alignment1 padding [cont.]
0x0A, 0x0B, 0x0C, 0x0D, // i2
0x00, 0x00, 0x00, 0x00, // i2 padding
)
],
},
}
success("Table_UnionWithVector_ReservedSandwich") {
value = Table_UnionWithVector_ReservedSandwichStruct {
table: Table_UnionWithVector_ReservedSandwich {
uv: UnionWithVector {
s: "hello"
},
},
},
bytes = {
old = [
80: raw(
0x02, 0x00, 0x00, 0x00, // Table_UnionWithVector_ReservedSandwich.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_UnionWithVector_ReservedSandwich.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_handles
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].presence
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].presence [cont.]
0x20, 0x00, 0x00, 0x00, // vector<envelope>[1].num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // vector<envelope>[1].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence [cont.]
0x02, 0x00, 0x00, 0x00, // UnionWithVector.tag (string) 0x30
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag padding
0x05, 0x00, 0x00, 0x00, // string.size
0x00, 0x00, 0x00, 0x00, // string.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // string.presence 0x40
0xFF, 0xFF, 0xFF, 0xFF, // string.presence [cont.]
0x68, 0x65, 0x6c, 0x6c, // "hello" 0x50
0x6f, 0x00, 0x00, 0x00, // "hello" [cont.] and padding
)
],
v1 = [
96: raw(
0x02, 0x00, 0x00, 0x00, // Table_UnionWithVector_ReservedSandwich.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_UnionWithVector_ReservedSandwich.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_handles
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].presence (absent)
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].presence (absent) [cont.]
0x30, 0x00, 0x00, 0x00, // vector<envelope>[1].num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // vector<envelope>[1].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence [cont.]
0x03, 0x00, 0x00, 0x00, // UnionWithVector.tag (string) 0x30
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag padding
0x18, 0x00, 0x00, 0x00, // UnionWithVector.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionWithVector.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // UnionWithVector.presence
0xFF, 0xFF, 0xFF, 0xFF, // UnionWithVector.presence [cont.]
0x05, 0x00, 0x00, 0x00, // string.size
0x00, 0x00, 0x00, 0x00, // string.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // string.presence 0x40
0xFF, 0xFF, 0xFF, 0xFF, // string.presence [cont.]
0x68, 0x65, 0x6c, 0x6c, // "hello" 0x50
0x6f, 0x00, 0x00, 0x00, // "hello" [cont.] and padding
)
],
},
}
success("Table_UnionWithVector_StructSandwich") {
value = Table_UnionWithVector_StructSandwichStruct {
table: Table_UnionWithVector_StructSandwich {
s1: StructSize3Align1 {
three_bytes: [0x01, 0x02, 0x03],
},
uv: UnionWithVector {
s: "hello"
},
s2: StructSize3Align1 {
three_bytes: [0x04, 0x05, 0x06],
},
},
},
bytes = {
old = [
112: raw(
0x03, 0x00, 0x00, 0x00, // Table_UnionWithVector_StructSandwich.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_UnionWithVector_StructSandwich.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[0].num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[0].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[0].presence [cont.]
0x20, 0x00, 0x00, 0x00, // vector<envelope>[1].num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // vector<envelope>[1].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[2].num_bytes 0x30
0x00, 0x00, 0x00, 0x00, // vector<envelope>[2].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence [cont.]
0x01, 0x02, 0x03, 0x00, // s1.three_bytes and padding 0x40
0x00, 0x00, 0x00, 0x00, // s1 padding
0x02, 0x00, 0x00, 0x00, // UnionWithVector.tag (string)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.tag padding
0x05, 0x00, 0x00, 0x00, // string.size 0x50
0x00, 0x00, 0x00, 0x00, // string.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // string.presence
0xFF, 0xFF, 0xFF, 0xFF, // string.presence [cont.]
0x68, 0x65, 0x6c, 0x6c, // "hello" 0x60
0x6f, 0x00, 0x00, 0x00, // "hello" [cont.] and padding
0x04, 0x05, 0x06, 0x00, // s2.three_bytes and padding 0x70
0x00, 0x00, 0x00, 0x00, // s2 padding
)
],
v1 = [
128: raw(
0x03, 0x00, 0x00, 0x00, // Table_UnionWithVector_StructSandwich.vector<envelope>.size
0x00, 0x00, 0x00, 0x00, // [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // Table_UnionWithVector_StructSandwich.vector<envelope>.presence
0xFF, 0xFF, 0xFF, 0xFF, // [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[0].num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // vector<envelope>[0].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[0].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[0].presence [cont.]
0x30, 0x00, 0x00, 0x00, // vector<envelope>[1].num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // vector<envelope>[1].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[1].presence [cont.]
0x08, 0x00, 0x00, 0x00, // vector<envelope>[2].num_bytes 0x30
0x00, 0x00, 0x00, 0x00, // vector<envelope>[2].num_handles
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence
0xFF, 0xFF, 0xFF, 0xFF, // vector<envelope>[2].presence [cont.]
0x01, 0x02, 0x03, 0x00, // s1.three_bytes and padding 0x40
0x00, 0x00, 0x00, 0x00, // s1 padding
0x03, 0x00, 0x00, 0x00, // UnionWithVector.xunion.ordinal (string)
0x00, 0x00, 0x00, 0x00, // UnionWithVector.xunion.padding
0x18, 0x00, 0x00, 0x00, // UnionWithVector.xunion.envelope.size 0x50
0x00, 0x00, 0x00, 0x00, // UnionWithVector.xunion.envelope.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // UnionWithVector.xunion.envelope.presence
0xFF, 0xFF, 0xFF, 0xFF, // UnionWithVector.xunion.envelope.presence [cont.]
0x05, 0x00, 0x00, 0x00, // string.size 0x60
0x00, 0x00, 0x00, 0x00, // string.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // string.presence
0xFF, 0xFF, 0xFF, 0xFF, // string.presence [cont.]
0x68, 0x65, 0x6c, 0x6c, // "hello" 0x70
0x6f, 0x00, 0x00, 0x00, // "hello" [cont.] and padding
0x04, 0x05, 0x06, 0x00, // s2.three_bytes and padding 0x80
0x00, 0x00, 0x00, 0x00, // s2 padding
)
],
},
}
success("XUnionWithStruct") {
value = XUnionWithStructStruct {
xu: XUnionWithStruct {
s: StructSize3Align1 {
three_bytes: [0x01, 0x02, 0x03],
},
},
},
bytes = {
// old & v1 bytes are the same.
old = [
32: raw(
0x14, 0x5c, 0x3e, 0x19, // XUnionWithStruct.xunion.ordinal
0x00, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.ordinal padding
0x08, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.envelope.num_bytes
0x00, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // XUnionWithStruct.xunion.envelope.presence 0x10
0xFF, 0xFF, 0xFF, 0xFF, // XUnionWithStruct.xunion.envelope.presence [cont.]
0x01, 0x02, 0x03, 0x00, // s and padding
0x00, 0x00, 0x00, 0x00, // padding [cont.]
)
],
v1 = [
32: raw(
0x14, 0x5c, 0x3e, 0x19, // XUnionWithStruct.xunion.ordinal
0x00, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.ordinal padding
0x08, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.envelope.num_bytes
0x00, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // XUnionWithStruct.xunion.envelope.presence 0x10
0xFF, 0xFF, 0xFF, 0xFF, // XUnionWithStruct.xunion.envelope.presence [cont.]
0x01, 0x02, 0x03, 0x00, // s and padding
0x00, 0x00, 0x00, 0x00, // padding [cont.]
)
],
},
}
success("XUnionWithUnknownOrdinal") {
// TODO(fxb/8047): Enable this after more bindings support arbitrary ordinals in xunions.
bindings_allowlist = [transformer],
value = XUnionWithStructStruct {
xu: XUnionWithStruct {
0x11BA5EBA: StructSize16Align8 {
f1: 0x0807060504030201,
f2: 0x100F0E0D0C0B0A09,
},
},
},
bytes = {
// old & v1 bytes are the same.
old = [
40: raw(
0xBA, 0x5E, 0xBA, 0x11, // XUnionWithStruct.xunion.ordinal
0x00, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.ordinal padding
0x10, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.envelope.num_bytes
0x00, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // XUnionWithStruct.xunion.envelope.presence 0x10
0xFF, 0xFF, 0xFF, 0xFF, // XUnionWithStruct.xunion.envelope.presence [cont.]
0x01, 0x02, 0x03, 0x04, // random data
0x05, 0x06, 0x07, 0x08, // random data [cont.]
0x09, 0x0A, 0x0B, 0x0C, // random data 0x20
0x0D, 0x0E, 0x0F, 0x10, // random data [cont.]
)
],
v1 = [
40: raw(
0xBA, 0x5E, 0xBA, 0x11, // XUnionWithStruct.xunion.ordinal
0x00, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.ordinal padding
0x10, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.envelope.num_bytes
0x00, 0x00, 0x00, 0x00, // XUnionWithStruct.xunion.envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // XUnionWithStruct.xunion.envelope.presence 0x10
0xFF, 0xFF, 0xFF, 0xFF, // XUnionWithStruct.xunion.envelope.presence [cont.]
0x01, 0x02, 0x03, 0x04, // random data
0x05, 0x06, 0x07, 0x08, // random data [cont.]
0x09, 0x0A, 0x0B, 0x0C, // random data 0x20
0x0D, 0x0E, 0x0F, 0x10, // random data [cont.]
)
],
},
}
success("ArrayStruct") {
value = ArrayStruct {
unions: [
StringUnion {
s: "one"
},
StringUnion {
s: "two"
},
StringUnion {
s: "three"
},
],
optional_unions: [
StringUnion {
s: "four"
},
StringUnion {
s: "five"
},
StringUnion {
s: "six"
},
],
},
bytes = {
old = [
216: raw(
0x01, 0x00, 0x00, 0x00, // unions[0].tag 0x00
0x00, 0x00, 0x00, 0x00, // unions[0].tag (padding)
0x03, 0x00, 0x00, 0x00, // unions[0].s.length
0x00, 0x00, 0x00, 0x00, // unions[0].s.length [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // unions[0].s.presence 0x10
0xFF, 0xFF, 0xFF, 0xFF, // unions[0].s.presence [cont.]
0x01, 0x00, 0x00, 0x00, // unions[1].tag
0x00, 0x00, 0x00, 0x00, // unions[1].tag (padding)
0x03, 0x00, 0x00, 0x00, // unions[1].s.length 0x20
0x00, 0x00, 0x00, 0x00, // unions[1].s.length [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // unions[1].s.presence
0xFF, 0xFF, 0xFF, 0xFF, // unions[1].s.presence [cont.]
0x01, 0x00, 0x00, 0x00, // unions[2].tag 0x30
0x00, 0x00, 0x00, 0x00, // unions[2].tag (padding)
0x05, 0x00, 0x00, 0x00, // unions[2].s.length
0x00, 0x00, 0x00, 0x00, // unions[2].s.length [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // unions[2].s.presence 0x40
0xFF, 0xFF, 0xFF, 0xFF, // unions[2].s.presence [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[0] presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[0] presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[1] presence 0x50
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[1] presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[2] presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[2] presence
0x6F, 0x6E, 0x65, 0x00, // unions[0].s data ("one") 0x60
0x00, 0x00, 0x00, 0x00, // padding
0x74, 0x77, 0x6F, 0x00, // unions[1].s data ("two")
0x00, 0x00, 0x00, 0x00, // padding
0x74, 0x68, 0x72, 0x65, // unions[2].s data ("three") 0x70
0x65, 0x00, 0x00, 0x00, // padding
0x01, 0x00, 0x00, 0x00, // optional_unions[0].tag
0x00, 0x00, 0x00, 0x00, // optional_unions[0].tag (padding)
0x04, 0x00, 0x00, 0x00, // optional_unions[0].s.length 0x80
0x00, 0x00, 0x00, 0x00, // optional_unions[0].s.length [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[0].s.presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[0].s.presence [cont.]
0x66, 0x6F, 0x75, 0x72, // optional_unions[0].s data ("four") 0x90
0x00, 0x00, 0x00, 0x00, // optional_unions[0].s data padding
0x01, 0x00, 0x00, 0x00, // optional_unions[1].tag
0x00, 0x00, 0x00, 0x00, // optional_unions[1].tag (padding)
0x04, 0x00, 0x00, 0x00, // optional_unions[1].s.length
0x00, 0x00, 0x00, 0x00, // optional_unions[1].s.length [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[1].s.presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[1].s.presence [cont.]
0x66, 0x69, 0x76, 0x65, // optional_unions[1].s data ("five")
0x00, 0x00, 0x00, 0x00, // optional_unions[1].s data padding
0x01, 0x00, 0x00, 0x00, // optional_unions[2].tag
0x00, 0x00, 0x00, 0x00, // optional_unions[2].tag (padding)
0x03, 0x00, 0x00, 0x00, // optional_unions[2].s.length
0x00, 0x00, 0x00, 0x00, // optional_unions[2].s.length [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[2].s.presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[2].s.presence [cont.]
0x73, 0x69, 0x78, 0x00, // optional_unions[2].s data ("six")
0x00, 0x00, 0x00, 0x00, // optional_unions[2].s data padding
)
],
v1 = [
288: raw(
0x02, 0x00, 0x00, 0x00, // unions[0].tag 0x00
0x00, 0x00, 0x00, 0x00, // unions[0].tag (padding)
0x18, 0x00, 0x00, 0x00, // unions[0].envelope.num_bytes
0x00, 0x00, 0x00, 0x00, // unions[0].envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // unions[0].presence 0x10
0xFF, 0xFF, 0xFF, 0xFF, // unions[0].presence [cont.]
0x02, 0x00, 0x00, 0x00, // unions[1].tag
0x00, 0x00, 0x00, 0x00, // unions[1].tag (padding)
0x18, 0x00, 0x00, 0x00, // unions[1].envelope.num_bytes 0x20
0x00, 0x00, 0x00, 0x00, // unions[1].envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // unions[1].presence
0xFF, 0xFF, 0xFF, 0xFF, // unions[1].presence [cont.]
0x02, 0x00, 0x00, 0x00, // unions[2].tag 0x30
0x00, 0x00, 0x00, 0x00, // unions[2].tag (padding)
0x18, 0x00, 0x00, 0x00, // unions[2].envelope.num_bytes
0x00, 0x00, 0x00, 0x00, // unions[2].envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // unions[2].presence 0x40
0xFF, 0xFF, 0xFF, 0xFF, // unions[2].presence [cont.]
0x02, 0x00, 0x00, 0x00, // optional_unions[0].tag
0x00, 0x00, 0x00, 0x00, // optional_unions[0].tag (padding)
0x18, 0x00, 0x00, 0x00, // optional_unions[0].envelope.num_bytes 0x50
0x00, 0x00, 0x00, 0x00, // optional_unions[0].envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[0].presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[0].presence [cont.]
0x02, 0x00, 0x00, 0x00, // optional_unions[1].tag 0x60
0x00, 0x00, 0x00, 0x00, // optional_unions[1].tag (padding)
0x18, 0x00, 0x00, 0x00, // optional_unions[1].envelope.num_bytes
0x00, 0x00, 0x00, 0x00, // optional_unions[1].envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[1].presence 0x70
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[1].presence [cont.]
0x02, 0x00, 0x00, 0x00, // optional_unions[2].tag
0x00, 0x00, 0x00, 0x00, // optional_unions[2].tag (padding)
0x18, 0x00, 0x00, 0x00, // optional_unions[2].envelope.num_bytes 0x80
0x00, 0x00, 0x00, 0x00, // optional_unions[2].envelope.num_handles
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[2].presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[2].presence [cont.]
0x03, 0x00, 0x00, 0x00, // unions[0] data: StringUnion.s.size 0x90
0x00, 0x00, 0x00, 0x00, // unions[0] data: StringUnion.s.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // unions[0] data: StringUnion.s.presence
0xFF, 0xFF, 0xFF, 0xFF, // unions[0] data: StringUnion.s.presence [cont.]
0x6F, 0x6E, 0x65, 0x00, // unions[0].s data ("one")
0x00, 0x00, 0x00, 0x00, // unions[0].s data: StringUnion.s data padding
0x03, 0x00, 0x00, 0x00, // unions[1] data: StringUnion.s.size
0x00, 0x00, 0x00, 0x00, // unions[1] data: StringUnion.s.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // unions[1] data: StringUnion.s.presence 0xb0
0xFF, 0xFF, 0xFF, 0xFF, // unions[1] data: StringUnion.s.presence [cont.]
0x74, 0x77, 0x6F, 0x00, // unions[1].s data ("two")
0x00, 0x00, 0x00, 0x00, // unions[1].s data padding
0x05, 0x00, 0x00, 0x00, // unions[2] data: StringUnion.s.size 0xc0
0x00, 0x00, 0x00, 0x00, // unions[2] data: StringUnion.s.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // unions[2] data: StringUnion.s.presence
0xFF, 0xFF, 0xFF, 0xFF, // unions[2] data: StringUnion.s.presence [cont.]
0x74, 0x68, 0x72, 0x65, // unions[2].s data ("three") 0xd0
0x65, 0x00, 0x00, 0x00, // unions[2].s data padding
0x04, 0x00, 0x00, 0x00, // optional_unions[0] data: StringUnion.s.size
0x00, 0x00, 0x00, 0x00, // optional_unions[0] data: StringUnion.s.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[0] data: StringUnion.s.presence 0xe0
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[0] data: StringUnion.s.presence [cont.]
0x66, 0x6F, 0x75, 0x72, // optional_unions[0].s data ("four")
0x00, 0x00, 0x00, 0x00, // optional_unions[0].s data padding
0x04, 0x00, 0x00, 0x00, // optional_unions[1] data: StringUnion.s.size 0xf0
0x00, 0x00, 0x00, 0x00, // optional_unions[1] data: StringUnion.s.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[1] data: StringUnion.s.presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[1] data: StringUnion.s.presence [cont.]
0x66, 0x69, 0x76, 0x65, // optional_unions[1].s data ("five")
0x00, 0x00, 0x00, 0x00, // optional_unions[1].s data padding
0x03, 0x00, 0x00, 0x00, // optional_unions[2] data: StringUnion.s.size
0x00, 0x00, 0x00, 0x00, // optional_unions[2] data: StringUnion.s.size [cont.]
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[2] data: StringUnion.s.presence
0xFF, 0xFF, 0xFF, 0xFF, // optional_unions[2] data: StringUnion.s.presence [cont.]
0x73, 0x69, 0x78, 0x00, // optional_unions[2].s data ("six")
0x00, 0x00, 0x00, 0x00, // optional_unions[2].s data padding
)
],
},
}
success("TransformerEmptyStruct") {
value = TransformerEmptyStruct {},
bytes = {
// old & v1 bytes are the same.
old = [
8: raw(
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
),
],
v1 = [
8: raw(
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
),
],
},
}
success("EmptyStructUnion") {
value = EmptyStructUnionStruct {
u: EmptyStructUnion {
es: TransformerEmptyStruct {},
},
},
bytes = {
old = [
8: raw(
0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
),
],
v1 = [
32: raw(
0x02, 0x00, 0x00, 0x00, // 0x00
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, // 0x10
0xFF, 0xFF, 0xFF, 0xFF, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("NoCodingTablesStressor") {
value = NoCodingTablesStressor {
f1: 0x1111111111111111,
f2: 0x2222222222222222,
u1: UnionSize36Align4 {
variant: [
0x33, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33,
],
},
f3: 0x4444444444444444,
f4: 0x5555555555555555,
u2: UnionSize36Align4 {
variant: [
0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x66, 0x66,
],
},
f5: 0x7777777777777777,
f6: 0x8888888888888888,
u3: UnionSize36Align4 {
variant: [
0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99,
],
},
f7: 0xaaaaaaaaaaaaaaaa,
p1: Size8Align8 {
data: 0xeeeeeeeeeeeeeeee,
},
f8: 0xbbbbbbbbbbbbbbbb,
p2: Size8Align8 {
data: 0xeeeeeeeeeeeeeeee,
},
f9: 0xdddddddddddddddd,
},
bytes = {
old = [
224: raw(
0x11, 0x11, 0x11, 0x11, // 0x00
0x11, 0x11, 0x11, 0x11, //
0x22, 0x22, 0x22, 0x22, //
0x22, 0x22, 0x22, 0x22, //
0x03, 0x00, 0x00, 0x00, // 0x10
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, // 0x20
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, // 0x30
0x00, 0x00, 0x00, 0x00, //
0x44, 0x44, 0x44, 0x44, //
0x44, 0x44, 0x44, 0x44, //
0x55, 0x55, 0x55, 0x55, // 0x40
0x55, 0x55, 0x55, 0x55, //
0x03, 0x00, 0x00, 0x00, //
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, // 0x50
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, // 0x60
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, //
0x00, 0x00, 0x00, 0x00, //
0x77, 0x77, 0x77, 0x77, // 0x70
0x77, 0x77, 0x77, 0x77, //
0x88, 0x88, 0x88, 0x88, //
0x88, 0x88, 0x88, 0x88, //
0x03, 0x00, 0x00, 0x00, // 0x80
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, // 0x90
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, // 0xa0
0x00, 0x00, 0x00, 0x00, //
0xaa, 0xaa, 0xaa, 0xaa, //
0xaa, 0xaa, 0xaa, 0xaa, //
0xff, 0xff, 0xff, 0xff, // 0xb0
0xff, 0xff, 0xff, 0xff, //
0xbb, 0xbb, 0xbb, 0xbb, //
0xbb, 0xbb, 0xbb, 0xbb, //
0xff, 0xff, 0xff, 0xff, // 0xc0
0xff, 0xff, 0xff, 0xff, //
0xdd, 0xdd, 0xdd, 0xdd, //
0xdd, 0xdd, 0xdd, 0xdd, //
0xee, 0xee, 0xee, 0xee, // 0xd0
0xee, 0xee, 0xee, 0xee, //
0xee, 0xee, 0xee, 0xee, //
0xee, 0xee, 0xee, 0xee, //
),
],
v1 = [
272: raw(
0x11, 0x11, 0x11, 0x11, // 0x00
0x11, 0x11, 0x11, 0x11, //
0x22, 0x22, 0x22, 0x22, //
0x22, 0x22, 0x22, 0x22, //
0x04, 0x00, 0x00, 0x00, // 0x10
0x00, 0x00, 0x00, 0x00, //
0x20, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, // 0x20
0xff, 0xff, 0xff, 0xff, //
0x44, 0x44, 0x44, 0x44, //
0x44, 0x44, 0x44, 0x44, //
0x55, 0x55, 0x55, 0x55, // 0x30
0x55, 0x55, 0x55, 0x55, //
0x04, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x20, 0x00, 0x00, 0x00, // 0x40
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x77, 0x77, 0x77, 0x77, // 0x50
0x77, 0x77, 0x77, 0x77, //
0x88, 0x88, 0x88, 0x88, //
0x88, 0x88, 0x88, 0x88, //
0x04, 0x00, 0x00, 0x00, // 0x60
0x00, 0x00, 0x00, 0x00, //
0x20, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, // 0x70
0xff, 0xff, 0xff, 0xff, //
0xaa, 0xaa, 0xaa, 0xaa, //
0xaa, 0xaa, 0xaa, 0xaa, //
0xff, 0xff, 0xff, 0xff, // 0x80
0xff, 0xff, 0xff, 0xff, //
0xbb, 0xbb, 0xbb, 0xbb, //
0xbb, 0xbb, 0xbb, 0xbb, //
0xff, 0xff, 0xff, 0xff, // 0x90
0xff, 0xff, 0xff, 0xff, //
0xdd, 0xdd, 0xdd, 0xdd, //
0xdd, 0xdd, 0xdd, 0xdd, //
// out-of-line
0x33, 0x33, 0x33, 0x33, // 0xa0
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, // 0xb0
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, //
0x33, 0x33, 0x33, 0x33, //
0x66, 0x66, 0x66, 0x66, // 0xc0
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, // 0xd0
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, //
0x66, 0x66, 0x66, 0x66, //
0x99, 0x99, 0x99, 0x99, // 0xe0
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, // 0xf0
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, //
0x99, 0x99, 0x99, 0x99, //
0xee, 0xee, 0xee, 0xee, // 0x100
0xee, 0xee, 0xee, 0xee, //
0xee, 0xee, 0xee, 0xee, //
0xee, 0xee, 0xee, 0xee, //
),
],
},
}
success("OutOfLineSandwich1Case1") {
value = OutOfLineSandwich1 {
before: "soft migrations rock!",
v: [
Sandwich1 {
before: 0x04030201,
the_union: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
after: 0x08070605,
},
],
after: "hard transitions suck!",
},
bytes = {
old = [
112: raw(
0x15, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.before)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x01, 0x00, 0x00, 0x00, // vector<Sandwich1>.size (start of OutOfLineSandwich1.v)
0x00, 0x00, 0x00, 0x00, // vector<Sandwich1>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence [cont.]
0x16, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.after)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x73, 0x6f, 0x66, 0x74, // vector<uint8>.data ("soft migrations rock!")
0x20, 0x6d, 0x69, 0x67, // vector<uint8>.data [cont.]
0x72, 0x61, 0x74, 0x69, // vector<uint8>.data [cont.]
0x6f, 0x6e, 0x73, 0x20, // vector<uint8>.data [cont.]
0x72, 0x6f, 0x63, 0x6b, // vector<uint8>.data [cont.]
0x21, 0x00, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
// vector<Sandwich1>[0]:
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
0x68, 0x61, 0x72, 0x64, // vector<uint8>.data ("hard transitions suck!")
0x20, 0x74, 0x72, 0x61, // vector<uint8>.data [cont.]
0x6e, 0x73, 0x69, 0x74, // vector<uint8>.data [cont.]
0x69, 0x6f, 0x6e, 0x73, // vector<uint8>.data [cont.]
0x20, 0x73, 0x75, 0x63, // vector<uint8>.data [cont.]
0x6b, 0x21, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
),
],
v1 = [
144: raw(
0x15, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.before)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x01, 0x00, 0x00, 0x00, // vector<Sandwich1>.size (start of OutOfLineSandwich1.v)
0x00, 0x00, 0x00, 0x00, // vector<Sandwich1>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence [cont.]
0x16, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.after)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x73, 0x6f, 0x66, 0x74, // vector<uint8>.data ("soft migrations rock!")
0x20, 0x6d, 0x69, 0x67, // vector<uint8>.data [cont.]
0x72, 0x61, 0x74, 0x69, // vector<uint8>.data [cont.]
0x6f, 0x6e, 0x73, 0x20, // vector<uint8>.data [cont.]
0x72, 0x6f, 0x63, 0x6b, // vector<uint8>.data [cont.]
0x21, 0x00, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
// vector<Sandwich1>[0]:
0x01, 0x02, 0x03, 0x04, // Sandwich1.before
0x00, 0x00, 0x00, 0x00, // Sandwich1.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1.after
0x00, 0x00, 0x00, 0x00, // Sandwich1.after (padding)
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data, i.e. Sandwich1.the_union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x68, 0x61, 0x72, 0x64, // vector<uint8>.data ("hard transitions suck!")
0x20, 0x74, 0x72, 0x61, // vector<uint8>.data [cont.]
0x6e, 0x73, 0x69, 0x74, // vector<uint8>.data [cont.]
0x69, 0x6f, 0x6e, 0x73, // vector<uint8>.data [cont.]
0x20, 0x73, 0x75, 0x63, // vector<uint8>.data [cont.]
0x6b, 0x21, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
),
],
},
}
success("OutOfLineSandwich1WithOptUnionPresent") {
value = OutOfLineSandwich1WithOptUnion {
before: "soft migrations rock!",
v: [
Sandwich1WithOptUnion {
before: 0x04030201,
opt_union: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
after: 0x08070605,
},
],
after: "hard transitions suck!",
},
bytes = {
old = [
128: raw(
0x15, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.before)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x01, 0x00, 0x00, 0x00, // vector<Sandwich1>.size (start of OutOfLineSandwich1.v)
0x00, 0x00, 0x00, 0x00, // vector<Sandwich1>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence [cont.]
0x16, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.after)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x73, 0x6f, 0x66, 0x74, // vector<uint8>.data ("soft migrations rock!")
0x20, 0x6d, 0x69, 0x67, // vector<uint8>.data [cont.]
0x72, 0x61, 0x74, 0x69, // vector<uint8>.data [cont.]
0x6f, 0x6e, 0x73, 0x20, // vector<uint8>.data [cont.]
0x72, 0x6f, 0x63, 0x6b, // vector<uint8>.data [cont.]
0x21, 0x00, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
// vector<Sandwich1>[0]:
0x01, 0x02, 0x03, 0x04, // Sandwich1WithOptUnion.before
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.before (padding)
0xff, 0xff, 0xff, 0xff, // Sandwich1WithOptUnion.opt_union (present)
0xff, 0xff, 0xff, 0xff, // Sandwich1WithOptUnion.opt_union (present) [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1WithOptUnion.after
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.after (padding)
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1WithOptUnion.opt_union
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
0x68, 0x61, 0x72, 0x64, // vector<uint8>.data ("hard transitions suck!")
0x20, 0x74, 0x72, 0x61, // vector<uint8>.data [cont.]
0x6e, 0x73, 0x69, 0x74, // vector<uint8>.data [cont.]
0x69, 0x6f, 0x6e, 0x73, // vector<uint8>.data [cont.]
0x20, 0x73, 0x75, 0x63, // vector<uint8>.data [cont.]
0x6b, 0x21, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
)
],
v1 = [
144: raw(
0x15, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.before)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x01, 0x00, 0x00, 0x00, // vector<Sandwich1>.size (start of OutOfLineSandwich1.v)
0x00, 0x00, 0x00, 0x00, // vector<Sandwich1>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence [cont.]
0x16, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.after)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x73, 0x6f, 0x66, 0x74, // vector<uint8>.data ("soft migrations rock!")
0x20, 0x6d, 0x69, 0x67, // vector<uint8>.data [cont.]
0x72, 0x61, 0x74, 0x69, // vector<uint8>.data [cont.]
0x6f, 0x6e, 0x73, 0x20, // vector<uint8>.data [cont.]
0x72, 0x6f, 0x63, 0x6b, // vector<uint8>.data [cont.]
0x21, 0x00, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
// vector<Sandwich1>[0]:
0x01, 0x02, 0x03, 0x04, // Sandwich1WithOptUnion.before
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.before (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1WithOptUnion.union
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.env.presence (present)
0xff, 0xff, 0xff, 0xff, // UnionSize8Aligned4.presence (present) [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1WithOptUnion.after
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.after (padding)
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data, i.e. Sandwich1WithOptUnion.union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x68, 0x61, 0x72, 0x64, // vector<uint8>.data ("hard transitions suck!")
0x20, 0x74, 0x72, 0x61, // vector<uint8>.data [cont.]
0x6e, 0x73, 0x69, 0x74, // vector<uint8>.data [cont.]
0x69, 0x6f, 0x6e, 0x73, // vector<uint8>.data [cont.]
0x20, 0x73, 0x75, 0x63, // vector<uint8>.data [cont.]
0x6b, 0x21, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
)
],
},
}
success("OutOfLineSandwich1WithOptUnionAbsent") {
value = OutOfLineSandwich1WithOptUnion {
before: "soft migrations rock!",
v: [
Sandwich1WithOptUnion {
before: 0x04030201,
after: 0x08070605,
},
],
after: "hard transitions suck!",
},
bytes = {
old = [
120: raw(
0x15, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.before)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x01, 0x00, 0x00, 0x00, // vector<Sandwich1>.size (start of OutOfLineSandwich1.v)
0x00, 0x00, 0x00, 0x00, // vector<Sandwich1>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence [cont.]
0x16, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.after)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x73, 0x6f, 0x66, 0x74, // vector<uint8>.data ("soft migrations rock!")
0x20, 0x6d, 0x69, 0x67, // vector<uint8>.data [cont.]
0x72, 0x61, 0x74, 0x69, // vector<uint8>.data [cont.]
0x6f, 0x6e, 0x73, 0x20, // vector<uint8>.data [cont.]
0x72, 0x6f, 0x63, 0x6b, // vector<uint8>.data [cont.]
0x21, 0x00, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
// vector<Sandwich1>[0]:
0x01, 0x02, 0x03, 0x04, // Sandwich1WithOptUnion.before
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.before (padding)
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.opt_union (absent)
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.opt_union (absent) [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1WithOptUnion.after
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.after (padding)
0x68, 0x61, 0x72, 0x64, // vector<uint8>.data ("hard transitions suck!")
0x20, 0x74, 0x72, 0x61, // vector<uint8>.data [cont.]
0x6e, 0x73, 0x69, 0x74, // vector<uint8>.data [cont.]
0x69, 0x6f, 0x6e, 0x73, // vector<uint8>.data [cont.]
0x20, 0x73, 0x75, 0x63, // vector<uint8>.data [cont.]
0x6b, 0x21, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
)
],
v1 = [
136: raw(
0x15, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.before)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x01, 0x00, 0x00, 0x00, // vector<Sandwich1>.size (start of OutOfLineSandwich1.v)
0x00, 0x00, 0x00, 0x00, // vector<Sandwich1>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence
0xff, 0xff, 0xff, 0xff, // vector<Sandwich1>.presence [cont.]
0x16, 0x00, 0x00, 0x00, // vector<uint8>.size (start of OutOfLineSandwich1.after)
0x00, 0x00, 0x00, 0x00, // vector<uint8>.size [cont.]
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence
0xff, 0xff, 0xff, 0xff, // vector<uint8>.presence [cont.]
0x73, 0x6f, 0x66, 0x74, // vector<uint8>.data ("soft migrations rock!")
0x20, 0x6d, 0x69, 0x67, // vector<uint8>.data [cont.]
0x72, 0x61, 0x74, 0x69, // vector<uint8>.data [cont.]
0x6f, 0x6e, 0x73, 0x20, // vector<uint8>.data [cont.]
0x72, 0x6f, 0x63, 0x6b, // vector<uint8>.data [cont.]
0x21, 0x00, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
// vector<Sandwich1>[0]:
0x01, 0x02, 0x03, 0x04, // Sandwich1WithOptUnion.before
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.before (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e. Sandwich1WithOptUnion.opt_union
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.padding
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.num_handle
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.presence (absent)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.env.presence (preabsentsent) [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich1WithOptUnion.after
0x00, 0x00, 0x00, 0x00, // Sandwich1WithOptUnion.after (padding)
0x68, 0x61, 0x72, 0x64, // vector<uint8>.data ("hard transitions suck!")
0x20, 0x74, 0x72, 0x61, // vector<uint8>.data [cont.]
0x6e, 0x73, 0x69, 0x74, // vector<uint8>.data [cont.]
0x69, 0x6f, 0x6e, 0x73, // vector<uint8>.data [cont.]
0x20, 0x73, 0x75, 0x63, // vector<uint8>.data [cont.]
0x6b, 0x21, 0x00, 0x00, // vector<uint8>.data [cont.] + padding
)
],
},
}
success("Regression4") {
value = Regression4 {
f1: 1,
f2: 2,
s1: StructSize3Align1 {
three_bytes: [0x09, 0x0A, 0x0B],
},
f3: 3,
f4: 4,
f5: 5,
f6: 6,
},
bytes = {
// old & v1 bytes are the same.
old = [
32: raw(
0x01, 0x00, 0x00, 0x00, // f1 (uint8) and padding
0x02, 0x00, 0x00, 0x00, // f2 (uint32)
0x09, 0x0A, 0x0B, 0x03, // StructSize3Alignment1 data (3 bytes) + f3 (uint8)
0x04, 0x00, 0x00, 0x00, // f4 (uint16), f4 padding
0x05, 0x00, 0x00, 0x00, // f5 (uint64)
0x00, 0x00, 0x00, 0x00, // f5
0x06, 0x00, 0x00, 0x00, // f6 (uint8) and padding
0x00, 0x00, 0x00, 0x00, // f6 padding
),
],
v1 = [
32: raw(
0x01, 0x00, 0x00, 0x00, // f1 (uint8) and padding
0x02, 0x00, 0x00, 0x00, // f2 (uint32)
0x09, 0x0A, 0x0B, 0x03, // StructSize3Alignment1 data (3 bytes) + f3 (uint8)
0x04, 0x00, 0x00, 0x00, // f4 (uint16), f4 padding
0x05, 0x00, 0x00, 0x00, // f5 (uint64)
0x00, 0x00, 0x00, 0x00, // f5
0x06, 0x00, 0x00, 0x00, // f6 (uint8) and padding
0x00, 0x00, 0x00, 0x00, // f6 padding
),
],
},
}
success("Regression5Enums") {
// TODO(fxb/43254): Make f2 and f3 enums once GIDL supports them.
value = Regression5 {
f1: 1,
f2: 0x3231302f,
f3: 0x08,
f4: 0x1615,
f5: 0x64636261605f5e5d,
f6: 0x08,
},
bytes = {
// old & v1 bytes are the same.
old = [
32: raw(
0x01, 0x00, 0x00, 0x00, // f1 (uint8) + padding
0x2f, 0x30, 0x31, 0x32, // f2 (uint32 enum)
0x08, 0x00, 0x15, 0x16, // f3 (uint8 enum) + padding + f4 (uint16)
0x00, 0x00, 0x00, 0x00, // padding
0x5d, 0x5e, 0x5f, 0x60, // f5 (uint64)
0x61, 0x62, 0x63, 0x64, // f5 (uint64) [cont.]
0x08, 0x00, 0x00, 0x00, // f6 (uint8) + padding
0x00, 0x00, 0x00, 0x00, // padding
),
],
v1 = [
32: raw(
0x01, 0x00, 0x00, 0x00, // f1 (uint8) + padding
0x2f, 0x30, 0x31, 0x32, // f2 (uint32 enum)
0x08, 0x00, 0x15, 0x16, // f3 (uint8 enum) + padding + f4 (uint16)
0x00, 0x00, 0x00, 0x00, // padding
0x5d, 0x5e, 0x5f, 0x60, // f5 (uint64)
0x61, 0x62, 0x63, 0x64, // f5 (uint64) [cont.]
0x08, 0x00, 0x00, 0x00, // f6 (uint8) + padding
0x00, 0x00, 0x00, 0x00, // padding
),
],
},
}
success("Regression6Bits") {
// TODO(fxb/43254): Make f2 and f3 bits once GIDL supports them.
value = Regression6 {
f1: 1,
f2: 0x3231302f,
f3: 0x08,
f4: 0x1615,
f5: 0x64636261605f5e5d,
f6: 0x08,
},
bytes = {
// old & v1 bytes are the same.
old = [
32: raw(
0x01, 0x00, 0x00, 0x00, // f1 (uint8) + padding
0x2f, 0x30, 0x31, 0x32, // f2 (uint32 bits)
0x08, 0x00, 0x15, 0x16, // f3 (uint8 bits) + padding + f4 (uint16)
0x00, 0x00, 0x00, 0x00, // padding
0x5d, 0x5e, 0x5f, 0x60, // f5 (uint64)
0x61, 0x62, 0x63, 0x64, // f5 (uint64) [cont.]
0x08, 0x00, 0x00, 0x00, // f6 (uint8) + padding
0x00, 0x00, 0x00, 0x00, // padding
),
],
v1 = [
32: raw(
0x01, 0x00, 0x00, 0x00, // f1 (uint8) + padding
0x2f, 0x30, 0x31, 0x32, // f2 (uint32 bits)
0x08, 0x00, 0x15, 0x16, // f3 (uint8 bits) + padding + f4 (uint16)
0x00, 0x00, 0x00, 0x00, // padding
0x5d, 0x5e, 0x5f, 0x60, // f5 (uint64)
0x61, 0x62, 0x63, 0x64, // f5 (uint64) [cont.]
0x08, 0x00, 0x00, 0x00, // f6 (uint8) + padding
0x00, 0x00, 0x00, 0x00, // padding
),
],
},
}
success("Regression7TableUnionXUnion") {
value = Regression7TableUnionXUnion {
value: TableOfUnionThenXUnionThenTableThenXUnionThenUnion {
member: UnionOfXUnionThenTableThenXUnionThenUnion {
variant: XUnionOfTableThenXUnionThenUnion {
variant: TableOfXUnionThenUnion {
member: XUnionOfUnion {
variant: UnionAtTheBottom {
tiny: 8,
},
},
},
},
},
},
},
bytes = {
old = [
176: raw(
// 0: TableOfUnionThenXUnionThenTableThenXUnionThenUnion header
0x03, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 16: TableOfUnionThenXUnionThenTableThenXUnionThenUnion env1
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 32: TableOfUnionThenXUnionThenTableThenXUnionThenUnion env2
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 48: TableOfUnionThenXUnionThenTableThenXUnionThenUnion env3
0x70, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 64: UnionOfXUnionThenTableThenXUnionThenUnion
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x4e, 0x61, 0xb8, 0x22, // XUnionOfTableThenXUnionThenUnion header
0x00, 0x00, 0x00, 0x00, //
0x50, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 96: TableOfXUnionThenUnion header
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 112: TableOfXUnionThenUnion env1
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 128: TableOfXUnionThenUnion env2
0x20, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 146: XUnionOfUnion header
0x94, 0x05, 0x22, 0x38, //
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 170: UnionAtTheBottom header
0x02, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, // tiny
),
],
v1 = [
216: raw(
// 0: TableOfUnionThenXUnionThenTableThenXUnionThenUnion header
0x03, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 16: TableOfUnionThenXUnionThenTableThenXUnionThenUnion env1
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 32: TableOfUnionThenXUnionThenTableThenXUnionThenUnion env2
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 48: TableOfUnionThenXUnionThenTableThenXUnionThenUnion env3
0x98, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 64: UnionOfXUnionThenTableThenXUnionThenUnion-as-xunion header
0x03, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x80, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 88: XUnionOfTableThenXUnionThenUnion header
0x4e, 0x61, 0xb8, 0x22, //
0x00, 0x00, 0x00, 0x00, //
0x68, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 112: TableOfXUnionThenUnion header
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 128: TableOfXUnionThenUnion env1
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 146: TableOfXUnionThenUnion env2
0x38, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 172: XUnionOfUnion header
0x94, 0x05, 0x22, 0x38, //
0x00, 0x00, 0x00, 0x00, //
0x20, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 196: UnionAtTheBottom-as-xunion header
0x03, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 220: UnionAtTheBottom-as-xunion data (tiny)
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("Regression8OptUnionSize12Aligned4") {
value = Regression8OptUnionSize12Align4 {
opt_union1: UnionSize12Align4 {
variant: [0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6],
},
opt_union3: UnionSize12Align4 {
variant: [0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6],
},
},
bytes = {
old = [
56: raw(
// 0: presence
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 8: absence
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 16: presence
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 24: UnionSize12Aligned4-as-xunion
0x03, 0x00, 0x00, 0x00, // tag
0xa1, 0xa2, 0xa3, 0xa4, // array<uint8>:6
0xa5, 0xa6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
0x00, 0x00, 0x00, 0x00, // padding
// 40: UnionSize12Aligned4-as-xunion
0x03, 0x00, 0x00, 0x00, // tag
0xb1, 0xb2, 0xb3, 0xb4, // array<uint8>:6
0xb5, 0xb6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
0x00, 0x00, 0x00, 0x00, // padding
),
],
v1 = [
88: raw(
// 0: opt_union1, UnionSize12Aligned4-as-xunion present
0x04, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, // padding
0x08, 0x00, 0x00, 0x00, // num_bytes
0x00, 0x00, 0x00, 0x00, // num_handles
0xff, 0xff, 0xff, 0xff, // present
0xff, 0xff, 0xff, 0xff, // present (cont.)
// 24: opt_union2, UnionSize12Aligned4-as-xunion absent
0x00, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, // padding
0x00, 0x00, 0x00, 0x00, // num_bytes
0x00, 0x00, 0x00, 0x00, // num_handles
0x00, 0x00, 0x00, 0x00, // absent
0x00, 0x00, 0x00, 0x00, // absent (cont.)
// 48: opt_union3, UnionSize12Aligned4-as-xunion present
0x04, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, // padding
0x08, 0x00, 0x00, 0x00, // num_bytes
0x00, 0x00, 0x00, 0x00, // num_handles
0xff, 0xff, 0xff, 0xff, // present
0xff, 0xff, 0xff, 0xff, // present (cont.)
// 72: opt_union1.data
0xa1, 0xa2, 0xa3, 0xa4, // array<uint8>:6
0xa5, 0xa6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
// 80: opt_union2.data
0xb1, 0xb2, 0xb3, 0xb4, // array<uint8>:6
0xb5, 0xb6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
),
],
},
}
success("Regression8VectorOfOptUnionSize12Aligned4") {
value = Regression8VectorOfOptUnionSize12Align4 {
value: [
null,
UnionSize12Align4 {
variant: [0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6]
},
null,
UnionSize12Align4 {
variant: [0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6]
},
null,
],
},
bytes = {
old = [
88: raw(
// 0: vector header
0x05, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 16: vector[0] (absent)
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 24: vector[1] (present)
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 32: vector[2] (absent)
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 40: vector[3] (present)
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 48: vector[4] (absent)
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 56: vector[1].data, UnionSize12Aligned4-as-xunion
0x03, 0x00, 0x00, 0x00, // tag
0xa1, 0xa2, 0xa3, 0xa4, // array<uint8>:6
0xa5, 0xa6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
0x00, 0x00, 0x00, 0x00, // padding
// 72: vector[3].data, UnionSize12Aligned4-as-xunion
0x03, 0x00, 0x00, 0x00, // tag
0xb1, 0xb2, 0xb3, 0xb4, // array<uint8>:6
0xb5, 0xb6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
0x00, 0x00, 0x00, 0x00, // padding
),
],
v1 = [
152: raw(
// 0: vector header
0x05, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 16: vector[0] UnionSize12Aligned4-as-xunion absent
0x00, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, // padding
0x00, 0x00, 0x00, 0x00, // num_bytes
0x00, 0x00, 0x00, 0x00, // num_handles
0x00, 0x00, 0x00, 0x00, // absent
0x00, 0x00, 0x00, 0x00, // absent (cont.)
// 40: vector[1] UnionSize12Aligned4-as-xunion present
0x04, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, // padding
0x08, 0x00, 0x00, 0x00, // num_bytes
0x00, 0x00, 0x00, 0x00, // num_handles
0xff, 0xff, 0xff, 0xff, // present
0xff, 0xff, 0xff, 0xff, // present (cont.)
// 64: vector[2] UnionSize12Aligned4-as-xunion absent
0x00, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, // padding
0x00, 0x00, 0x00, 0x00, // num_bytes
0x00, 0x00, 0x00, 0x00, // num_handles
0x00, 0x00, 0x00, 0x00, // absent
0x00, 0x00, 0x00, 0x00, // absent (cont.)
// 88: vector[3] UnionSize12Aligned4-as-xunion present
0x04, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, // padding
0x08, 0x00, 0x00, 0x00, // num_bytes
0x00, 0x00, 0x00, 0x00, // num_handles
0xff, 0xff, 0xff, 0xff, // present
0xff, 0xff, 0xff, 0xff, // present (cont.)
// 112: vector[4] UnionSize12Aligned4-as-xunion absent
0x00, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, // padding
0x00, 0x00, 0x00, 0x00, // num_bytes
0x00, 0x00, 0x00, 0x00, // num_handles
0x00, 0x00, 0x00, 0x00, // absent
0x00, 0x00, 0x00, 0x00, // absent (cont.)
// 136: vector[1].data
0xa1, 0xa2, 0xa3, 0xa4, // array<uint8>:6
0xa5, 0xa6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
// 144: vector[2].data
0xb1, 0xb2, 0xb3, 0xb4, // array<uint8>:6
0xb5, 0xb6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
),
],
},
}
success("Regression8TableWithUnionSize12Aligned4") {
value = Regression8TableWithUnionSize12Align4 {
value: TableWithUnionSize12Align4 {
before: 0xaa,
member: UnionSize12Align4 {
variant: [0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6]
},
after: 0xbb,
},
},
bytes = {
old = [
128: raw(
// 0: TableWithUnionSize12Aligned4 header
0x05, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 16: TableWithUnionSize12Aligned4 env1
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 32: TableWithUnionSize12Aligned4 env2
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 48: TableWithUnionSize12Aligned4 env3
0x10, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 64: TableWithUnionSize12Aligned4 env4
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 80: TableWithUnionSize12Aligned4 env5
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 96: env1.data, uint8 before
0xaa, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 104: env3.data, UnionSize12Aligned4
0x03, 0x00, 0x00, 0x00, // tag
0xb1, 0xb2, 0xb3, 0xb4, // array<uint8>:6
0xb5, 0xb6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
0x00, 0x00, 0x00, 0x00, // padding
// 120: env5.data, uint8 after
0xbb, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
144: raw(
// 0: TableWithUnionSize12Aligned4 header
0x05, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 16: TableWithUnionSize12Aligned4 env1
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 32: TableWithUnionSize12Aligned4 env2
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 48: TableWithUnionSize12Aligned4 env3
0x20, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 64: TableWithUnionSize12Aligned4 env4
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 80: TableWithUnionSize12Aligned4 env5
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 96: env1.data, uint8 before
0xaa, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 104: env3.data, UnionSize12Aligned4-as-xunion
0x04, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, // padding
0x08, 0x00, 0x00, 0x00, // num_bytes
0x00, 0x00, 0x00, 0x00, // num_handles
0xff, 0xff, 0xff, 0xff, // presence
0xff, 0xff, 0xff, 0xff, // presence (cont.)
// UnionSize12Aligned4-as-xunion.data
0xb1, 0xb2, 0xb3, 0xb4, // array<uint8>:6
0xb5, 0xb6, 0x00, 0x00, // array<uint8>:6 (cont.) + padding
// 120: env5.data, uint8 after
0xbb, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("Regression9Response") {
value = Regression9Message {
header: TransactionHeader {
tx_id: 1,
flags: [1, 0, 0],
magic_number: 1,
ordinal: 0x56cbc96900000000,
},
body: Regression9Result {
ok: Regression9Value {
u: StringBoolUnion {
s: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
},
nullable_u: StringBoolUnion {
b: false,
},
},
},
},
bytes = {
old = [
112: raw(
0x01, 0x00, 0x00, 0x00, // header
0x01, 0x00, 0x00, 0x01, //
0x00, 0x00, 0x00, 0x00, //
0x69, 0xc9, 0xcb, 0x56, //
// 16: result union xunion header
0x00, 0x00, 0x00, 0x00, // tag (success)
0x00, 0x00, 0x00, 0x00, //
// 32: Unions.u
0x00, 0x00, 0x00, 0x00, // tag (0)
0x00, 0x00, 0x00, 0x00, //
0x20, 0x00, 0x00, 0x00, // data num bytes
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, // data presence
0xff, 0xff, 0xff, 0xff, //
// 56: Unions.nullable_u
0xff, 0xff, 0xff, 0xff, // presence
0xff, 0xff, 0xff, 0xff, //
// 64: Unions.u data
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
// 70 Unions.nullable u data
0x01, 0x00, 0x00, 0x00, // tag
0x00, 0x00, 0x00, 0x00, // data (false)
0x00, 0x00, 0x00, 0x00, // padding
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
144: raw(
0x01, 0x00, 0x00, 0x00, // txn header
0x01, 0x00, 0x00, 0x01, //
0x00, 0x00, 0x00, 0x00, //
0x69, 0xc9, 0xcb, 0x56, //
// 16: result union xunion header
0x01, 0x00, 0x00, 0x00, // ordinal (success)
0x00, 0x00, 0x00, 0x00, //
0x68, 0x00, 0x00, 0x00, // num bytes
0x00, 0x00, 0x00, 0x00, // num handles
0xff, 0xff, 0xff, 0xff, // presence
0xff, 0xff, 0xff, 0xff, //
// 40: Unions.u xunion header
0x01, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, //
0x30, 0x00, 0x00, 0x00, // num bytes
0x00, 0x00, 0x00, 0x00, // num handles
0xff, 0xff, 0xff, 0xff, // presence
0xff, 0xff, 0xff, 0xff, //
// 64: Unions.nullable_u xunion header
0x02, 0x00, 0x00, 0x00, // ordinal
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, // num bytes
0x00, 0x00, 0x00, 0x00, // num handles
0xff, 0xff, 0xff, 0xff, // presence
0xff, 0xff, 0xff, 0xff, //
// 88: Unions.u.s vector header
0x20, 0x00, 0x00, 0x00, // num bytes
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, // presence
0xff, 0xff, 0xff, 0xff, //
// 104: Unions.u.s.data
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
0x41, 0x41, 0x41, 0x41, //
// 136: Unions.nullable_u.data
0x00, 0x00, 0x00, 0x00, // false
0x00, 0x00, 0x00, 0x00, // padding
),
],
},
}
success("Regression10V1") {
// Transformer-only test. The value just provides the type.
bindings_allowlist = [transformer],
value = Regression10V1 {},
bytes = {
// old & v1 bytes are the same.
old = [
104: raw(
// 0: table header
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 16: env1, member x
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 32: env2
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 48: env3
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 64: env4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 80: env5, member y
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 96: env5.data, , member x's data
0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, //
),
],
v1 = [
104: raw(
// 0: table header
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 16: env1, member x
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 32: env2
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 48: env3
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 64: env4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 80: env5, member y
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 96: env5.data, , member x's data
0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, //
),
],
},
}
success("Regression10V2") {
// Transformer-only test. The value just provides the type.
bindings_allowlist = [transformer],
value = Regression10V2 {},
bytes = {
// old & v1 bytes are the same.
old = [
104: raw(
// 0: table header
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 16: env1, member x
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 32: env2
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 48: env3
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 64: env4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 80: env5, member y
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 96: env5.data, , member x's data
0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, //
),
],
v1 = [
104: raw(
// 0: table header
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 16: env1, member x
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 32: env2
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 48: env3
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 64: env4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 80: env5, member y
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 96: env5.data, , member x's data
0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, //
),
],
},
}
success("Regression10V3") {
// Transformer-only test. The value just provides the type.
bindings_allowlist = [transformer],
value = Regression10V3 {},
bytes = {
// old & v1 bytes are the same.
old = [
104: raw(
// 0: table header
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 16: env1, member x
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 32: env2
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 48: env3
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 64: env4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 80: env5, member y
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 96: env5.data, , member x's data
0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, //
),
],
v1 = [
104: raw(
// 0: table header
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 16: env1, member x
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 32: env2
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 48: env3
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 64: env4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 80: env5, member y
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 96: env5.data, , member x's data
0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, //
),
],
},
}
success("Regression11UnknownContent") {
// Transformer-only test. The value just provides the type.
bindings_allowlist = [transformer],
value = Regression11 {},
bytes = {
old = [
104: raw(
// 0: union tag + padding
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 8: union data, i.e. table header
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 24: table env1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 40: table env2 (0x30 bytes, 0x05 handles)
0x30, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 56: table env2.data, some unknown content reported as 48 bytes (0x30),
// including 5 handles. We do not need to have any 'handle present'
// indicators, since the transformer should not care about this. It should
// only copy this data block wholesale, and properly increment the various
// traversal counters.
0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, //
0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, //
0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, //
0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, //
0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, //
0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, //
),
],
v1 = [
120: raw(
// 0: union-as-xunion
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x60, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 24: table header
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 40: table env1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
// 56: table env2 (0x30 bytes, 0x05 handles)
0x30, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //
// 72: table env2.data, some unknown content reported as 48 bytes (0x30),
// including 5 handles. We do not need to have any 'handle present'
// indicators, since the transformer should not care about this. It should
// only copy this data block wholesale, and properly increment the various
// traversal counters.
0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, //
0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, //
0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, //
0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, //
0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, //
0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, //
),
],
},
}
success("Sandwich4Align8") {
value = Sandwich4Align8 {
sandwich4: Sandwich4 {
before: 0x04030201,
the_union: UnionSize36Align4 {
variant: [
0xa0, 0xa1, 0xa2, 0xa3,
0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab,
0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3,
0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb,
0xbc, 0xbd, 0xbe, 0xbf,
],
},
after: 0x08070605,
},
alignment8_enforcement: 0x100f0e0d0c0b0a09,
},
bytes = {
old = [
56: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich4.before 0x00
0x03, 0x00, 0x00, 0x00, // UnionSize36Align4.tag, i.e. Sandwich4.the_union
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize36Align4.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize36Align4.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize36Align4.data [cont.] 0x10
0xac, 0xad, 0xae, 0xaf, // UnionSize36Align4.data [cont.]
0xb0, 0xb1, 0xb2, 0xb3, // UnionSize36Align4.data [cont.]
0xb4, 0xb5, 0xb6, 0xb7, // UnionSize36Align4.data [cont.]
0xb8, 0xb9, 0xba, 0xbb, // UnionSize36Align4.data [cont.] 0x20
0xbc, 0xbd, 0xbe, 0xbf, // UnionSize36Align4.data [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich4.after
0x00, 0x00, 0x00, 0x00, // Sandwich4.padding
0x09, 0x0a, 0x0b, 0x0c, // alignment8_enforcement 0x30
0x0d, 0x0e, 0x0f, 0x10, // alignment8_enforcement
),
],
v1 = [
80: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich4.before 0x00
0x00, 0x00, 0x00, 0x00, // Sandwich4.before (padding)
0x04, 0x00, 0x00, 0x00, // UnionSize36Align4.tag, i.e. Sandwich4.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize36Align4.tag (padding)
0x20, 0x00, 0x00, 0x00, // UnionSize36Align4.env.num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // UnionSize36Align4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize36Align4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize36Align4.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich4.after 0x20
0x00, 0x00, 0x00, 0x00, // Sandwich4.after (padding)
0x09, 0x0a, 0x0b, 0x0c, // alignment8_enforcement
0x0d, 0x0e, 0x0f, 0x10, // alignment8_enforcement
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize36Align4.data, i.e. Sandwich4.the_union.data 0x30
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize36Align4.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize36Align4.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionSize36Align4.data [cont.]
0xb0, 0xb1, 0xb2, 0xb3, // UnionSize36Align4.data [cont.] 0x40
0xb4, 0xb5, 0xb6, 0xb7, // UnionSize36Align4.data [cont.]
0xb8, 0xb9, 0xba, 0xbb, // UnionSize36Align4.data [cont.]
0xbc, 0xbd, 0xbe, 0xbf, // UnionSize36Align4.data [cont.]
),
],
},
}
success("Sandwich4Align8WithPointer") {
value = Sandwich4Align8WithPointer {
sandwich4: Sandwich4 {
before: 0x04030201,
the_union: UnionSize36Align4 {
variant: [
0xa0, 0xa1, 0xa2, 0xa3,
0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab,
0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3,
0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb,
0xbc, 0xbd, 0xbe, 0xbf,
],
},
after: 0x08070605,
},
alignment8_enforcement: Size8Align8 {
data: 0x100f0e0d0c0b0a09,
},
},
bytes = {
old = [
64: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich4.before 0x00
0x03, 0x00, 0x00, 0x00, // UnionSize36Alignment4.tag, i.e. Sandwich4.the_union
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize36Alignment4.data
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize36Alignment4.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize36Alignment4.data [cont.] 0x10
0xac, 0xad, 0xae, 0xaf, // UnionSize36Alignment4.data [cont.]
0xb0, 0xb1, 0xb2, 0xb3, // UnionSize36Alignment4.data [cont.]
0xb4, 0xb5, 0xb6, 0xb7, // UnionSize36Alignment4.data [cont.]
0xb8, 0xb9, 0xba, 0xbb, // UnionSize36Alignment4.data [cont.] 0x20
0xbc, 0xbd, 0xbe, 0xbf, // UnionSize36Alignment4.data [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich4.after
0x00, 0x00, 0x00, 0x00, // Sandwich4.padding
0xff, 0xff, 0xff, 0xff, // alignment8_enforcement presence 0x30
0xff, 0xff, 0xff, 0xff, //
0x09, 0x0a, 0x0b, 0x0c, // alignment8_enforcement 0x30
0x0d, 0x0e, 0x0f, 0x10, // alignment8_enforcement
),
],
v1 = [
88: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich4.before 0x00
0x00, 0x00, 0x00, 0x00, // Sandwich4.before (padding)
0x04, 0x00, 0x00, 0x00, // UnionSize36Alignment4.tag, i.e. Sandwich4.the_union
0x00, 0x00, 0x00, 0x00, // UnionSize36Alignment4.tag (padding)
0x20, 0x00, 0x00, 0x00, // UnionSize36Alignment4.env.num_bytes 0x10
0x00, 0x00, 0x00, 0x00, // UnionSize36Alignment4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize36Alignment4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize36Alignment4.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich4.after 0x20
0x00, 0x00, 0x00, 0x00, // Sandwich4.after (padding)
0xff, 0xff, 0xff, 0xff, // alignment8_enforcement presence
0xff, 0xff, 0xff, 0xff, //
0xa0, 0xa1, 0xa2, 0xa3, // UnionSize36Alignment4.data, i.e. Sandwich4.the_union.data 0x30
0xa4, 0xa5, 0xa6, 0xa7, // UnionSize36Alignment4.data [cont.]
0xa8, 0xa9, 0xaa, 0xab, // UnionSize36Alignment4.data [cont.]
0xac, 0xad, 0xae, 0xaf, // UnionSize36Alignment4.data [cont.]
0xb0, 0xb1, 0xb2, 0xb3, // UnionSize36Alignment4.data [cont.] 0x40
0xb4, 0xb5, 0xb6, 0xb7, // UnionSize36Alignment4.data [cont.]
0xb8, 0xb9, 0xba, 0xbb, // UnionSize36Alignment4.data [cont.]
0xbc, 0xbd, 0xbe, 0xbf, // UnionSize36Alignment4.data [cont.]
0x09, 0x0a, 0x0b, 0x0c, // alignment8_enforcement 0x50
0x0d, 0x0e, 0x0f, 0x10, // alignment8_enforcement
),
],
},
}
success("Sandwich8Case1") {
value = Sandwich8 {
before: 0x04030201,
union_of_union: UnionOfUnion {
size8align4: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
},
after: 0x08070605,
},
bytes = {
old = [
48: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich8.before
0x00, 0x00, 0x00, 0x00, // Sandwich8.before (padding)
0x01, 0x00, 0x00, 0x00, // Sandwich8.UnionOfUnion.tag
0x00, 0x00, 0x00, 0x00, // Sandwich8.UnionOfUnion.tag (padding)
0x02, 0x00, 0x00, 0x00, // UnionSize8Aligned4.tag, i.e Sandwich5.UnionOfUnion.data
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Aligned4.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.data (padding)
0x00, 0x00, 0x00, 0x00, // UnionSize8Aligned4.UnionSize8Aligned4.data (padding)
0x05, 0x06, 0x07, 0x08, // Sandwich8.after
0x00, 0x00, 0x00, 0x00, // Sandwich8.after (padding)
),
],
v1 = [
72: raw(
0x01, 0x02, 0x03, 0x04, // Sandwich8.before
0x00, 0x00, 0x00, 0x00, // Sandwich8.before (padding)
0x02, 0x00, 0x00, 0x00, // Sandwich8.UnionOfUnion.ordinal
0x00, 0x00, 0x00, 0x00, // Sandwich8.UnionOfUnion.padding
0x20, 0x00, 0x00, 0x00, // Sandwich8.UnionOfUnion.env.num_bytes
0x00, 0x00, 0x00, 0x00, // Sandwich8.UnionOfUnion.env.num_handle
0xff, 0xff, 0xff, 0xff, // Sandwich8.UnionOfUnion.env.presence
0xff, 0xff, 0xff, 0xff, // Sandwich8.UnionOfUnion.env.presence [cont.]
0x05, 0x06, 0x07, 0x08, // Sandwich8.after
0x00, 0x00, 0x00, 0x00, // Sandwich8.after (padding)
0x03, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.ordinal
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.padding
0x08, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize8Aligned4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionOfUnion.UnionSize8Aligned4.env.presence [cont.]
0x09, 0x0a, 0x0b, 0x0c, // UnionOfUnion.UnionSize8Aligned4.data
0x00, 0x00, 0x00, 0x00, // UnionOfUnion.UnionSize8Aligned4.data (padding)
),
],
},
}
success("Sandwich9Case1") {
value = Sandwich9 {
before: 0x0201,
the_union: UnionWithVectorOfVectors {
v: [[
StructSize3Align1 {
three_bytes: [0x10, 0x11, 0x12],
},
StructSize3Align1 {
three_bytes: [0x13, 0x14, 0x15],
},
]]
},
after: 0x1211,
},
bytes = {
old = [
88: raw(
0x01, 0x02, 0x00, 0x00, // before
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, // union tag
0x00, 0x00, 0x00, 0x00, //
0x01, 0x00, 0x00, 0x00, // outer vector size
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, // outer vetor presence
0xFF, 0xFF, 0xFF, 0xFF, //
0x11, 0x12, 0x00, 0x00, // after
0x00, 0x00, 0x00, 0x00, //
0x02, 0x00, 0x00, 0x00, // inner vector sizze
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, // inner vector presence
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, // pointer 1 presence
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, // pointer 2 presence
0xFF, 0xFF, 0xFF, 0xFF, //
0x10, 0x11, 0x12, 0x00, // pointer 1 data
0x00, 0x00, 0x00, 0x00, //
0x13, 0x14, 0x15, 0x00, // pointer 2 data
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
104: raw(
0x01, 0x02, 0x00, 0x00, // before
0x00, 0x00, 0x00, 0x00, //
0x01, 0x00, 0x00, 0x00, // xunion tag
0x00, 0x00, 0x00, 0x00, //
0x40, 0x00, 0x00, 0x00, // xunion size
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, // xunion presence
0xFF, 0xFF, 0xFF, 0xFF, //
0x11, 0x12, 0x00, 0x00, // after
0x00, 0x00, 0x00, 0x00, //
0x01, 0x00, 0x00, 0x00, // outer vector size
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, // outer vector presence
0xFF, 0xFF, 0xFF, 0xFF, //
0x02, 0x00, 0x00, 0x00, // inner vector size
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, // inner vector presence
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, // pointer 1 present
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, // pointer 2 present
0xFF, 0xFF, 0xFF, 0xFF, //
0x10, 0x11, 0x12, 0x00, // pointer 1 data
0x00, 0x00, 0x00, 0x00, //
0x13, 0x14, 0x15, 0x00, // pointer 2 data
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("SimpleTableArrayStruct") {
value = SimpleTableArrayStruct {
the_array: [
TransformerSimpleTable {
value: 0xA3A2A1A0,
},
TransformerSimpleTable {
value: 0xB3B2B1B0,
},
],
},
bytes = {
// old & v1 bytes are the same.
old = [
80: raw(
0x01, 0x00, 0x00, 0x00, // 0x00
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, //
0x01, 0x00, 0x00, 0x00, // 0x10
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, //
0x08, 0x00, 0x00, 0x00, // 0x20
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, //
0xA0, 0xA1, 0xa2, 0xa3, // 0x30
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, // 0x40
0xFF, 0xFF, 0xFF, 0xFF, //
0xB0, 0xB1, 0xB2, 0xB3, //
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
80: raw(
0x01, 0x00, 0x00, 0x00, // 0x00
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, //
0x01, 0x00, 0x00, 0x00, // 0x10
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, //
0x08, 0x00, 0x00, 0x00, // 0x20
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, //
0xFF, 0xFF, 0xFF, 0xFF, //
0xA0, 0xA1, 0xa2, 0xa3, // 0x30
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xFF, 0xFF, 0xFF, 0xFF, // 0x40
0xFF, 0xFF, 0xFF, 0xFF, //
0xB0, 0xB1, 0xB2, 0xB3, //
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("StringUnionVector") {
value = StringUnionVector {
the_vector: [
StringUnion {
s: "hello",
},
StringUnion {
u8: 0xaa,
},
StringUnion {
u8: 0xbb,
},
],
},
bytes = {
old = [
120: raw(
0x03, 0x00, 0x00, 0x00, // 0x00
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, // 0x10
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, // 0x20
0xff, 0xff, 0xff, 0xff, //
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x05, 0x00, 0x00, 0x00, // 0x30
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x68, 0x65, 0x6c, 0x6c, // 0x40
0x6f, 0x00, 0x00, 0x00, //
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xaa, 0x00, 0x00, 0x00, // 0x50
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x02, 0x00, 0x00, 0x00, // 0x60
0x00, 0x00, 0x00, 0x00, //
0xbb, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, // 0x70
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
128: raw(
0x03, 0x00, 0x00, 0x00, // 0x00
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x02, 0x00, 0x00, 0x00, // 0x10
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, // 0x20
0xff, 0xff, 0xff, 0xff, //
0x03, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, // 0x30
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x03, 0x00, 0x00, 0x00, // 0x40
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, // 0x50
0xff, 0xff, 0xff, 0xff, //
0x05, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, // 0x60
0xff, 0xff, 0xff, 0xff, //
0x68, 0x65, 0x6c, 0x6c, //
0x6f, 0x00, 0x00, 0x00, //
0xaa, 0x00, 0x00, 0x00, // 0x70
0x00, 0x00, 0x00, 0x00, //
0xbb, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("StringUnionStructWrapperResponse") {
value = StringUnionStructWrapperResponse {
header: TransactionHeader {
tx_id: 0,
flags: [1, 0, 0],
magic_number: 1,
ordinal: 0x32a0322500000000,
},
body: StringUnionStructWrapper {
sus: StringUnionStruct {
u: StringBoolUnion {
s: "hello",
},
nullable_u: StringBoolUnion {
b: true,
},
},
},
},
bytes = {
old = [
80: raw(
0x00, 0x00, 0x00, 0x00, // 0x00
0x01, 0x00, 0x00, 0x01, //
0x00, 0x00, 0x00, 0x00, //
0x25, 0x32, 0xa0, 0x32, //
0x00, 0x00, 0x00, 0x00, // 0x10
0x00, 0x00, 0x00, 0x00, //
0x05, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, // 0x20
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x68, 0x65, 0x6c, 0x6c, // 0x30
0x6f, 0x00, 0x00, 0x00, //
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x01, 0x00, 0x00, 0x00, // 0x40
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
96: raw(
0x00, 0x00, 0x00, 0x00, // 0x00
0x01, 0x00, 0x00, 0x01, //
0x00, 0x00, 0x00, 0x00, //
0x25, 0x32, 0xa0, 0x32, //
0x01, 0x00, 0x00, 0x00, // 0x10
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, // 0x20
0xff, 0xff, 0xff, 0xff, //
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, // 0x30
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x05, 0x00, 0x00, 0x00, // 0x40
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x68, 0x65, 0x6c, 0x6c, // 0x50
0x6f, 0x00, 0x00, 0x00, //
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("RegressionNoUnionLauncherCreateComponentRequest") {
value = CreateComponentRequest {
launch_info: LaunchInfo {
url: "fuchsia-pkg://fuchsia.com/fidl_compatibility_test_server_rust_write_xunion#meta/fidl_compatibility_test_server_rust_write_xunion.cmx",
// TODO(fxb/36441): Support handles in GIDL.
directory_request: 0xffffffff,
},
controller: 0xffffffff,
},
bytes = {
// old & v1 bytes are the same.
old = [
216: raw(
0x84, 0x00, 0x00, 0x00, // begin LaunchInfo: component_url (string size 0x84)
0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, // component_url (string present)
0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, // |vector<string>? arguments| size 0
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |vector<string>? arguments| absent
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |struct FileDescriptor? out| absent
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |struct FileDescriptor? err| absent
0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, // |handle<channel>?| directory_request present
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |struct FlatNamespace?| absent
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |struct ServiceList?| absent
0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, // |request<ComponentController>? controller| present
0x00, 0x00, 0x00, 0x00,
0x66, 0x75, 0x63, 0x68, // begin out-of-line of |component_url|
0x73, 0x69, 0x61, 0x2D,
0x70, 0x6B, 0x67, 0x3A,
0x2F, 0x2F, 0x66, 0x75,
0x63, 0x68, 0x73, 0x69,
0x61, 0x2E, 0x63, 0x6F,
0x6D, 0x2F, 0x66, 0x69,
0x64, 0x6C, 0x5F, 0x63,
0x6F, 0x6D, 0x70, 0x61,
0x74, 0x69, 0x62, 0x69,
0x6C, 0x69, 0x74, 0x79,
0x5F, 0x74, 0x65, 0x73,
0x74, 0x5F, 0x73, 0x65,
0x72, 0x76, 0x65, 0x72,
0x5F, 0x72, 0x75, 0x73,
0x74, 0x5F, 0x77, 0x72,
0x69, 0x74, 0x65, 0x5F,
0x78, 0x75, 0x6E, 0x69,
0x6F, 0x6E, 0x23, 0x6D,
0x65, 0x74, 0x61, 0x2F,
0x66, 0x69, 0x64, 0x6C,
0x5F, 0x63, 0x6F, 0x6D,
0x70, 0x61, 0x74, 0x69,
0x62, 0x69, 0x6C, 0x69,
0x74, 0x79, 0x5F, 0x74,
0x65, 0x73, 0x74, 0x5F,
0x73, 0x65, 0x72, 0x76,
0x65, 0x72, 0x5F, 0x72,
0x75, 0x73, 0x74, 0x5F,
0x77, 0x72, 0x69, 0x74,
0x65, 0x5F, 0x78, 0x75,
0x6E, 0x69, 0x6F, 0x6E,
0x2E, 0x63, 0x6D, 0x78,
0x00, 0x00, 0x00, 0x00,
),
],
v1 = [
216: raw(
0x84, 0x00, 0x00, 0x00, // begin LaunchInfo: component_url (string size 0x84)
0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, // component_url (string present)
0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, // |vector<string>? arguments| size 0
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |vector<string>? arguments| absent
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |struct FileDescriptor? out| absent
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |struct FileDescriptor? err| absent
0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, // |handle<channel>?| directory_request present
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |struct FlatNamespace?| absent
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, // |struct ServiceList?| absent
0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, // |request<ComponentController>? controller| present
0x00, 0x00, 0x00, 0x00,
0x66, 0x75, 0x63, 0x68, // begin out-of-line of |component_url|
0x73, 0x69, 0x61, 0x2D,
0x70, 0x6B, 0x67, 0x3A,
0x2F, 0x2F, 0x66, 0x75,
0x63, 0x68, 0x73, 0x69,
0x61, 0x2E, 0x63, 0x6F,
0x6D, 0x2F, 0x66, 0x69,
0x64, 0x6C, 0x5F, 0x63,
0x6F, 0x6D, 0x70, 0x61,
0x74, 0x69, 0x62, 0x69,
0x6C, 0x69, 0x74, 0x79,
0x5F, 0x74, 0x65, 0x73,
0x74, 0x5F, 0x73, 0x65,
0x72, 0x76, 0x65, 0x72,
0x5F, 0x72, 0x75, 0x73,
0x74, 0x5F, 0x77, 0x72,
0x69, 0x74, 0x65, 0x5F,
0x78, 0x75, 0x6E, 0x69,
0x6F, 0x6E, 0x23, 0x6D,
0x65, 0x74, 0x61, 0x2F,
0x66, 0x69, 0x64, 0x6C,
0x5F, 0x63, 0x6F, 0x6D,
0x70, 0x61, 0x74, 0x69,
0x62, 0x69, 0x6C, 0x69,
0x74, 0x79, 0x5F, 0x74,
0x65, 0x73, 0x74, 0x5F,
0x73, 0x65, 0x72, 0x76,
0x65, 0x72, 0x5F, 0x72,
0x75, 0x73, 0x74, 0x5F,
0x77, 0x72, 0x69, 0x74,
0x65, 0x5F, 0x78, 0x75,
0x6E, 0x69, 0x6F, 0x6E,
0x2E, 0x63, 0x6D, 0x78,
0x00, 0x00, 0x00, 0x00,
),
],
},
}
success("CompatTable") {
value = CompatTable {
value: CompatTableValue {
union_member: CompatUnion { b: true },
array_member: [0x5129679d, 0x9491b48e, 0x93d21b51],
table_member: CompatTableString { s: "AB" },
xunion_member: CompatXUnion { s: "CD" },
},
empty: "",
},
bytes = {
old = [
240: raw(
// 0: table header (in AllTypeTable)
0x04, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 16: empty string (in AllTypeTable)
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 32: env1 header
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 48: env2 header
0x10, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 64: env3 header
0x38, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 80: env4 header
0x30, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 96: env1.data, union
0x01, 0x00, 0x00, 0x00, // tag
0x00, 0x00, 0x00, 0x00, // padding
0x01, 0x00, 0x00, 0x00, // data (16 bytes due to string header)
0x00, 0x00, 0x00, 0x00, // (cont.)
0x00, 0x00, 0x00, 0x00, // (cont.)
0x00, 0x00, 0x00, 0x00, // (cont.)
// 120: env2.data, array[3] of uint32
0x9d, 0x67, 0x29, 0x51, //
0x8e, 0xb4, 0x91, 0x94, //
0x51, 0x1b, 0xd2, 0x93, //
0x00, 0x00, 0x00, 0x00, //
// 136: env3.data, table header
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 152: env3.data.table env1
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 168: string header in table of env3.data
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 184: string data in table of env3.data (2 chars)
0x41, 0x42, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 192: env4.data, xunion
0xa8, 0xef, 0xf8, 0x5a, // hashed ordinal
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 216: string header (xunion.data)
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 232: string.data (xunion.data cont.)
0x43, 0x44, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
248: raw(
// 0: table header (in AllTypeTable)
0x04, 0x00, 0x00, 0x00, // vector num elements
0x00, 0x00, 0x00, 0x00, // (cont.)
0xff, 0xff, 0xff, 0xff, // vector presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 16: empty string (in AllTypeTable)
0x00, 0x00, 0x00, 0x00, // vector num elemetns
0x00, 0x00, 0x00, 0x00, // (cont.)
0xff, 0xff, 0xff, 0xff, // vector presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 32: env1 header
0x20, 0x00, 0x00, 0x00, // envelope num bytes
0x00, 0x00, 0x00, 0x00, // envelope num handles
0xff, 0xff, 0xff, 0xff, // envelope presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 48: env2 header
0x10, 0x00, 0x00, 0x00, // envelope num bytes
0x00, 0x00, 0x00, 0x00, // envelope num handles
0xff, 0xff, 0xff, 0xff, // envelope presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 64: env3 header
0x38, 0x00, 0x00, 0x00, // envelope num bytes
0x00, 0x00, 0x00, 0x00, // envelope num handles
0xff, 0xff, 0xff, 0xff, // envelope presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 80: env4 header
0x30, 0x00, 0x00, 0x00, // envelope num bytes
0x00, 0x00, 0x00, 0x00, // envelope num handles
0xff, 0xff, 0xff, 0xff, // envelope presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 96: env1.data, union-as-xunion header
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 120: union-as-xunion data
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 128: env2.data, array[3] of uint32
0x9d, 0x67, 0x29, 0x51, //
0x8e, 0xb4, 0x91, 0x94, //
0x51, 0x1b, 0xd2, 0x93, //
0x00, 0x00, 0x00, 0x00, //
// 144: env3.data, table header
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 160: env3.data.table env1
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 176: string header in table of env3.data
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 192: string data in table of env3.data (2 chars)
0x41, 0x42, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 200: env4.data, xunion
0xa8, 0xef, 0xf8, 0x5a, // hashed ordinal
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 224: string header (xunion.data)
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 240: string.data (xunion.data cont.)
0x43, 0x44, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("CompatTableWrongXUnionOrdinal") {
// TODO(fxb/8047): Enable this after more bindings support arbitrary ordinals in xunions.
bindings_allowlist = [transformer],
value = CompatTable {
value: CompatTableValue {
union_member: CompatUnion { b: true },
array_member: [0x5129679d, 0x9491b48e, 0x93d21b51],
table_member: CompatTableString { s: "AB" },
xunion_member: CompatXUnion { 0x67453412: "CD" },
},
empty: "",
},
bytes = {
old = [
240: raw(
// 0: table header (in AllTypeTable)
0x04, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 16: empty string (in AllTypeTable)
0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 32: env1 header
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 48: env2 header
0x10, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 64: env3 header
0x38, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 80: env4 header
0x30, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 96: env1.data, union
0x01, 0x00, 0x00, 0x00, // tag
0x00, 0x00, 0x00, 0x00, // padding
0x01, 0x00, 0x00, 0x00, // data (16 bytes due to string header)
0x00, 0x00, 0x00, 0x00, // (cont.)
0x00, 0x00, 0x00, 0x00, // (cont.)
0x00, 0x00, 0x00, 0x00, // (cont.)
// 120: env2.data, array[3] of uint32
0x9d, 0x67, 0x29, 0x51, //
0x8e, 0xb4, 0x91, 0x94, //
0x51, 0x1b, 0xd2, 0x93, //
0x00, 0x00, 0x00, 0x00, //
// 136: env3.data, table header
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 152: env3.data.table env1
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 168: string header in table of env3.data
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 184: string data in table of env3.data (2 chars)
0xd5, 0x93, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 192: env4.data, xunion
0x12, 0x34, 0x45, 0x67, // wrong hashed ordinal, i.e. unknown
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 216: string header (xunion.data)
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 232: string.data (xunion.data cont.)
0xcd, 0x94, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
248: raw(
// 0: table header (in AllTypeTable)
0x04, 0x00, 0x00, 0x00, // vector num elements
0x00, 0x00, 0x00, 0x00, // (cont.)
0xff, 0xff, 0xff, 0xff, // vector presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 16: empty string (in AllTypeTable)
0x00, 0x00, 0x00, 0x00, // vector num elemetns
0x00, 0x00, 0x00, 0x00, // (cont.)
0xff, 0xff, 0xff, 0xff, // vector presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 32: env1 header
0x20, 0x00, 0x00, 0x00, // envelope num bytes
0x00, 0x00, 0x00, 0x00, // envelope num handles
0xff, 0xff, 0xff, 0xff, // envelope presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 48: env2 header
0x10, 0x00, 0x00, 0x00, // envelope num bytes
0x00, 0x00, 0x00, 0x00, // envelope num handles
0xff, 0xff, 0xff, 0xff, // envelope presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 64: env3 header
0x38, 0x00, 0x00, 0x00, // envelope num bytes
0x00, 0x00, 0x00, 0x00, // envelope num handles
0xff, 0xff, 0xff, 0xff, // envelope presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 80: env4 header
0x30, 0x00, 0x00, 0x00, // envelope num bytes
0x00, 0x00, 0x00, 0x00, // envelope num handles
0xff, 0xff, 0xff, 0xff, // envelope presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 96: env1.data, union-as-xunion header
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0x08, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 120: union-as-xunion data
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 128: env2.data, array[3] of uint32
0x9d, 0x67, 0x29, 0x51, //
0x8e, 0xb4, 0x91, 0x94, //
0x51, 0x1b, 0xd2, 0x93, //
0x00, 0x00, 0x00, 0x00, //
// 144: env3.data, table header
0x01, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 160: env3.data.table env1
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 176: string header in table of env3.data
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 192: string data in table of env3.data (2 chars)
0xd5, 0x93, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
// 200: env4.data, xunion
0x12, 0x34, 0x45, 0x67, // wrong hashed ordinal, i.e. unknown
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 224: string header (xunion.data)
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 240: string.data (xunion.data cont.)
0xcd, 0x94, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("MixedFields") {
value = MixedFieldsMessage {
header: TransactionHeader {
tx_id: 0xf3f2f1f0,
flags: [0xf4, 0xf5, 0xf6],
magic_number: 0xf7,
ordinal: 0xfffefdfcfbfaf9f8,
},
body: MixedFieldsBody {
before: 0x04030201,
first_union: UnionSize8Align4 {
variant: 0x0c0b0a09,
},
middle_start: 0x0b0a,
middle_end: 0x0102030405060708,
second_union: UnionSize8Align4 {
variant: 0xc0b0a090,
},
after: 0x08070605,
},
},
bytes = {
old = [
56: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x01, 0x02, 0x03, 0x04, // before
0x02, 0x00, 0x00, 0x00, // UnionSize8Align4.tag
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Align4.data, i.e. Sandwich1.the_union.data
0x0a, 0x0b, 0x00, 0x00, // middle_start
0x08, 0x07, 0x06, 0x05, // middle_end
0x04, 0x03, 0x02, 0x01, // middle_end
0x02, 0x00, 0x00, 0x00, // UnionSize8Align4.tag
0x90, 0xa0, 0xb0, 0xc0, // UnionSize8Align4.data, i.e. Sandwich1.the_union.data
0x05, 0x06, 0x07, 0x08, // after
0x00, 0x00, 0x00, 0x00, // after (padding)
),
],
v1 = [
112: raw(
0xf0, 0xf1, 0xf2, 0xf3, // Fake transaction header
0xf4, 0xf5, 0xf6, 0xf7, // [cont.]
0xf8, 0xf9, 0xfa, 0xfb, // [cont.]
0xfc, 0xfd, 0xfe, 0xff, // [cont.]
0x01, 0x02, 0x03, 0x04, // before
0x00, 0x00, 0x00, 0x00, // before (padding)
0x03, 0x00, 0x00, 0x00, // UnionSize8Align4.tag
0x00, 0x00, 0x00, 0x00, // UnionSize8Align4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize8Align4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Align4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Align4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize8Align4.presence [cont.]
0x0a, 0x0b, 0x00, 0x00, // middle_start
0x00, 0x00, 0x00, 0x00, // middle_start (padding)
0x08, 0x07, 0x06, 0x05, // middle_end
0x04, 0x03, 0x02, 0x01, // middle_end
0x03, 0x00, 0x00, 0x00, // UnionSize8Align4.tag
0x00, 0x00, 0x00, 0x00, // UnionSize8Align4.padding
0x08, 0x00, 0x00, 0x00, // UnionSize8Align4.env.num_bytes
0x00, 0x00, 0x00, 0x00, // UnionSize8Align4.env.num_handle
0xff, 0xff, 0xff, 0xff, // UnionSize8Align4.env.presence
0xff, 0xff, 0xff, 0xff, // UnionSize8Align4.presence [cont.]
0x05, 0x06, 0x07, 0x08, // after
0x00, 0x00, 0x00, 0x00, // after (padding)
0x09, 0x0a, 0x0b, 0x0c, // UnionSize8Align4.data, i.e. Sandwich1.the_union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Align4.data (padding)
0x90, 0xa0, 0xb0, 0xc0, // UnionSize8Align4.data, i.e. Sandwich1.the_union.data
0x00, 0x00, 0x00, 0x00, // UnionSize8Align4.data (padding)
),
],
},
}
success("TableWithXUnion") {
value = StructOfTableWithXUnion {
value: TableWithXUnion {
member: CompatXUnion { s: "AB" },
},
},
bytes = {
// old & v1 bytes are the same.
old = [
80: raw(
// 0: table header
0x01, 0x00, 0x00, 0x00, // vector num elements
0x00, 0x00, 0x00, 0x00, // (cont.)
0xff, 0xff, 0xff, 0xff, // vector presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 16: env1
0x30, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 32: env1.data, xunion header
0xa8, 0xef, 0xf8, 0x5a, // hashed ordinal
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 56: xunion data
0x02, 0x00, 0x00, 0x00, // string size 2
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x41, 0x42, 0x00, 0x00, // string data
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
80: raw(
// 0: table header
0x01, 0x00, 0x00, 0x00, // vector num elements
0x00, 0x00, 0x00, 0x00, // (cont.)
0xff, 0xff, 0xff, 0xff, // vector presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 16: env1
0x30, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 32: env1.data, xunion header
0xa8, 0xef, 0xf8, 0x5a, // hashed ordinal
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 56: xunion data
0x02, 0x00, 0x00, 0x00, // string size 2
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x41, 0x42, 0x00, 0x00, // string data
0x00, 0x00, 0x00, 0x00, //
),
],
},
}
success("TableWithXUnionWrongXUnionOrdinal") {
// TODO(fxb/8047): Enable this after more bindings support arbitrary ordinals in xunions.
bindings_allowlist = [transformer],
value = StructOfTableWithXUnion {
value: TableWithXUnion {
member: CompatXUnion {
0x67453412: "AB",
},
},
},
bytes = {
// old & v1 bytes are the same.
old = [
80: raw(
// 0: table header
0x01, 0x00, 0x00, 0x00, // vector num elements
0x00, 0x00, 0x00, 0x00, // (cont.)
0xff, 0xff, 0xff, 0xff, // vector presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 16: env1
0x30, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 32: env1.data, xunion header
0x12, 0x34, 0x45, 0x67, // wrong hashed ordinal, i.e. unknown
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 56: xunion data
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x41, 0x42, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
v1 = [
80: raw(
// 0: table header
0x01, 0x00, 0x00, 0x00, // vector num elements
0x00, 0x00, 0x00, 0x00, // (cont.)
0xff, 0xff, 0xff, 0xff, // vector presence
0xff, 0xff, 0xff, 0xff, // (cont.)
// 16: env1
0x30, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 32: env1.data, xunion header
0x12, 0x34, 0x45, 0x67, // wrong hashed ordinal, i.e. unknown
0x00, 0x00, 0x00, 0x00, //
0x18, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
// 56: xunion data
0x02, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
0xff, 0xff, 0xff, 0xff, //
0xff, 0xff, 0xff, 0xff, //
0x41, 0x42, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, //
),
],
},
}