xref: /aosp_15_r20/external/emboss/testdata/requires.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 RequiresIntegers:
20*99e0aae7SDavid Rees  [requires: zero_through_nine <= ten_through_twenty - 10]
21*99e0aae7SDavid Rees
22*99e0aae7SDavid Rees  0 [+1]  UInt  zero_through_nine   [requires: 0 <= this <= 9]
23*99e0aae7SDavid Rees
24*99e0aae7SDavid Rees  1 [+1]  Int   ten_through_twenty  [requires: 10 <= this <= 20]
25*99e0aae7SDavid Rees
26*99e0aae7SDavid Rees  2 [+1]  UInt  disjoint
27*99e0aae7SDavid Rees    [requires: 0 <= this <= 5 || 15 <= this <= 20]
28*99e0aae7SDavid Rees
29*99e0aae7SDavid Rees  let ztn_plus_ttt = zero_through_nine + ten_through_twenty
30*99e0aae7SDavid Rees    [requires: 10 <= this <= 19]
31*99e0aae7SDavid Rees
32*99e0aae7SDavid Rees  let alias_of_zero_through_nine = zero_through_nine
33*99e0aae7SDavid Rees    [requires: 2 <= this <= 7]
34*99e0aae7SDavid Rees
35*99e0aae7SDavid Rees  let zero_through_nine_plus_five = zero_through_nine + 5
36*99e0aae7SDavid Rees    [requires: 5 <= this <= 10]
37*99e0aae7SDavid Rees
38*99e0aae7SDavid Rees
39*99e0aae7SDavid Reesstruct RequiresBools:
40*99e0aae7SDavid Rees  [requires: a || b]
41*99e0aae7SDavid Rees
42*99e0aae7SDavid Rees  0 [+1]  bits:
43*99e0aae7SDavid Rees    0 [+1]  Flag  a
44*99e0aae7SDavid Rees    1 [+1]  Flag  b
45*99e0aae7SDavid Rees    2 [+1]  Flag  must_be_true
46*99e0aae7SDavid Rees      [requires: this]
47*99e0aae7SDavid Rees    3 [+1]  Flag  must_be_false
48*99e0aae7SDavid Rees      [requires: this == false]
49*99e0aae7SDavid Rees
50*99e0aae7SDavid Rees  let b_must_be_false = b == false
51*99e0aae7SDavid Rees    [requires: this]
52*99e0aae7SDavid Rees
53*99e0aae7SDavid Rees  let alias_of_a_must_be_true = a
54*99e0aae7SDavid Rees    [requires: this]
55*99e0aae7SDavid Rees
56*99e0aae7SDavid Rees
57*99e0aae7SDavid Reesstruct RequiresEnums:
58*99e0aae7SDavid Rees  [requires: a == Enum.EN0 || b == Enum.EN0]
59*99e0aae7SDavid Rees
60*99e0aae7SDavid Rees  enum Enum:
61*99e0aae7SDavid Rees    EN0 = 0
62*99e0aae7SDavid Rees    EN1 = 1
63*99e0aae7SDavid Rees    EN2 = 2
64*99e0aae7SDavid Rees    EN3 = 3
65*99e0aae7SDavid Rees
66*99e0aae7SDavid Rees  0 [+1]  Enum  a
67*99e0aae7SDavid Rees  1 [+1]  Enum  b
68*99e0aae7SDavid Rees  2 [+1]  Enum  c
69*99e0aae7SDavid Rees    [requires: this == Enum.EN0 || this == Enum.EN1]
70*99e0aae7SDavid Rees
71*99e0aae7SDavid Rees  let filtered_a = a == Enum.EN0 ? Enum.EN1 : a
72*99e0aae7SDavid Rees    [requires: this == Enum.EN1]
73*99e0aae7SDavid Rees
74*99e0aae7SDavid Rees  let alias_of_a = a
75*99e0aae7SDavid Rees    [requires: this == Enum.EN1]
76*99e0aae7SDavid Rees
77*99e0aae7SDavid Rees
78*99e0aae7SDavid Reesstruct RequiresWithOptionalFields:
79*99e0aae7SDavid Rees  [requires: a || b]
80*99e0aae7SDavid Rees  0 [+1]  bits:
81*99e0aae7SDavid Rees    0 [+1]  Flag  a
82*99e0aae7SDavid Rees    1 [+1]  Flag  b_exists
83*99e0aae7SDavid Rees    if b_exists:
84*99e0aae7SDavid Rees      2 [+1]  Flag b
85*99e0aae7SDavid Rees    if b_exists:
86*99e0aae7SDavid Rees      2 [+1]  Flag b_true
87*99e0aae7SDavid Rees        [requires: this]
88*99e0aae7SDavid Rees
89*99e0aae7SDavid Rees
90*99e0aae7SDavid Reesstruct RequiresInArrayElements:
91*99e0aae7SDavid Rees  struct Element:
92*99e0aae7SDavid Rees    0 [+1]  UInt:8  x  [requires: 0 <= this <= 10]
93*99e0aae7SDavid Rees
94*99e0aae7SDavid Rees  0 [+4]  Element[]  xs
95