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