public void PullsOutput()
        {
            TimeSpan loopDuration = TimeSpan.FromMilliseconds(IterationMilliseconds);

            SimulationDAQController c = new SimulationDAQController(loopDuration);
            c.Clock = new FakeClock();

            IOutputData expectedOutput;
            DAQOutputStream outStream;
            SetupOutputPipeline(c, out expectedOutput, out outStream);

            IDictionary<IDAQOutputStream, IOutputData> actualOutput = null;
            TimeSpan actualTimeStep = TimeSpan.FromMilliseconds(0);

            c.SimulationRunner = (IDictionary<IDAQOutputStream, IOutputData> output, TimeSpan timeStep) =>
            {
                actualOutput = output;
                actualTimeStep = timeStep;

                return new Dictionary<IDAQInputStream, IInputData>();
            };

            c.ProcessIteration += (controller, evtArgs) =>
            {
                ((Symphony.Core.IDAQController)controller).Stop();
            };
            c.Start(false);

            while (c.Running) { }

            Assert.AreEqual(loopDuration, actualTimeStep);
            CollectionAssert.AreEqual(actualOutput[outStream].Data, expectedOutput.SplitData(loopDuration).Head.Data);
        }
        public void PushesInput()
        {
            TimeSpan loopDuration = TimeSpan.FromMilliseconds(IterationMilliseconds);

            var c = new SimulationDAQController(loopDuration) { Clock = new FakeClock() };

            IOutputData expectedOutput;
            DAQOutputStream outStream;
            DAQInputStream inStream;
            SetupInputPipeline(c, out expectedOutput, out outStream, out inStream);

            c.SimulationRunner = (IDictionary<IDAQOutputStream, IOutputData> output, TimeSpan timeStep) =>
            {
                var inputData = new Dictionary<IDAQInputStream, IInputData>(1);
                expectedOutput = output[outStream];
                inputData[inStream] = new InputData(expectedOutput.Data, expectedOutput.SampleRate, DateTimeOffset.Now);

                return inputData;
            };

            c.ProcessIteration += (controller, evtArgs) => ((IDAQController)controller).Stop();
            c.Start(false);
            Thread.Sleep(500);

            var actualInput = ((TestDevice)outStream.Devices.First()).InputData.ContainsKey(inStream) ? ((TestDevice)outStream.Devices.First()).InputData[inStream].First() : null;

            Assert.That(actualInput, Is.Not.Null);
            Assert.That(actualInput.Data, Is.EqualTo(expectedOutput.Data));
        }
        public void PushesInput()
        {
            TimeSpan loopDuration = TimeSpan.FromMilliseconds(IterationMilliseconds);

            var c = new SimulationDAQController(loopDuration)
            {
                Clock = new FakeClock()
            };

            IOutputData     expectedOutput;
            DAQOutputStream outStream;
            DAQInputStream  inStream;

            SetupInputPipeline(c, out expectedOutput, out outStream, out inStream);


            c.SimulationRunner = (IDictionary <IDAQOutputStream, IOutputData> output, TimeSpan timeStep) =>
            {
                var inputData = new Dictionary <IDAQInputStream, IInputData>(1);
                expectedOutput      = output[outStream];
                inputData[inStream] = new InputData(expectedOutput.Data, expectedOutput.SampleRate, DateTimeOffset.Now);

                return(inputData);
            };

            c.ProcessIteration += (controller, evtArgs) => ((IDAQController)controller).Stop();
            bool stopped = false;

            c.Stopped += (controller, evtArgs) =>
            {
                stopped = true;
            };
            c.Start(false);
            Thread.Sleep(500);

            var actualInput = ((TestDevice)outStream.Device).InputData.ContainsKey(inStream) ? ((TestDevice)outStream.Device).InputData[inStream].First() : null;

            Assert.That(actualInput, Is.Not.Null);
            Assert.That(actualInput.Data, Is.EqualTo(expectedOutput.Data));
        }
        public void PullsOutput()
        {
            TimeSpan loopDuration = TimeSpan.FromMilliseconds(IterationMilliseconds);

            SimulationDAQController c = new SimulationDAQController(loopDuration);

            c.Clock = new FakeClock();

            IOutputData     expectedOutput;
            DAQOutputStream outStream;

            SetupOutputPipeline(c, out expectedOutput, out outStream);

            IDictionary <IDAQOutputStream, IOutputData> actualOutput = null;
            TimeSpan actualTimeStep = TimeSpan.FromMilliseconds(0);

            c.SimulationRunner = (IDictionary <IDAQOutputStream, IOutputData> output, TimeSpan timeStep) =>
            {
                actualOutput   = output;
                actualTimeStep = timeStep;

                return(new Dictionary <IDAQInputStream, IInputData>());
            };

            c.ProcessIteration += (controller, evtArgs) =>
            {
                ((Symphony.Core.IDAQController)controller).Stop();
            };
            c.Start(false);

            while (c.Running)
            {
            }

            Assert.AreEqual(loopDuration, actualTimeStep);
            CollectionAssert.AreEqual(actualOutput[outStream].Data, expectedOutput.SplitData(loopDuration).Head.Data);
        }