public void OneGroupIterationSystem_LocalVariable([Values] CodeGenMode mode)
        {
            SetupTestGraph(mode, g =>
            {
                ComponentQueryDeclarationModel query = GraphModel.CreateComponentQuery("g1");
                TypeHandle translationType           = typeof(Translation).GenerateTypeHandle(Stencil);
                query.AddComponent(Stencil, translationType, ComponentDefinitionFlags.None);
                IVariableModel queryInstance = GraphModel.CreateVariableNode(query, Vector2.zero);

                OnUpdateEntitiesNodeModel onUpdateModel = GraphModel.CreateNode <OnUpdateEntitiesNodeModel>("update", Vector2.zero);
                GraphModel.CreateEdge(onUpdateModel.InstancePort, queryInstance.OutputPort);

                var localDeclaration = onUpdateModel.CreateFunctionVariableDeclaration("local", TypeHandle.Float);
                var local            = GraphModel.CreateVariableNode(localDeclaration, Vector2.zero);

                var log = onUpdateModel.CreateFunctionCallNode(typeof(Debug).GetMethod("Log", new[] { typeof(object) }), 0);

                GraphModel.CreateEdge(log.GetParameterPorts().First(), local.OutputPort);
            },
                           (manager, entityIndex, e) => {},
                           (manager, entityIndex, e) => Assert.Pass());
        }
        public void OneGroupIterationSystem_ReadOnly([Values] CodeGenMode mode)
        {
            SetupTestGraph(mode, g =>
            {
                ComponentQueryDeclarationModel query = GraphModel.CreateComponentQuery("g1");
                TypeHandle translationType           = typeof(Translation).GenerateTypeHandle(Stencil);
                TypeHandle rotationType = typeof(Rotation).GenerateTypeHandle(Stencil);
                query.AddComponent(Stencil, translationType, ComponentDefinitionFlags.None);
                query.AddComponent(Stencil, rotationType, ComponentDefinitionFlags.None);
                IVariableModel queryInstance = GraphModel.CreateVariableNode(query, Vector2.zero);

                OnUpdateEntitiesNodeModel onUpdateModel = GraphModel.CreateNode <OnUpdateEntitiesNodeModel>("update", Vector2.zero);

                GraphModel.CreateEdge(onUpdateModel.InstancePort, queryInstance.OutputPort);

                var log = onUpdateModel.CreateFunctionCallNode(typeof(Debug).GetMethod("Log", new[] { typeof(object) }), 0);

                IVariableModel posComponent = GraphModel.CreateVariableNode(onUpdateModel.FunctionParameterModels.Single(p => p.DataType == translationType), Vector2.zero);
                GraphModel.CreateEdge(log.GetParameterPorts().First(), posComponent.OutputPort);
            },
                           (manager, entityIndex, e) => manager.AddComponents(e,
                                                                              new ComponentTypes(ComponentType.ReadWrite <Translation>(), ComponentType.ReadWrite <Rotation>())),
                           (manager, entityIndex, e) => Assert.Pass());
        }