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