public void SimulationPropertySetterTest()
        {
            var validator  = TypeMap.GetInstance <MyValidator>();
            var simulation = MockRepository.GenerateStub <MySimulation>(validator);
            var handler    = new MySimulationHandler(simulation);

            // This should not throw, it's the first simulation.

            Assert.Throws <InvalidOperationException>(() => handler.Simulation = simulation);
        }
Ejemplo n.º 2
0
        public void SetKeyDown(int keyValue)
        {
            m_keyPresses.AddLast(new Tuple <int, bool>(keyValue, true));

            ExecuteIfPaused();

            MySimulationHandler handler = Owner.SimulationHandler;

            if (StepOnKeyDown && (handler.State == MySimulationHandler.SimulationState.PAUSED))
            {
                handler.StartSimulation(1);
            }
        }
        public void SimulationStateChangedOnNodesTest()
        {
            var simulation = TypeMap.GetInstance <MySimulation>();
            var handler    = new MySimulationHandler(simulation);

            MyProject project = new MyProject
            {
                Network = new MyNetwork()
            };

            project.CreateWorld(typeof(MyTestingWorld));

            var node = project.CreateNode <TestingNode>();

            node.Event = new AutoResetEvent(false);
            project.Network.AddChild(node);
            var connection = new MyConnection(project.Network.GroupInputNodes[0], project.Network.Children[0]);

            connection.Connect();

            project.Network.PrepareConnections();

            handler.Project = project;
            handler.UpdateMemoryModel();

            handler.StartSimulation();
            node.Event.WaitOne();
            Assert.Equal(MySimulationHandler.SimulationState.STOPPED, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING, node.CurrentState);

            handler.PauseSimulation();
            node.Event.WaitOne();
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.CurrentState);

            handler.StartSimulation(stepCount: 1u);
            node.Event.WaitOne();   // Here the sim goes from paused to RUNNING_STEP.
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING_STEP, node.CurrentState);
            node.Event.WaitOne();   // Here it goes to PAUSED.
            Assert.Equal(MySimulationHandler.SimulationState.RUNNING_STEP, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.CurrentState);

            handler.StopSimulation();
            node.Event.WaitOne();
            Assert.Equal(MySimulationHandler.SimulationState.PAUSED, node.PreviousState);
            Assert.Equal(MySimulationHandler.SimulationState.STOPPED, node.CurrentState);

            handler.Finish();
        }
Ejemplo n.º 4
0
        public void SetKeyDown(int keyValue)
        {
            bool wasNotPressed = Output.Host[keyValue] < 1.0f;

            Output.Host[keyValue] = 1.0f;

            ExecuteIfPaused();

            MySimulationHandler handler = Owner.SimulationHandler;

            if (wasNotPressed && StepOnKeyDown && (handler.State == MySimulationHandler.SimulationState.PAUSED))
            {
                handler.StartSimulation(1);
            }
        }
Ejemplo n.º 5
0
        public void SetKeyDown(int keyValue)
        {
            bool wasNotPressed = Output.Host[keyValue] < 1.0f; // valid only when simulation state is PAUSED, otherwise the result is undefined

            m_keyPresses.AddLast(new Tuple <int, bool>(keyValue, true));

            ExecuteIfPaused();

            MySimulationHandler handler = Owner.SimulationHandler;

            if (wasNotPressed && StepOnKeyDown && (handler.State == MySimulationHandler.SimulationState.PAUSED))
            {
                handler.StartSimulation(1);
            }
        }
Ejemplo n.º 6
0
        void SimulationHandler_StateChanged(object sender, MySimulationHandler.StateEventArgs e)
        {
            MySimulationHandler simulationHandler = sender as MySimulationHandler;

            runToolButton.Enabled   = simulationHandler.CanStart;
            stepInButton.Enabled    = simulationHandler.CanStepInto;
            stepOutButton.Enabled   = simulationHandler.CanStepOut;
            stepOverButton.Enabled  = simulationHandler.CanStepOver;
            pauseToolButton.Enabled = simulationHandler.CanPause;

            UpdateDebugListView();

            if (e.NewState == MySimulationHandler.SimulationState.PAUSED)
            {
                if (simulationHandler.Simulation.InDebugMode)
                {
                    noDebugLabel.Visible = false;

                    MyExecutionBlock currentBlock = simulationHandler.Simulation.CurrentDebuggedBlock;
                    m_selectedNodeView = null;

                    if (currentBlock != null && currentBlock.CurrentChild != null)
                    {
                        m_selectedNodeView = debugTreeView.AllNodes.FirstOrDefault(node => (node.Tag is MyDebugNode && (node.Tag as MyDebugNode).Executable == currentBlock.CurrentChild));
                    }
                    ;
                }

                debugTreeView.Invalidate();
                //debugTreeView.Invoke((MethodInvoker)(() => debugTreeView.SelectedNode = m_selectedNodeView));
            }
            else if (e.NewState == MySimulationHandler.SimulationState.STOPPED)
            {
                m_executionPlan      = null;
                debugTreeView.Model  = null;
                noDebugLabel.Visible = true;

                if (this.IsFloat)
                {
                    this.Hide();
                }
            }

            breakpointCheckBox.EditEnabled = simulationHandler.Simulation.InDebugMode;
        }
