| # 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. |
| |
| -- Test `.emb` for the `bits` construct. |
| |
| [$default byte_order: "LittleEndian"] |
| [(cpp) namespace: "emboss::test"] |
| |
| |
| bits OneByte: |
| 7 [+1] Flag high_bit |
| 6 [+1] Flag less_high_bit |
| 2 [+4] UInt mid_nibble |
| 1 [+1] Flag less_low_bit |
| 0 [+1] Flag low_bit |
| |
| |
| bits FourByte: |
| bits TwoByteWithGaps: |
| 15 [+1] Flag high_bit |
| 6 [+4] UInt mid_nibble |
| 0 [+1] Flag low_bit |
| |
| 28 [+4] UInt high_nibble |
| 20 [+8] OneByte one_byte |
| 4 [+16] TwoByteWithGaps two_byte |
| 0 [+4] UInt raw_low_nibble |
| # Check that the [requires] attribute works on bits fields just like it does |
| # on struct fields. |
| [requires: 1 <= this <= 15] |
| let low_nibble = raw_low_nibble + 100 |
| |
| |
| bits ArrayInBits: |
| 15 [+1] Flag lone_flag |
| 0 [+12] Flag[] flags |
| |
| |
| struct ArrayInBitsInStruct: |
| 0 [+2] ArrayInBits array_in_bits |
| |
| |
| struct StructOfBits: |
| 0 [+1] OneByte one_byte |
| 1 [+2] FourByte.TwoByteWithGaps two_byte |
| 3 [+4] FourByte four_byte |
| one_byte.mid_nibble [+1] UInt located_byte |
| |
| |
| struct BitArray: |
| 0 [+8] OneByte[8] one_byte |