public void CollectionSizedByExpression() { var input = @" Object1 { size : int32; field2 : u32[(size - this) / 4]; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("size", new Signed(null, 32), null, null)); var field2_size = new Division( null, new Subtraction( null, new FieldIdentifier(null, "size"), new This(null) ), new BiPaGe.AST.Literals.Integer(null, "4")); object1.Fields.Add(("field2", new Unsigned(null, 32), field2_size, null)); expected.Validate(SimpleBuilder.Build(input)); }
public void CollectionSizedByExpression2() { var input = @" Object1 { size : int32; size2 : int16; collection : bool[size + size2 - 10 * 5]; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("size", new Signed(null, 32), null, null)); object1.Fields.Add(("size2", new Signed(null, 16), null, null)); var field3_size = new Subtraction( null, new Addition( null, new FieldIdentifier(null, "size"), new FieldIdentifier(null, "size2") ), new Multiplication( null, new BiPaGe.AST.Literals.Integer(null, "10"), new BiPaGe.AST.Literals.Integer(null, "5") )); object1.Fields.Add(("collection", new BiPaGe.AST.FieldTypes.Boolean(null), field3_size, null)); expected.Validate(SimpleBuilder.Build(input)); }
public void Signed() { var input = @" SomeEnumeration : i16 { value1 = -2, value2 = -1, value3 = 0, value4 = 1, value5 = 2 } Object1 { enum_field : SomeEnumeration; }"; var expected = new ProgramBuilder(); var enum1 = expected.AddEnumeration(); enum1.Name = "SomeEnumeration"; enum1.Type = new Signed(null, 16); enum1.Enumerators.Add(("value1", -2)); enum1.Enumerators.Add(("value2", -1)); enum1.Enumerators.Add(("value3", 0)); enum1.Enumerators.Add(("value4", 1)); enum1.Enumerators.Add(("value5", 2)); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("enum_field", new Identifier(null, "SomeEnumeration"), null, null)); expected.Validate(SimpleBuilder.Build(input)); }
public void Standard() { var input = @" Object1 { enum_field : u8 { value1 = 1, value2 = 2, value3 = 0 }; }"; var expected = new ProgramBuilder(); var inline_enum = new BiPaGe.AST.FieldTypes.InlineEnumeration(null, new Unsigned(null, 8), new List <BiPaGe.AST.Enumerator> { new BiPaGe.AST.Enumerator(null, "value1", "1"), new BiPaGe.AST.Enumerator(null, "value2", "2"), new BiPaGe.AST.Enumerator(null, "value3", "0") }); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("enum_field", inline_enum, null, null)); expected.Validate(SimpleBuilder.Build(input)); }
public void AsciiString() { var input = @" Object1 { field1 : ascii_string[64] = ""This is a string initializer""; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("field1", new AsciiString(null), new BiPaGe.AST.Literals.Integer(null, "64"), new BiPaGe.AST.Literals.StringLiteral(null, "This is a string initializer"))); expected.Validate(SimpleBuilder.Build(input)); }
public void CollectionSizedByField() { var input = @" Object1 { size : int32; field2 : ascii_string[size]; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("size", new Signed(null, 32), null, null)); object1.Fields.Add(("field2", new AsciiString(null), new BiPaGe.AST.Identifiers.FieldIdentifier(null, "size"), null)); expected.Validate(SimpleBuilder.Build(input)); }
public void ListOfIntegersSizedByExpression2() { var input = @" Object1 { size : int32; size2 : int16; collection : i32[size + size2 - 10 * 5] = {1,1,2,3,5,8,13,21,34,55}; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("size", new Signed(null, 32), null, null)); object1.Fields.Add(("size2", new Signed(null, 16), null, null)); var field3_size = new Subtraction( null, new Addition( null, new FieldIdentifier(null, "size"), new FieldIdentifier(null, "size2") ), new Multiplication( null, new BiPaGe.AST.Literals.Integer(null, "10"), new BiPaGe.AST.Literals.Integer(null, "5") )); object1.Fields.Add(("collection", new BiPaGe.AST.FieldTypes.Signed(null, 32), field3_size, new LiteralCollection(null, new List <BiPaGe.AST.Literals.Literal>() { new BiPaGe.AST.Literals.Integer(null, "1"), new BiPaGe.AST.Literals.Integer(null, "1"), new BiPaGe.AST.Literals.Integer(null, "2"), new BiPaGe.AST.Literals.Integer(null, "3"), new BiPaGe.AST.Literals.Integer(null, "5"), new BiPaGe.AST.Literals.Integer(null, "8"), new BiPaGe.AST.Literals.Integer(null, "13"), new BiPaGe.AST.Literals.Integer(null, "21"), new BiPaGe.AST.Literals.Integer(null, "34"), new BiPaGe.AST.Literals.Integer(null, "55") }))); expected.Validate(SimpleBuilder.Build(input)); }
public void Reserved() { var input = @" Object1 { int32[5]; ascii_string[32]; utf8_string[255]; ascii_string[size]; u32[(size - this) / 4]; bool[size + size2 - 10 * 5]; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add((null, new Signed(null, 32), new BiPaGe.AST.Literals.Integer(null, "5"), null)); object1.Fields.Add((null, new AsciiString(null), new BiPaGe.AST.Literals.Integer(null, "32"), null)); object1.Fields.Add((null, new Utf8String(null), new BiPaGe.AST.Literals.Integer(null, "255"), null)); object1.Fields.Add((null, new AsciiString(null), new BiPaGe.AST.Identifiers.FieldIdentifier(null, "size"), null)); var field5_size = new Division( null, new Subtraction( null, new FieldIdentifier(null, "size"), new This(null) ), new BiPaGe.AST.Literals.Integer(null, "4")); object1.Fields.Add((null, new Unsigned(null, 32), field5_size, null)); var field6_size = new Subtraction( null, new Addition( null, new FieldIdentifier(null, "size"), new FieldIdentifier(null, "size2") ), new Multiplication( null, new BiPaGe.AST.Literals.Integer(null, "10"), new BiPaGe.AST.Literals.Integer(null, "5") )); object1.Fields.Add((null, new BiPaGe.AST.FieldTypes.Boolean(null), field6_size, null)); expected.Validate(SimpleBuilder.Build(input)); }
public void StaticallySizedCollection() { var input = @" Object1 { field1 : int32[5]; field2 : ascii_string[32]; field3 : utf8_string[255]; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("field1", new Signed(null, 32), new BiPaGe.AST.Literals.Integer(null, "5"), null)); object1.Fields.Add(("field2", new AsciiString(null), new BiPaGe.AST.Literals.Integer(null, "32"), null)); object1.Fields.Add(("field3", new Utf8String(null), new BiPaGe.AST.Literals.Integer(null, "255"), null)); expected.Validate(SimpleBuilder.Build(input)); }
public void Enumeration() { var expected = new ProgramBuilder(); var enum1 = expected.AddEnumeration(); enum1.Name = "SomeEnumeration"; enum1.Type = new Unsigned(null, 8); enum1.Enumerators.Add(("value1", 1)); enum1.Enumerators.Add(("value2", 2)); enum1.Enumerators.Add(("value3", 0)); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("enum_field", new Identifier(null, "SomeEnumeration"), null, null)); expected.Validate(SimpleBuilder.Build("SomeEnumeration : u8{value1=1,value2=2,value3=0}Object1{enum_field:SomeEnumeration;}")); }
public void ListOfBooleans() { var input = @" Object1 { field1 : bool[3] = {true, false, true}; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("field1", new BiPaGe.AST.FieldTypes.Boolean(null), new BiPaGe.AST.Literals.Integer(null, "3"), new LiteralCollection(null, new List <BiPaGe.AST.Literals.Literal>() { new BiPaGe.AST.Literals.Boolean(null, "true"), new BiPaGe.AST.Literals.Boolean(null, "false"), new BiPaGe.AST.Literals.Boolean(null, "true") }))); expected.Validate(SimpleBuilder.Build(input)); }
public void Reserved() { var input = @" Object1 { int2; u6; i11; u12; bool; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add((null, new Signed(null, 2), null, null)); object1.Fields.Add((null, new Unsigned(null, 6), null, null)); object1.Fields.Add((null, new Signed(null, 11), null, null)); object1.Fields.Add((null, new Unsigned(null, 12), null, null)); object1.Fields.Add((null, new BiPaGe.AST.FieldTypes.Boolean(null), null, null)); expected.Validate(SimpleBuilder.Build(input)); }
public void OddWidths() { var input = @" Object1 { field1 : int2; field2 : u6; field3 : i11; field4 : u12; field5 : bool; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("field1", new Signed(null, 2), null, null)); object1.Fields.Add(("field2", new Unsigned(null, 6), null, null)); object1.Fields.Add(("field3", new Signed(null, 11), null, null)); object1.Fields.Add(("field4", new Unsigned(null, 12), null, null)); object1.Fields.Add(("field5", new BiPaGe.AST.FieldTypes.Boolean(null), null, null)); expected.Validate(SimpleBuilder.Build(input)); }
public void ListOfMixedSignIntegers() { var input = @" Object1 { field1 : int32[5] = {1,-2,3,-4,5}; }"; var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("field1", new Signed(null, 32), new BiPaGe.AST.Literals.Integer(null, "5"), new LiteralCollection(null, new List <BiPaGe.AST.Literals.Literal>() { new BiPaGe.AST.Literals.Integer(null, "1"), new BiPaGe.AST.Literals.Integer(null, "-2"), new BiPaGe.AST.Literals.Integer(null, "3"), new BiPaGe.AST.Literals.Integer(null, "-4"), new BiPaGe.AST.Literals.Integer(null, "5") }))); expected.Validate(SimpleBuilder.Build(input)); }
public void Collections() { var expected = new ProgramBuilder(); var object1 = expected.AddObject(); object1.Name = "Object1"; object1.Fields.Add(("field1", new Signed(null, 32), new BiPaGe.AST.Literals.Integer(null, "5"), new LiteralCollection(null, new List <BiPaGe.AST.Literals.Literal>() { new BiPaGe.AST.Literals.Integer(null, "1"), new BiPaGe.AST.Literals.Integer(null, "2"), new BiPaGe.AST.Literals.Integer(null, "3"), new BiPaGe.AST.Literals.Integer(null, "4"), new BiPaGe.AST.Literals.Integer(null, "5") }))); object1.Fields.Add(("field2", new Signed(null, 32), new BiPaGe.AST.Literals.Integer(null, "5"), new LiteralCollection(null, new List <BiPaGe.AST.Literals.Literal>() { new BiPaGe.AST.Literals.Integer(null, "-1"), new BiPaGe.AST.Literals.Integer(null, "-2"), new BiPaGe.AST.Literals.Integer(null, "-3"), new BiPaGe.AST.Literals.Integer(null, "-4"), new BiPaGe.AST.Literals.Integer(null, "-5") }))); object1.Fields.Add(("field3", new Signed(null, 32), new BiPaGe.AST.Literals.Integer(null, "5"), new LiteralCollection(null, new List <BiPaGe.AST.Literals.Literal>() { new BiPaGe.AST.Literals.Integer(null, "1"), new BiPaGe.AST.Literals.Integer(null, "-2"), new BiPaGe.AST.Literals.Integer(null, "3"), new BiPaGe.AST.Literals.Integer(null, "-4"), new BiPaGe.AST.Literals.Integer(null, "5") }))); var field4_size = new Subtraction( null, new Addition( null, new FieldIdentifier(null, "size"), new FieldIdentifier(null, "size2") ), new Multiplication( null, new BiPaGe.AST.Literals.Integer(null, "10"), new BiPaGe.AST.Literals.Integer(null, "5") )); object1.Fields.Add(("collection", new BiPaGe.AST.FieldTypes.Signed(null, 32), field4_size, new LiteralCollection(null, new List <BiPaGe.AST.Literals.Literal>() { new BiPaGe.AST.Literals.Integer(null, "1"), new BiPaGe.AST.Literals.Integer(null, "1"), new BiPaGe.AST.Literals.Integer(null, "2"), new BiPaGe.AST.Literals.Integer(null, "3"), new BiPaGe.AST.Literals.Integer(null, "5"), new BiPaGe.AST.Literals.Integer(null, "8"), new BiPaGe.AST.Literals.Integer(null, "13"), new BiPaGe.AST.Literals.Integer(null, "21"), new BiPaGe.AST.Literals.Integer(null, "34"), new BiPaGe.AST.Literals.Integer(null, "55") }))); object1.Fields.Add(("field4", new BiPaGe.AST.FieldTypes.Boolean(null), new BiPaGe.AST.Literals.Integer(null, "3"), new LiteralCollection(null, new List <BiPaGe.AST.Literals.Literal>() { new BiPaGe.AST.Literals.Boolean(null, "true"), new BiPaGe.AST.Literals.Boolean(null, "false"), new BiPaGe.AST.Literals.Boolean(null, "true") }))); object1.Fields.Add(("field5", new AsciiString(null), new BiPaGe.AST.Literals.Integer(null, "64"), new BiPaGe.AST.Literals.StringLiteral(null, "This is a string initializer"))); expected.Validate(SimpleBuilder.Build("Object1{field1:int32[5]={1,2,3,4,5};field2:int32[5]={-1,-2,-3,-4,-5};field3:int32[5]={1,-2,3,-4,5};collection:i32[size+size2-10*5]={1,1,2,3,5,8,13,21,34,55};field4:bool[3]={true, false, true};field5:ascii_string[64]=\"This is a string initializer\";}")); }