# 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