# 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"]


struct Message:
  0   [+1]    UInt         header_length (h)
  1   [+1]    UInt         message_length (m)
  2   [+h-2]  UInt:8[h-2]  padding
  h   [+m]    UInt:8[m]    message
  h+m [+4]    UInt         crc32


struct Image:
  0 [+1]         UInt                size
  1 [+3*5*size]  UInt:8[3][5][size]  pixels


struct TwoRegions:
  # Fields are listed in reverse order to exercise a specific part of
  # header_generator.py.
  3       [+1]              UInt                   b_end
  2       [+1]              UInt                   b_start
  1       [+1]              UInt                   a_size
  0       [+1]              UInt                   a_start
  a_start [+a_size]         UInt:8[a_size]         region_a
  b_start [+b_end-b_start]  UInt:8[b_end-b_start]  region_b


struct MultipliedSize:
  0 [+1]    UInt         width (w)
  1 [+1]    UInt         height (h)
  # Used to test that w*h is not performed with 8-bit arithmetic.
  2 [+w*h]  UInt:8[w*h]  data


struct NegativeTermsInSizes:
  0 [+1]        UInt             a
  1 [+1]        UInt             b
  2 [+1]        UInt             c
  # Used to test that the pruning logic for Size() doesn't miss anything.
  3 [+a-b-3]    UInt:8[a-b-3]    a_minus_b
  3 [+a-2*b-3]  UInt:8[a-2*b-3]  a_minus_2b
  3 [+a-b-c-3]  UInt:8[a-b-c-3]  a_minus_b_minus_c
  3 [+7-a]      UInt:8[7-a]      ten_minus_a
  3 [+a-2*c-3]  UInt:8[a-2*c-3]  a_minus_2c
  3 [+a-c-3]    UInt:8[a-c-3]    a_minus_c


struct NegativeTermInLocation:
  0 [+1]     UInt  a
  10-a [+1]  UInt  b


struct ChainedSize:
  0 [+1]  UInt  a
  a [+1]  UInt  b
  b [+1]  UInt  c
  c [+1]  UInt  d


struct FinalFieldOverlaps:
  0 [+1]  UInt  a
  1 [+4]  UInt  b
  3 [+2]  UInt  c


struct DynamicFinalFieldOverlaps:
  0   [+1]  UInt  a
  9   [+1]  UInt  b
  a   [+2]  UInt  c
  a+1 [+1]  UInt  d


struct DynamicFieldDependsOnLaterField:
  a+1 [+1]  UInt  b
  4   [+1]  UInt  a


struct DynamicFieldDoesNotAffectSize:
  0   [+1]  UInt  a
  a   [+1]  UInt  b
  255 [+1]  UInt  c