Ejemplo n.º 7
0
        public MainForm()
        {
            this.Font = SystemFonts.MessageBoxFont;
            InitializeComponent();

            SimulationHandler = new MySimulationHandler(backgroundWorker);
            SimulationHandler.StateChanged    += SimulationHandler_StateChanged;
            SimulationHandler.ProgressChanged += SimulationHandler_ProgressChanged;

            // must be created in advance to grab possible error logs
            ConsoleView = new ConsoleForm(this);

            var assemblyName = Assembly.GetExecutingAssembly().GetName();

            MyLog.INFO.WriteLine(assemblyName.Name + " version " + assemblyName.Version);

            try
            {
                SimulationHandler.Simulation = new MyLocalSimulation();
            }
            catch (Exception e)
            {
                MessageBox.Show("An error occured when initializing simulation. Please make sure you have a supported CUDA-enabled graphics card and apropriate drivers." +
                                "Technical details: " + e.Message, "Simulation Initialization Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                // this way you do not have to tweak form Close and Closing events and it works even with any worker threads still running
                Environment.Exit(1);
            }

            MyConfiguration.SetupModuleSearchPath();
            MyConfiguration.ProcessCommandParams();

            try
            {
                MyConfiguration.LoadModules();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Fatal error occured during initialization", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Environment.Exit(1);
            }

            Documentation = new MyDocProvider();

            foreach (MyModuleConfig module in MyConfiguration.Modules)
            {
                Documentation.LoadXMLDoc(module.Assembly);
            }

            NodePropertyView = new NodePropertyForm(this);
            MemoryBlocksView = new MemoryBlocksForm(this);

            TaskView         = new TaskForm(this);
            TaskPropertyView = new TaskPropertyForm(this);

            GraphViews    = new Dictionary <MyNodeGroup, GraphLayoutForm>();
            ObserverViews = new List <ObserverForm>();

            ValidationView         = new ValidationForm(this);
            HelpView               = new NodeHelpForm(this);
            HelpView.StartPosition = FormStartPosition.CenterScreen;

            DebugView = new DebugForm(this);

            PopulateWorldList();
            CreateNewProject();
            CreateNetworkView();

            m_views = new List <DockContent>()
            {
                NetworkView, NodePropertyView, MemoryBlocksView, TaskView, TaskPropertyView, ConsoleView, ValidationView, DebugView, HelpView
            };

            foreach (DockContent view in m_views)
            {
                ToolStripMenuItem viewMenuItem = new ToolStripMenuItem(view.Text);
                viewMenuItem.Click += viewToolStripMenuItem_Click;
                viewMenuItem.Tag    = view;
                viewMenuItem.Name   = view.Text;

                viewToolStripMenuItem.DropDownItems.Add(viewMenuItem);
            }

            ((ToolStripMenuItem)viewToolStripMenuItem.DropDownItems.Find(HelpView.Text, false).First()).ShortcutKeys = Keys.F1;
            viewToolStripMenuItem.DropDownItems.Add(new ToolStripSeparator());

            ToolStripMenuItem resetViewsMenuItem = new ToolStripMenuItem("Reset Views Layout");

            resetViewsMenuItem.ShortcutKeys = Keys.Control | Keys.W;
            resetViewsMenuItem.Click       += resetViewsMenuItem_Click;

            viewToolStripMenuItem.DropDownItems.Add(resetViewsMenuItem);

            ToolStripMenuItem nodeSettingsMenuItem = new ToolStripMenuItem("Configure node selection...");

            nodeSettingsMenuItem.ShortcutKeys = Keys.Control | Keys.L;
            nodeSettingsMenuItem.Click       += nodeSettingsMenuItem_Click;

            viewToolStripMenuItem.DropDownItems.Add(nodeSettingsMenuItem);

            modeDropDownList.SelectedIndex = 0;

            AddTimerMenuItem(timerToolStripSplitButton, timerItem_Click, 0);
            AddTimerMenuItem(timerToolStripSplitButton, timerItem_Click, 10);
            AddTimerMenuItem(timerToolStripSplitButton, timerItem_Click, 20);
            AddTimerMenuItem(timerToolStripSplitButton, timerItem_Click, 50);
            AddTimerMenuItem(timerToolStripSplitButton, timerItem_Click, 100);
            AddTimerMenuItem(timerToolStripSplitButton, timerItem_Click, 500);

            timerItem_Click(timerToolStripSplitButton.DropDownItems[Properties.Settings.Default.StepDelay], EventArgs.Empty);

            AddTimerMenuItem(observerTimerToolButton, observerTimerItem_Click, 0);
            AddTimerMenuItem(observerTimerToolButton, observerTimerItem_Click, 20);
            AddTimerMenuItem(observerTimerToolButton, observerTimerItem_Click, 100);
            AddTimerMenuItem(observerTimerToolButton, observerTimerItem_Click, 500);
            AddTimerMenuItem(observerTimerToolButton, observerTimerItem_Click, 1000);
            AddTimerMenuItem(observerTimerToolButton, observerTimerItem_Click, 5000);

            observerTimerItem_Click(observerTimerToolButton.DropDownItems[Properties.Settings.Default.ObserverPeriod], EventArgs.Empty);

            PropertyDescriptor descriptor = TypeDescriptor.GetProperties(typeof(MyWorkingNode))["DataFolder"];
            EditorAttribute    editor     = (EditorAttribute)descriptor.Attributes[typeof(EditorAttribute)];

            editor.GetType().GetField("typeName", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(editor,
                                                                                                           typeof(MyFolderDialog).AssemblyQualifiedName);

            editor.GetType().GetField("baseTypeName", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(editor,
                                                                                                               typeof(UITypeEditor).AssemblyQualifiedName);

            autosaveTextBox.Text = Properties.Settings.Default.AutosaveInterval.ToString();
            autosaveTextBox_Validating(this, new CancelEventArgs());

            autosaveButton.Checked = Properties.Settings.Default.AutosaveEnabled;
        }
        public void FileCanBeReadWhenSimulationIsNotRunning()
        {
            string       directory = Path.GetFullPath(@"Data\");
            const string fileName  = "csv_file_test.brain";

            m_outputFileFullPath = Path.GetTempFileName();
            var outputFileName      = Path.GetFileName(m_outputFileFullPath);
            var outputFileDirectory = Path.GetDirectoryName(m_outputFileFullPath);

            string projectPath = directory + fileName;

            var simulation = TypeMap.GetInstance <MySimulation>();

            // TODO(HonzaS): This should not be required!
            // The referenced assemblies get loaded only if a Type is required here. But since the serializer
            // is just looking for types by name, it doesn't force the runtime to load all of the assemblies.
            // In this case, we would miss the BasicNodes if the following line was deleted.
            // Two solutions: 1) Use the Managed Extensibility Framework or 2) load all referenced assemblies
            // explicitely (as a part of the BS testing framework).
            var csvNode = new MyCsvFileWriterNode();

            MyProject project = MyProject.Deserialize(File.ReadAllText(projectPath), Path.GetDirectoryName(projectPath));

            var handler = new MySimulationHandler(simulation)
            {
                Project = project
            };

            // The CSV node
            MyNode node = project.Network.GetChildNodeById(6);

            PropertyInfo fileNameProperty = node.GetType().GetProperty("OutputFile", BindingFlags.Instance | BindingFlags.Public);

            fileNameProperty.SetValue(node, outputFileName);

            PropertyInfo directoryProperty = node.GetType().GetProperty("OutputDirectory", BindingFlags.Instance | BindingFlags.Public);

            directoryProperty.SetValue(node, outputFileDirectory);

            handler.UpdateMemoryModel();

            handler.StateChanged += StateChanged;

            try
            {
                handler.StartSimulation();
                m_continueEvent.WaitOne();

                Assert.Throws <IOException>(() =>
                {
                    File.Open(m_outputFileFullPath, FileMode.Open, FileAccess.ReadWrite);
                });

                // Every time we change simulation state, the StateChanged method gets notified.
                // We're changing the state several times here and the StateChanged methods checks that
                // the file that the Csv node uses is available for writing.

                // First, go through start->pause->stop.
                handler.PauseSimulation();
                m_continueEvent.WaitOne();

                handler.StopSimulation();
                m_continueEvent.WaitOne();

                // Now, try start->stop only.
                handler.StartSimulation();
                m_continueEvent.WaitOne();

                handler.StopSimulation();
                m_continueEvent.WaitOne();

                // The file should have been successfully opened three times - every time the simulation was paused or stopped.
                Assert.Equal(3, m_openCount);
            }
            finally
            {
                handler.Finish();
                File.Delete(m_outputFileFullPath);
                m_outputFileFullPath = null;
            }
        }