| /* | |
| * Licensed to the Apache Software Foundation (ASF) under one | |
| * or more contributor license agreements. See the NOTICE file | |
| * distributed with this work for additional information | |
| * regarding copyright ownership. The ASF licenses this file | |
| * to you 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. | |
| */ | |
| //////////////////////////////////////////////////////////////// | |
| // Simple Type | |
| //////////////////////////////////////////////////////////////// | |
| //Showing below an example comment including which languages it is supported in and ascii doc reference. | |
| // Bit Field Test Single | |
| // Java +, C +, Go + | |
| // tag::SimpleBitTypeTest[] | |
| [type SimpleBitTypeTest | |
| [simple bit bitField] | |
| ] | |
| // end::SimpleBitTypeTest[] | |
| [type FieldTypeTest | |
| [simple uint 8 simpleField] | |
| //Abstract fields can only be used within discriminated base types. | |
| //[abstract unit 8 abstractField] | |
| [array uint 8 arrayField count '5'] | |
| //TODO: Checksums fields are not supported in C | |
| //[checksum uint 8 'checksumField' '100'] | |
| [const uint 8 constField 5] | |
| // Discriminated Field can't be used in simple type | |
| //[discriminator uint 8 discriminatorField] | |
| [enum EnumType enumField lalala] | |
| [implicit uint 8 implicitField 'simpleField'] | |
| [optional uint 8 optionalField 'simpleField == 5'] | |
| [padding uint 8 paddingField '0x00' 'simpleField'] | |
| [reserved uint 8 '0x00'] | |
| // TypeSwitch field can't be used in non discriminatedTypes | |
| //[typeSwitch 'simpleField' ] | |
| ] | |
| // If a type has an unknown field, the entire serializer is reduced to firing an exception | |
| [type FieldTypeTestWithUnknownField | |
| [simple uint 8 simpleField] | |
| //Abstract fields can only be used within discriminated base types. | |
| //[abstract unit 8 abstractField] | |
| [array uint 8 arrayField count '5'] | |
| //TODO: Checksums fields are not supported in C | |
| //[checksum uint 8 'checksumField' '100'] | |
| [const uint 8 constField 5] | |
| // Discriminated Field can't be used in simple type | |
| //[discriminator uint 8 discriminatorField] | |
| [enum EnumType enumField lalala] | |
| [implicit uint 8 implicitField 'simpleField'] | |
| [optional uint 8 optionalField 'simpleField == 5'] | |
| [padding uint 8 paddingField '0x00' 'simpleField'] | |
| [reserved uint 8 '0x00'] | |
| [unknown uint 16] | |
| // TypeSwitch field can't be used in non discriminatedTypes | |
| //[typeSwitch 'simpleField' ] | |
| ] | |
| /* | |
| * TODO: doesn't compile in java | |
| [type UFloatTypeTest | |
| [simple ufloat 32 ufloatField] | |
| [simple ufloat 64 udoubleField] | |
| ] | |
| */ | |
| /* | |
| * TODO: doesn't compile in java | |
| [type TimeTypeTest | |
| [simple time 8 timeField] | |
| [simple date 8 dateField] | |
| [simple dateTime 8 dateTimeField] | |
| ] | |
| */ | |
| [type SimpleTypeTest | |
| [simple bit bitField] | |
| [simple byte byteField] | |
| [simple int 8 intField] | |
| [simple uint 8 uintField] | |
| [simple float 32 floatField] | |
| [simple float 64 doubleField] | |
| [simple string 8 stringField encoding='UTF-8'] | |
| ] | |
| [type AbstractTypeTest | |
| //Abstract fields can only be used within discriminated base types. | |
| [simple uint 8 simpleField] | |
| [abstract bit abstractBitField] | |
| [abstract int 8 abstractIntField] | |
| [abstract uint 8 abstractUintField] | |
| [abstract float 32 abstractFloatField] | |
| [abstract float 64 abstractDoubleField] | |
| [abstract string 8 abstractStringField encoding='UTF-8'] | |
| [typeSwitch simpleField | |
| ['0' AbstractedType | |
| [simple bit abstractBitField] | |
| [simple int 8 abstractIntField] | |
| [simple uint 8 abstractUintField] | |
| [simple float 32 abstractFloatField] | |
| [simple float 64 abstractDoubleField] | |
| [simple string 8 abstractStringField encoding='UTF-8'] | |
| ] | |
| ] | |
| ] | |
| [type AbstractTypeTest | |
| //Abstract fields can only be used within discriminated base types. | |
| [simple uint 8 simpleField] | |
| [abstract bit abstractBitField] | |
| [abstract int 8 abstractIntField] | |
| [abstract uint 8 abstractUintField] | |
| [abstract float 32 abstractFloatField] | |
| [abstract float 64 abstractDoubleField] | |
| [abstract string 8 abstractStringField encoding='UTF-8'] | |
| [typeSwitch simpleField | |
| ['0' AbstractedType | |
| //Abstract fields need to be overriden in child | |
| [simple bit abstractBitField] | |
| [simple int 8 abstractIntField] | |
| [simple uint 8 abstractUintField] | |
| [simple float 32 abstractFloatField] | |
| [simple float 64 abstractDoubleField] | |
| [simple string 8 abstractStringField encoding='UTF-8'] | |
| ] | |
| ] | |
| ] | |
| [type ArrayTypeTest | |
| [array bit bitField count '5'] | |
| [array int 8 intField count '5'] | |
| [array uint 8 uintField count '5'] | |
| [array float 32 floatField count '5'] | |
| [array float 64 doubleField count '5'] | |
| [array string 8 stringField count '5' encoding='UTF-8'] | |
| ] | |
| //TODO: Checksums fields are not supported in C | |
| //[type CheckSumTypeTest | |
| //Bit field cannot be used for a checksum | |
| //[checksum bit 'bitField' true] | |
| //[checksum int 8 'intField' '100'] | |
| //[checksum uint 8 'uintField' '100'] | |
| //Float fields cannot be used as checksums | |
| //[checksum float 32 'floatField' '100.0f'] | |
| //[checksum float 64 'doubleField' '100.0'] | |
| //String field cannot be used as a checksum | |
| //[checksum vstring '11 * 8' 'stringField' '"HELLO TODDY"' encoding='UTF-8'] | |
| //] | |
| [type ConstTypeTest | |
| [const bit bitField true] | |
| [const int 8 intField 100] | |
| [const uint 8 uintField 100] | |
| [const float 32 floatField 100.0] | |
| [const float 64 doubleField 100.0] | |
| [const string 8 stringField "HELLO TODDY" encoding='UTF-8'] | |
| ] | |
| [type EnumTypeTest | |
| [enum EnumType enumField lalala] | |
| ] | |
| [type PascalStringTypeTest | |
| [simple int 8 stringLength] | |
| [simple vstring 'stringLength' stringField encoding='UTF-8'] | |
| ] | |
| [type ImplicitPascalStringTypeTest | |
| [implicit int 8 stringLength 'stringField.length'] | |
| [simple vstring 'stringLength' stringField encoding='UTF-8'] | |
| ] | |
| [type ImplicitTypeTest | |
| //Implicit types have the requirement that the expression is of a similar type to the field | |
| //TODO: i.e Integers can't be cast to Booleans | |
| [simple uint 8 simpleField] | |
| [implicit bit bitField 'simpleField > 0'] | |
| [implicit int 8 intField 'simpleField'] | |
| [implicit uint 8 uintField 'simpleField'] | |
| [implicit float 32 floatField 'simpleField'] | |
| [implicit float 64 doubleField 'simpleField'] | |
| //TODO: String literals can't be used in the expression | |
| //[implicit string 8 stringField 'simpleField > 0 ? "HELLO TODDY" : "BYE TODDY"' encoding='UTF-8'] | |
| ] | |
| [type OptionalTypeTest | |
| [simple uint 8 simpleField] | |
| [optional uint 8 optionalField 'simpleField == 5'] | |
| ] | |
| [type PaddingTypeTest | |
| [simple uint 8 simpleField] | |
| [padding uint 8 paddingField '0x00' 'simpleField'] | |
| ] | |
| [type ReservedTypeTest | |
| [reserved uint 8 '0x00'] | |
| ] | |
| //TODO: Virtual fields fail for GO, haven't checked C assuming fails. | |
| //[type VirtualFieldTest | |
| // [simple uint 8 simpleField] | |
| // [virtual bit virtualBitField 'simpleField == 0'] | |
| // [virtual int 8 virtualIntField 'simpleField'] | |
| // [virtual uint 8 virtualUintField 'simpleField'] | |
| // [virtual float 32 virtualFloatField 'simpleField'] | |
| // [virtual float 64 virtualDoubleField 'simpleField'] | |
| // [virtual string 24 virtualStringField 'simpleField'] | |
| //] | |
| //TODO: Virtual fields fail for GO, haven't checked C assuming fails. | |
| //[discriminatedType DiscriminatedVirtualTypeTest | |
| // [simple uint 8 simpleField] | |
| // [virtual bit virtualBitField 'simpleField == 0'] | |
| // [virtual int 8 virtualIntField 'simpleField'] | |
| // [virtual uint 8 virtualUintField 'simpleField'] | |
| // [virtual float 32 virtualFloatField 'simpleField'] | |
| // [virtual float 64 virtualDoubleField 'simpleField'] | |
| // [virtual string 24 virtualStringField 'simpleField' encoding='UTF-8'] | |
| // [typeSwitch simpleField | |
| // ['0' DiscriminatedVirtualType | |
| // [simple int 8 intField] | |
| // ] | |
| // ] | |
| //] | |
| [type IntTypeTest | |
| [simple int 3 ThreeField] | |
| [simple int 8 ByteField] | |
| [simple int 16 WordField] | |
| [simple int 24 WordPlusByteField] | |
| [simple int 32 DoubleIntField] | |
| [simple int 64 QuadIntField] | |
| ] | |
| [type UIntTypeTest | |
| [simple uint 3 ThreeField] | |
| [simple uint 8 ByteField] | |
| [simple uint 16 WordField] | |
| [simple uint 24 WordPlusByteField] | |
| [simple uint 32 DoubleIntField] | |
| [simple uint 64 QuadIntField] | |
| ] | |
| //Specific test confirming a continuous loop isn't formed when working out the length. | |
| [type LentghLoopTest | |
| [simple uint 16 commandType] | |
| [implicit uint 16 len 'lengthInBytes - 8'] | |
| ] | |
| //////////////////////////////////////////////////////////////// | |
| // Discriminated Type Tests | |
| //////////////////////////////////////////////////////////////// | |
| [discriminatedType EnumDiscriminatedType | |
| [discriminator EnumType discr] | |
| [typeSwitch discr | |
| ['BOOL' EnumDiscriminatedTypeA | |
| [simple uint 8 simpA] | |
| ] | |
| ['UINT' EnumDiscriminatedTypeB | |
| [simple uint 8 simpB] | |
| ] | |
| ['INT' EnumDiscriminatedTypeC | |
| [simple uint 8 simpC] | |
| ] | |
| ] | |
| ] | |
| // Multiple Enumerated discriminators | |
| [discriminatedType EnumDiscriminatedTypeMultiple | |
| [discriminator EnumType discr1] | |
| [discriminator EnumTypeInt discr2] | |
| [typeSwitch discr1,discr2 | |
| ['BOOL','BOOLINT' EnumDiscriminatedTypeMultipleA | |
| [simple uint 8 simpA] | |
| ] | |
| ['UINT','UINTINT' EnumDiscriminatedTypeMultipleB | |
| [simple uint 8 simpB] | |
| ] | |
| ['INT','INTINT' EnumDiscriminatedTypeMultipleC | |
| [simple uint 8 simpC] | |
| ] | |
| ] | |
| ] | |
| // Enumerated Parameter | |
| [discriminatedType EnumDiscriminatedTypeParameter(EnumType discr) | |
| [typeSwitch discr | |
| ['BOOL' EnumDiscriminatedTypeAParameter | |
| [simple uint 8 simpA] | |
| ] | |
| ['UINT' EnumDiscriminatedTypeBParameter | |
| [simple uint 8 simpB] | |
| ] | |
| ['INT' EnumDiscriminatedTypeCParameter | |
| [simple uint 8 simpC] | |
| ] | |
| ] | |
| ] | |
| // Multiple Enumerated Parameters | |
| [discriminatedType EnumDiscriminatedTypeParameterMultiple(EnumType discr1, EnumTypeInt discr2) | |
| [typeSwitch discr1,discr2 | |
| ['BOOL','BOOLINT' EnumDiscriminatedTypeAParameterMultiple | |
| [simple uint 8 simpA] | |
| ] | |
| ['UINT','UINTINT' EnumDiscriminatedTypeBParameterMultiple | |
| [simple uint 8 simpB] | |
| ] | |
| ['INT','INTINT' EnumDiscriminatedTypeCParameterMultiple | |
| [simple uint 8 simpC] | |
| ] | |
| ] | |
| ] | |
| [discriminatedType SimpleDiscriminatedType | |
| [discriminator uint 8 discr] | |
| [typeSwitch discr | |
| ['0x00' SimpleDiscriminatedTypeA | |
| [simple uint 8 simpA] | |
| ] | |
| ['0x01' SimpleDiscriminatedTypeB | |
| [simple uint 8 simpB] | |
| ] | |
| ['0x02' SimpleDiscriminatedTypeC | |
| [simple uint 8 simpC] | |
| ] | |
| ] | |
| ] | |
| //Test to check if we can include concrete types as fields. Doesn't work in any language at the moment. | |
| //[discriminatedType SimpleDiscriminatedType | |
| // [discriminator uint 8 discr] | |
| // [typeSwitch discr | |
| // ['0x00' SimpleDiscriminatedTypeA | |
| // [simple AnotherSimpleDiscriminatedTypeA simpA] | |
| // ] | |
| // ] | |
| //] | |
| //[discriminatedType AnotherSimpleDiscriminatedType | |
| // [discriminator uint 8 discr] | |
| // [typeSwitch discr | |
| // ['0x00' AnotherSimpleDiscriminatedTypeA | |
| // [simple uint 8 simpA] | |
| // ] | |
| // ] | |
| //] | |
| //////////////////////////////////////////////////////////////// | |
| // Enumerated Type Tests | |
| //////////////////////////////////////////////////////////////// | |
| [enum bit EnumTypeBit | |
| ['true' TRUE] | |
| ['false' FALSE] | |
| ] | |
| [enum int 8 EnumTypeInt | |
| ['0x01' BOOLINT] | |
| ['0x02' UINTINT] | |
| ['0x03' INTINT] | |
| ] | |
| [enum uint 8 EnumType | |
| ['0x01' BOOL] | |
| ['0x02' UINT] | |
| ['0x03' INT] | |
| ] | |
| //TODO: C doesn't support non integer switch fields | |
| //[enum float 32 EnumTypeFloat | |
| // ['100.0' LOW] | |
| // ['101.0' MID] | |
| // ['102.0' BIG] | |
| //] | |
| //TODO: C doesn't support non integer switch fields | |
| //[enum float 64 EnumTypeDouble | |
| // ['100.0' LOW] | |
| // ['101.0' MID] | |
| // ['102.0' BIG] | |
| //] | |
| //TODO: C doesn't support non integer switch fields | |
| //[enum '-1' 'EnumTypeString' | |
| // ['Toddy1' TODDY] | |
| //] | |
| //TODO: Fails to import the base Enum in C, need to find it in getComplexTypeReferences | |
| //[enum EnumType EnumTypeEnum | |
| // ['BOOL' BOOL] | |
| // ['UINT' UINT] | |
| // ['INT' INT] | |
| //] | |
| //TODO: Float parameters aren't implemented for constants in enums in C | |
| //[enum int 8 EnumTypeAllTest(bit bitType, int 8 intType, uint 8 uintType, float 32 floatType, float 64 doubleType, string '-1' stringType, EnumType enumType) | |
| // ['0x01' BOOL ['false' , '1' , '1' , '100.0' , '100.0' , 'BOOL' , 'BOOL']] | |
| // ['0x02' BYTE ['true' , '2' , '2' , '101.1' , '101.1' , 'BYTE' , 'UINT']] | |
| //] | |
| //TODO: Keyword named parameters aren't allowed | |
| //[enum int 8 EnumTypeIntTest (int 8 'int') | |
| // ['0x01' BOOL ['1']] | |
| // ['0x02' BYTE ['2']] | |
| //] | |
| //Showing allowed parameter types for enums | |
| [enum int 8 EnumTypeParameters(bit bitType, int 8 intType, uint 8 uintType, string 32 stringType, EnumType enumType) | |
| ['0x01' BOOL ['false' , '1' , '1' , 'BOOL' , 'BOOL']] | |
| ['0x02' BYTE ['true' , '2' , '2' , 'BYTE' , 'UINT']] | |
| ] | |
| //////////////////////////////////////////////////////////////// | |
| // Data IO Tests | |
| //////////////////////////////////////////////////////////////// | |
| [dataIo DataIOType(EnumType dataType) | |
| [typeSwitch dataType | |
| ['BOOL' BOOL | |
| [simple bit value] | |
| ] | |
| ['UINT' USINT | |
| [simple uint 8 value] | |
| ] | |
| ['INT' UINT | |
| [simple uint 16 value] | |
| ] | |
| ] | |
| ] |