public void ObjectListElementExpression()
        {
            var variableObjectExpr = new ObjectVariableExpression("a", typeof(A));
            var listExpr           = new ObjectPropertyExpression(variableObjectExpr, typeof(A).GetProperty("Bs"));
            var indexExpr          = new NumericLiteralExpression(1);
            var expr = new ObjectListElementExpression(listExpr, indexExpr);

            B b;
            A a = new A
            {
                Bs = new[]
                {
                    new B {
                        Id = 0
                    },
                    b = new B {
                        Id = 1
                    },
                }
            };

            object instance = expr.GetInstance(new Dictionary <string, object> {
                { "a", a }
            });

            Assert.Same(b, instance);
        }
        public void NumberListElementExpression()
        {
            var variableObjectExpr = new ObjectVariableExpression("a", typeof(A));
            var listExpr           = new ObjectPropertyExpression(variableObjectExpr, typeof(A).GetProperty("Ints"));
            var indexExpr          = new NumericLiteralExpression(1);
            var expr = new NumericListElementExpression(listExpr, indexExpr);

            A a = new A
            {
                Ints = new List <int> {
                    1, 2
                }
            };

            double value = expr.Evaluate(new Dictionary <string, object> {
                { "a", a }
            });

            Assert.Equal(2.0, value);
        }