xref: /aosp_15_r20/external/emboss/testdata/complex_structure.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-- Relatively complex structure intended for use in fuzz testing.
16*99e0aae7SDavid Rees--
17*99e0aae7SDavid Rees-- Note that field names are intentionally very short; this helps American
18*99e0aae7SDavid Rees-- Fuzzy Lop (go/afl) find new code paths more quickly.
19*99e0aae7SDavid Rees
20*99e0aae7SDavid Rees[$default byte_order: "LittleEndian"]
21*99e0aae7SDavid Rees[(cpp) namespace: "emboss_test"]
22*99e0aae7SDavid Rees
23*99e0aae7SDavid Rees
24*99e0aae7SDavid Reesbits RegisterLayout:
25*99e0aae7SDavid Rees  0 [+8]  Int   x
26*99e0aae7SDavid Rees  0 [+4]  UInt  l
27*99e0aae7SDavid Rees  4 [+4]  UInt  h
28*99e0aae7SDavid Rees
29*99e0aae7SDavid Rees
30*99e0aae7SDavid Reesstruct ArrayElement:
31*99e0aae7SDavid Rees  0 [+1]  RegisterLayout  a
32*99e0aae7SDavid Rees
33*99e0aae7SDavid Rees
34*99e0aae7SDavid Reesstruct Complex:
35*99e0aae7SDavid Rees  0 [+1]         UInt               s
36*99e0aae7SDavid Rees  1 [+8]         UInt               u
37*99e0aae7SDavid Rees  1 [+8]         Int                i
38*99e0aae7SDavid Rees  1 [+8]         Bcd                b
39*99e0aae7SDavid Rees  1 [+s*4]       ArrayElement[4][]  a
40*99e0aae7SDavid Rees  1 [+1]  bits:
41*99e0aae7SDavid Rees    0 [+8]       UInt               a0
42*99e0aae7SDavid Rees    7 [+1]       Flag               s0
43*99e0aae7SDavid Rees    0 [+4]       Int                l0
44*99e0aae7SDavid Rees    4 [+4]       Int                h0
45*99e0aae7SDavid Rees
46*99e0aae7SDavid Rees  2 [+1]         ArrayElement       e1
47*99e0aae7SDavid Rees  if a0 >= 0x80:
48*99e0aae7SDavid Rees    3 [+1]       ArrayElement       e2
49*99e0aae7SDavid Rees
50*99e0aae7SDavid Rees  if a0 < 0x80:
51*99e0aae7SDavid Rees    3 [+1]       Bcd                b2
52*99e0aae7SDavid Rees
53*99e0aae7SDavid Rees  if b2 > 25:
54*99e0aae7SDavid Rees    4 [+1]       Int                e3
55*99e0aae7SDavid Rees
56*99e0aae7SDavid Rees  if s >= 4 && (a0 >= 80 ? e3 >= 0x80 : b2 < 50):
57*99e0aae7SDavid Rees    5 [+1]       Int                e4
58*99e0aae7SDavid Rees
59*99e0aae7SDavid Rees  if s >= 5 && e4 > 0:
60*99e0aae7SDavid Rees    6 [+1]       Int                e5
61*99e0aae7SDavid Rees
62*99e0aae7SDavid Rees  if s < 2 || a0 < 4:
63*99e0aae7SDavid Rees    1 [+1]       Int                e0
64