xref: /aosp_15_r20/external/emboss/testdata/condition.emb (revision 99e0aae7469b87d12f0ad23e61142c2d74c1ef70)
1*99e0aae7SDavid Rees# Copyright 2019 Google LLC
2*99e0aae7SDavid Rees#
3*99e0aae7SDavid Rees# Licensed under the Apache License, Version 2.0 (the "License");
4*99e0aae7SDavid Rees# you may not use this file except in compliance with the License.
5*99e0aae7SDavid Rees# You may obtain a copy of the License at
6*99e0aae7SDavid Rees#
7*99e0aae7SDavid Rees#     https://www.apache.org/licenses/LICENSE-2.0
8*99e0aae7SDavid Rees#
9*99e0aae7SDavid Rees# Unless required by applicable law or agreed to in writing, software
10*99e0aae7SDavid Rees# distributed under the License is distributed on an "AS IS" BASIS,
11*99e0aae7SDavid Rees# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*99e0aae7SDavid Rees# See the License for the specific language governing permissions and
13*99e0aae7SDavid Rees# limitations under the License.
14*99e0aae7SDavid Rees
15*99e0aae7SDavid Rees[$default byte_order: "LittleEndian"]
16*99e0aae7SDavid Rees[(cpp) namespace: "emboss::test"]
17*99e0aae7SDavid Rees
18*99e0aae7SDavid Rees
19*99e0aae7SDavid Reesstruct BasicConditional:
20*99e0aae7SDavid Rees  0 [+1]    UInt  x
21*99e0aae7SDavid Rees  if x == 0:
22*99e0aae7SDavid Rees    1 [+1]  UInt  xc
23*99e0aae7SDavid Rees
24*99e0aae7SDavid Rees
25*99e0aae7SDavid Reesstruct NegativeConditional:
26*99e0aae7SDavid Rees  0 [+1]    UInt  x
27*99e0aae7SDavid Rees  if x != 0:
28*99e0aae7SDavid Rees    1 [+1]  UInt  xc
29*99e0aae7SDavid Rees
30*99e0aae7SDavid Rees
31*99e0aae7SDavid Reesstruct ConditionalAndUnconditionalOverlappingFinalField:
32*99e0aae7SDavid Rees  0 [+1]    UInt  x
33*99e0aae7SDavid Rees  if x == 0:
34*99e0aae7SDavid Rees    1 [+1]  UInt  xc
35*99e0aae7SDavid Rees
36*99e0aae7SDavid Rees  1 [+1]    UInt  z
37*99e0aae7SDavid Rees
38*99e0aae7SDavid Rees
39*99e0aae7SDavid Reesstruct ConditionalBasicConditionalFieldFirst:
40*99e0aae7SDavid Rees  if x == 0:
41*99e0aae7SDavid Rees    0 [+1]  UInt  xc
42*99e0aae7SDavid Rees
43*99e0aae7SDavid Rees  1 [+1]    UInt  x
44*99e0aae7SDavid Rees
45*99e0aae7SDavid Rees
46*99e0aae7SDavid Reesstruct ConditionalAndDynamicLocation:
47*99e0aae7SDavid Rees  0 [+1]    UInt  x
48*99e0aae7SDavid Rees  2 [+1]    UInt  y
49*99e0aae7SDavid Rees  if x == 0:
50*99e0aae7SDavid Rees    y [+1]  UInt  xc
51*99e0aae7SDavid Rees
52*99e0aae7SDavid Rees
53*99e0aae7SDavid Reesstruct ConditionUsesMinInt:
54*99e0aae7SDavid Rees  0 [+1]    Int  x
55*99e0aae7SDavid Rees  if x - 0x7fff_ffff_ffff_ff80 == -0x8000_0000_0000_0000:
56*99e0aae7SDavid Rees    1 [+1]  UInt  xc
57*99e0aae7SDavid Rees
58*99e0aae7SDavid Rees
59*99e0aae7SDavid Reesstruct NestedConditional:
60*99e0aae7SDavid Rees  0 [+1]    UInt  x
61*99e0aae7SDavid Rees  if x == 0:
62*99e0aae7SDavid Rees    1 [+1]  UInt  xc
63*99e0aae7SDavid Rees
64*99e0aae7SDavid Rees  if xc == 0:
65*99e0aae7SDavid Rees    2 [+1]  UInt  xcc
66*99e0aae7SDavid Rees
67*99e0aae7SDavid Rees
68*99e0aae7SDavid Reesstruct CorrectNestedConditional:
69*99e0aae7SDavid Rees  0 [+1]    UInt  x
70*99e0aae7SDavid Rees  if x == 0:
71*99e0aae7SDavid Rees    1 [+1]  UInt  xc
72*99e0aae7SDavid Rees
73*99e0aae7SDavid Rees  if x == 0 && xc == 0:
74*99e0aae7SDavid Rees    2 [+1]  UInt  xcc
75*99e0aae7SDavid Rees
76*99e0aae7SDavid Rees
77*99e0aae7SDavid Reesstruct AlwaysFalseCondition:
78*99e0aae7SDavid Rees  0 [+1]    UInt  x
79*99e0aae7SDavid Rees  if false:
80*99e0aae7SDavid Rees    1 [+1]  UInt  xc
81*99e0aae7SDavid Rees
82*99e0aae7SDavid Rees
83*99e0aae7SDavid Reesstruct OnlyAlwaysFalseCondition:
84*99e0aae7SDavid Rees  if false:
85*99e0aae7SDavid Rees    0 [+1]  UInt  xc
86*99e0aae7SDavid Rees
87*99e0aae7SDavid Rees
88*99e0aae7SDavid Reesstruct EmptyStruct:
89*99e0aae7SDavid Rees  -- Empty structure.
90*99e0aae7SDavid Rees
91*99e0aae7SDavid Rees
92*99e0aae7SDavid Reesstruct AlwaysFalseConditionDynamicSize:
93*99e0aae7SDavid Rees  0 [+1]    UInt  x
94*99e0aae7SDavid Rees  x [+1]    UInt  y
95*99e0aae7SDavid Rees  if false:
96*99e0aae7SDavid Rees    1 [+1]  UInt  xc
97*99e0aae7SDavid Rees
98*99e0aae7SDavid Rees
99*99e0aae7SDavid Reesstruct ConditionDoesNotContributeToSize:
100*99e0aae7SDavid Rees  0 [+1]    UInt  x
101*99e0aae7SDavid Rees  if x == 0:
102*99e0aae7SDavid Rees    1 [+1]  UInt  xc
103*99e0aae7SDavid Rees  2 [+1]    UInt  y
104*99e0aae7SDavid Rees
105*99e0aae7SDavid Rees
106*99e0aae7SDavid Reesenum OnOff:
107*99e0aae7SDavid Rees  OFF = 0
108*99e0aae7SDavid Rees  ON  = 1
109*99e0aae7SDavid Rees
110*99e0aae7SDavid Rees
111*99e0aae7SDavid Reesstruct EnumCondition:
112*99e0aae7SDavid Rees  0 [+1]    OnOff  x
113*99e0aae7SDavid Rees  if x == OnOff.ON:
114*99e0aae7SDavid Rees    1 [+1]  UInt   xc
115*99e0aae7SDavid Rees  if x > OnOff.OFF:
116*99e0aae7SDavid Rees    1 [+1]  UInt   xc2
117*99e0aae7SDavid Rees
118*99e0aae7SDavid Rees
119*99e0aae7SDavid Reesstruct NegativeEnumCondition:
120*99e0aae7SDavid Rees  0 [+1]    OnOff  x
121*99e0aae7SDavid Rees  if x != OnOff.ON:
122*99e0aae7SDavid Rees    1 [+1]  UInt   xc
123*99e0aae7SDavid Rees
124*99e0aae7SDavid Rees
125*99e0aae7SDavid Reesstruct LessThanCondition:
126*99e0aae7SDavid Rees  0 [+1]    UInt  x
127*99e0aae7SDavid Rees  if x < 5:
128*99e0aae7SDavid Rees    1 [+1]  UInt  xc
129*99e0aae7SDavid Rees
130*99e0aae7SDavid Rees
131*99e0aae7SDavid Reesstruct LessThanOrEqualCondition:
132*99e0aae7SDavid Rees  0 [+1]    UInt  x
133*99e0aae7SDavid Rees  if x <= 5:
134*99e0aae7SDavid Rees    1 [+1]  UInt  xc
135*99e0aae7SDavid Rees
136*99e0aae7SDavid Rees
137*99e0aae7SDavid Reesstruct GreaterThanOrEqualCondition:
138*99e0aae7SDavid Rees  0 [+1]    UInt  x
139*99e0aae7SDavid Rees  if x >= 5:
140*99e0aae7SDavid Rees    1 [+1]  UInt  xc
141*99e0aae7SDavid Rees
142*99e0aae7SDavid Rees
143*99e0aae7SDavid Reesstruct GreaterThanCondition:
144*99e0aae7SDavid Rees  0 [+1]    UInt  x
145*99e0aae7SDavid Rees  if x > 5:
146*99e0aae7SDavid Rees    1 [+1]  UInt  xc
147*99e0aae7SDavid Rees
148*99e0aae7SDavid Rees
149*99e0aae7SDavid Reesstruct RangeCondition:
150*99e0aae7SDavid Rees  0 [+1]    UInt  x
151*99e0aae7SDavid Rees  1 [+1]    UInt  y
152*99e0aae7SDavid Rees  if 5 < x <= y < 10:
153*99e0aae7SDavid Rees    2 [+1]  UInt  xc
154*99e0aae7SDavid Rees
155*99e0aae7SDavid Rees
156*99e0aae7SDavid Reesstruct ReverseRangeCondition:
157*99e0aae7SDavid Rees  0 [+1]    UInt  x
158*99e0aae7SDavid Rees  1 [+1]    UInt  y
159*99e0aae7SDavid Rees  if 10 > y >= x > 5:
160*99e0aae7SDavid Rees    2 [+1]  UInt  xc
161*99e0aae7SDavid Rees
162*99e0aae7SDavid Rees
163*99e0aae7SDavid Reesstruct AndCondition:
164*99e0aae7SDavid Rees  0 [+1]    UInt  x
165*99e0aae7SDavid Rees  1 [+1]    UInt  y
166*99e0aae7SDavid Rees  if x == 5 && y == 5:
167*99e0aae7SDavid Rees    2 [+1]  UInt  xc
168*99e0aae7SDavid Rees
169*99e0aae7SDavid Rees
170*99e0aae7SDavid Reesstruct OrCondition:
171*99e0aae7SDavid Rees  0 [+1]    UInt  x
172*99e0aae7SDavid Rees  1 [+1]    UInt  y
173*99e0aae7SDavid Rees  if x == 5 || y == 5:
174*99e0aae7SDavid Rees    2 [+1]  UInt  xc
175*99e0aae7SDavid Rees
176*99e0aae7SDavid Rees
177*99e0aae7SDavid Reesstruct ChoiceCondition:
178*99e0aae7SDavid Rees  0 [+1]    enum  field:
179*99e0aae7SDavid Rees    USE_X = 1
180*99e0aae7SDavid Rees    USE_Y = 2
181*99e0aae7SDavid Rees
182*99e0aae7SDavid Rees  1 [+1]    UInt  x
183*99e0aae7SDavid Rees  2 [+1]    UInt  y
184*99e0aae7SDavid Rees  if (field == Field.USE_X ? x : y) == 5:
185*99e0aae7SDavid Rees    3 [+1]  UInt  xyc
186*99e0aae7SDavid Rees
187*99e0aae7SDavid Rees
188*99e0aae7SDavid Reesstruct ContainsBits:
189*99e0aae7SDavid Rees  0 [+1]  bits:
190*99e0aae7SDavid Rees    7 [+1]  UInt  has_top
191*99e0aae7SDavid Rees    0 [+1]  UInt  has_bottom
192*99e0aae7SDavid Rees
193*99e0aae7SDavid Rees
194*99e0aae7SDavid Reesstruct ContainsContainsBits:
195*99e0aae7SDavid Rees  0 [+1]    ContainsBits  condition
196*99e0aae7SDavid Rees  # TODO(bolms): allow Flags to be used as booleans in conditions.
197*99e0aae7SDavid Rees  if condition.has_top == 1:
198*99e0aae7SDavid Rees    1 [+1]  UInt          top
199*99e0aae7SDavid Rees
200*99e0aae7SDavid Rees
201*99e0aae7SDavid Reesstruct ConditionalInline:
202*99e0aae7SDavid Rees  0 [+1]    UInt      payload_id
203*99e0aae7SDavid Rees
204*99e0aae7SDavid Rees  if payload_id == 0:
205*99e0aae7SDavid Rees    1 [+3]  struct  type_0:
206*99e0aae7SDavid Rees      0 [+1]  UInt  a
207*99e0aae7SDavid Rees      1 [+1]  UInt  b
208*99e0aae7SDavid Rees      2 [+1]  UInt  c
209*99e0aae7SDavid Rees
210*99e0aae7SDavid Rees  if payload_id == 1:
211*99e0aae7SDavid Rees    1 [+3]  struct  type_1:
212*99e0aae7SDavid Rees      0 [+1]  UInt  a
213*99e0aae7SDavid Rees      1 [+1]  UInt  b
214*99e0aae7SDavid Rees      2 [+1]  UInt  c
215*99e0aae7SDavid Rees
216*99e0aae7SDavid Rees
217*99e0aae7SDavid Reesstruct ConditionalAnonymous:
218*99e0aae7SDavid Rees  0 [+1]  UInt  x
219*99e0aae7SDavid Rees  if x > 10:
220*99e0aae7SDavid Rees    1 [+1]  bits:
221*99e0aae7SDavid Rees      0 [+1]  UInt  low
222*99e0aae7SDavid Rees      if low == 1:
223*99e0aae7SDavid Rees        3 [+2]  UInt  mid
224*99e0aae7SDavid Rees      7 [+1]  UInt  high
225*99e0aae7SDavid Rees
226*99e0aae7SDavid Rees
227*99e0aae7SDavid Reesstruct ConditionalOnFlag:
228*99e0aae7SDavid Rees  0 [+1]  bits:
229*99e0aae7SDavid Rees    0 [+1]  Flag  enabled
230*99e0aae7SDavid Rees  if enabled:
231*99e0aae7SDavid Rees    1 [+1]  UInt  value
232