public void MultipleFieldWithPipeFunctionCall() { var text = @"a.b.f().g().h.i.j()"; //equal j(a.b.f().g().h.i) //equal j(g(a.b.f()).h.i) //equal j(a.b.f().g().h.i) //equal j(g(f(a.b)).h.i) //equal j((g ( f( a->b)) ->h) ->i) var jCall = ParserTestHelper.ParseSingleEquation <FunCallSyntaxNode>(text); Assert.AreEqual("j", jCall.Id); var ifield = jCall.Args[0].AssertType <StructFieldAccessSyntaxNode>("i"); Assert.AreEqual("i", ifield.FieldName); var hfield = ifield.Source.AssertType <StructFieldAccessSyntaxNode>("h"); Assert.AreEqual("h", hfield.FieldName); var gCall = hfield.Source.AssertType <FunCallSyntaxNode>("g"); Assert.AreEqual("g", gCall.Id); var fCall = gCall.Args[0].AssertType <FunCallSyntaxNode>("f"); Assert.AreEqual("f", fCall.Id); var bfield = fCall.Args[0].AssertType <StructFieldAccessSyntaxNode>("b"); Assert.AreEqual("b", bfield.FieldName); var aVar = bfield.Source.AssertType <NamedIdSyntaxNode>("a"); Assert.AreEqual("a", aVar.Id); }
public void SingleElementConstStruct() { var text = @" { a = 1 }"; var structSyntaxNode = ParserTestHelper.ParseSingleEquation <StructInitSyntaxNode>(text); Assert.AreEqual(1, structSyntaxNode.Children.Count()); AssertGenericIntConstantDefenition(structSyntaxNode.Fields.First(), "a", (ulong)1); }
public void SingleFieldAccess() { var text = @"a.b"; var node = ParserTestHelper.ParseSingleEquation <StructFieldAccessSyntaxNode>(text); Assert.AreEqual("a", node.Source.AssertType <NamedIdSyntaxNode>().Id); Assert.AreEqual("b", node.FieldName); }
public void UnaryOperatorBeforeFieldAccess(string text) { var negateNode = ParserTestHelper.ParseSingleEquation <FunCallSyntaxNode>(text); Assert.IsTrue(negateNode.IsOperator); var fieldAccNode = negateNode.Args[0].AssertType <StructFieldAccessSyntaxNode>(); Assert.AreEqual("a", fieldAccNode.Source.AssertType <NamedIdSyntaxNode>().Id); Assert.AreEqual("b", fieldAccNode.FieldName); }
public void TwoElementsConstStruct() { var text = @" { a = 1; b = 2 }"; var tree = Parser.Parse(Tokenizer.ToFlow(text)); var structSyntaxNode = ParserTestHelper.ParseSingleEquation <StructInitSyntaxNode>(text); Assert.AreEqual(2, structSyntaxNode.Children.Count()); AssertGenericIntConstantDefenition(structSyntaxNode.Fields.First(), "a", (ulong)1); AssertGenericIntConstantDefenition(structSyntaxNode.Fields.Skip(1).First(), "b", (ulong)2); }
public void ChainOf2FieldAccess() { var text = @"a.b.c"; var node = ParserTestHelper.ParseSingleEquation <StructFieldAccessSyntaxNode>(text); Assert.AreEqual("c", node.FieldName); var childAccess = node.Source.AssertType <StructFieldAccessSyntaxNode>(); Assert.AreEqual("a", childAccess.Source.AssertType <NamedIdSyntaxNode>().Id); Assert.AreEqual("b", childAccess.FieldName); }
public void SingleFieldWithPipeFunctionCall() { var text = @"a.b.f()"; //equal f(mem(a,b)) var node = ParserTestHelper.ParseSingleEquation <FunCallSyntaxNode>(text); Assert.AreEqual(1, node.Args.Length); var synode = node.Args[0] as StructFieldAccessSyntaxNode; Assert.IsNotNull(synode); Assert.AreEqual("a", synode.Source.AssertType <NamedIdSyntaxNode>().Id); Assert.AreEqual("b", synode.FieldName); }
public void ChainOf3FieldAccess() { var text = @"a.b.c.d"; var root = ParserTestHelper.ParseSingleEquation <StructFieldAccessSyntaxNode>(text); Assert.AreEqual("d", root.FieldName); var childAccess = root.Source.AssertType <StructFieldAccessSyntaxNode>(); Assert.AreEqual("c", childAccess.FieldName); var childOfChildAccess = childAccess.Source.AssertType <StructFieldAccessSyntaxNode>(); Assert.AreEqual("b", childOfChildAccess.FieldName); Assert.AreEqual("a", childOfChildAccess.Source.AssertType <NamedIdSyntaxNode>().Id); }