blob: 42a964b3e661f56d60d0a0fa00a1c08919f65bce [file] [log] [blame] [edit]
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
[$default byte_order: "LittleEndian"]
[(cpp) namespace: "emboss::test"]
enum Product:
VERSION_1 = 0
VERSION_2 = 10
VERSION_X = 23
enum MessageId:
AXIS = 0
CONFIG = 1
struct MultiVersion(product: Product):
0 [+1] MessageId message_id
if message_id == MessageId.AXIS:
1 [+12] Axes(product == Product.VERSION_X ? 3 : 2) axes
if message_id == MessageId.CONFIG:
1 [+4] Config config
if product == Product.VERSION_X && message_id == MessageId.CONFIG:
1 [+8] ConfigVX() config_vx
struct Axes(axes: UInt:4):
0 [+axes*4] Axis(AxisType.GENERIC)[] values
if axes > 0:
0 [+4] Axis(AxisType.X_AXIS) x
if axes > 1:
4 [+4] Axis(AxisType.Y_AXIS) y
if axes > 2:
8 [+4] Axis(AxisType.Z_AXIS) z
let axis_count_plus_one = axes+1
struct AxisPair(axis_type_a_parameter: AxisType, axis_type_b_parameter: AxisType):
0 [+4] Axis(axis_type_a) axis_a
4 [+4] Axis(axis_type_b) axis_b
let axis_type_a = axis_type_a_parameter
let axis_type_b = axis_type_b_parameter
struct AxesEnvelope:
0 [+1] UInt:8 axis_count
1 [+axis_count*4] Axes(axis_count) axes
enum AxisType:
GENERIC = -1
X_AXIS = 1
Y_AXIS = 2
Z_AXIS = 3
struct Axis(axis_type_parameter: AxisType):
0 [+4] UInt:32 value
if axis_type == AxisType.X_AXIS:
0 [+4] UInt:32 x
if axis_type == AxisType.Y_AXIS:
0 [+4] UInt:32 y
if axis_type == AxisType.Z_AXIS:
0 [+4] UInt:32 z
let axis_type = axis_type_parameter
bits Config():
31 [+1] Flag power
struct ConfigVX:
0 [+4] bits:
31 [+1] Flag power
4 [+4] UInt gain
struct StructWithUnusedParameter(x: UInt:8):
0 [+1] UInt y
# StructContainingStructWithUnusedParameter is used to ensure that a struct is
# not Ok() if it does not have its parameters, even if it does not directly use
# those parameters.
struct StructContainingStructWithUnusedParameter:
0 [+1] StructWithUnusedParameter(x) swup
1 [+1] UInt x
struct BiasedValue(bias: UInt:8):
0 [+1] UInt raw_value
let value = raw_value+bias
struct VirtualFirstFieldWithParam(param: UInt:8):
# Regression test: virtual fields did not have `public:` annotations, causing
# them to pick up the `private:` annotation from the parameter accessor when
# they were first in the struct.
let value = x
0 [+1] UInt x
struct ConstVirtualFirstFieldWithParam(param: UInt:8):
# Regression test: see VirtualFirstFieldWithParam
let value = 10
0 [+1] UInt x
struct SizedArrayOfBiasedValues:
0 [+1] UInt element_count (ec)
1 [+1] UInt bias
2 [+ec] BiasedValue(bias)[] values