示例#1
0
        public void CreateSimulation()
        {
            Simulation sim = new Simulation();

            Assert.AreEqual(0, sim.Run());
            Assert.AreEqual(0L, sim.Now);
            Assert.AreEqual(0L, sim.StopTime);
        }
示例#2
0
        public void ScheduleStop()
        {
            long       stopIn = 1000L;
            Simulation sim    = new Simulation();

            StopSimulation.Stop(sim, stopIn);
            Assert.AreEqual(0, sim.Run());
            Assert.AreEqual(stopIn, sim.Now);
            Assert.AreEqual(stopIn, sim.StopTime);
        }
示例#3
0
        public void TransferAnonymous()
        {
            IResource  resource = Resource.Create(2);
            Simulation sim      = new Simulation();
            Task       task     = new Process(sim, TransferTask, resource);

            task.Activate(null);
            sim.Run();
            Assert.AreEqual(2, resource.Free);
        }
示例#4
0
        public void TransferTracked()
        {
            IResource  resource = Resource.Create(Names);
            Simulation sim      = new Simulation();
            Task       task     = new Process(sim, TransferTask, resource);

            task.Activate(null);
            sim.Run();
            Assert.AreEqual(Names.Length, resource.Free);
        }
示例#5
0
        public void AcquireAllDisallowed()
        {
            Resource resource = Resource.Create(10);

            resource.AllowOwnMany = false;
            Simulation sim     = new Simulation();
            Process    process = new Process(sim, AcquireAll, resource);

            sim.Run(process);
        }
示例#6
0
        public void BlockedWhenNotSignalled()
        {
            Condition  target = new Condition();
            Simulation sim    = new Simulation();
            Task       nop    = new NoOperation(sim);
            Task       blk    = target.Block(nop);

            sim.Run(blk);
            Assert.AreEqual(1, target.BlockCount);
        }
示例#7
0
        public void InterruptedAcquire()
        {
            IResource  resource = Resource.Create(3);
            Simulation sim      = new Simulation();
            Process    process  = new Process(sim, AcquireOneInterrupted, resource);

            process.Activate(null);
            Assert.AreEqual(resource.Count, resource.Free);
            sim.Run();
            Assert.AreEqual(resource.Count, resource.Free);
        }
示例#8
0
        public void ScheduleAfterCompleted()
        {
            Simulation sim   = new Simulation();
            Delay      delay = new Delay(sim, 100L);

            sim.Run(delay);
            Assert.AreEqual(SimulationState.Completed, sim.State);

            delay = new Delay(sim, 200L);
            // Simulation complete, should throw exception.
            delay.Activate(null);
        }
示例#9
0
        public void AcquireAllResources()
        {
            Resource resource = Resource.Create(10);

            resource.AllowOwnMany = true;
            Simulation sim     = new Simulation();
            Process    process = new Process(sim, AcquireAll, resource);

            Assert.AreEqual(resource.Count, resource.Free);
            sim.Run(process);
            Assert.AreEqual(0, resource.Free);
            Assert.AreEqual(resource.Count, resource.InUse);
        }
示例#10
0
        public void CountToTen()
        {
            CounterProcess cp = new CounterProcess(_sim, 10);

            _sim.Run(new Task [] { cp });
            Assert.AreEqual(10, cp.CurrentIteration);
            Assert.AreEqual(100L, _sim.Now);
        }
示例#11
0
        public void ResumeOnSignal()
        {
            Condition  target  = new Condition();
            Simulation sim     = new Simulation();
            Task       unblock = new Process(sim, SignalCondition, target);
            Task       nop     = new NoOperation(sim);
            Task       block   = target.Block(nop);

            nop.WaitOnTask(block);
            sim.Run(new Task[] { block, unblock });
            Assert.IsFalse(target.Signalled);
            Assert.AreEqual(0, target.BlockCount);
            Assert.AreEqual(10L, sim.StopTime);
        }
示例#12
0
        public void ScheduleMultipleStops()
        {
            Simulation sim = new Simulation();

            for (int i = 0; i < 10; i++)
            {
                long stopIn = 1000L * i + 1000L;
                StopSimulation.Stop(sim, stopIn);
            }

            Assert.AreEqual(9, sim.Run());
            Assert.AreEqual(1000L, sim.Now);
            Assert.AreEqual(1000L, sim.StopTime);
        }
示例#13
0
        public void TransferUsingInterrupt()
        {
            IResource  resource = Resource.Create(1);
            Simulation sim      = new Simulation();
            Task       task1    = new Process(sim, TransferAndInterrupt, resource);

            task1.Name = "Task #1";
            Task task2 = new Process(sim, TransferAndInterrupt, resource);

            task2.Name = "Task #2";
            task1.Activate(null, 0L, task2);
            task2.Activate(null, 0L, task1);
            sim.Run();
            Assert.AreEqual(1, resource.Free);
        }
示例#14
0
        public void NotBlockedWhenSignalled()
        {
            Condition target = new Condition();

            target.AutoReset = false;
            target.Signal();
            Simulation sim = new Simulation();
            Task       nop = new NoOperation(sim);
            Task       blk = target.Block(nop);

            nop.WaitOnTask(blk);
            Assert.IsTrue(target.Signalled);
            sim.Run(blk);
            Assert.AreEqual(0, target.BlockCount);
        }
示例#15
0
        public void SetInServiceTracked()
        {
            IResource  resource = Resource.Create(Names);
            Simulation sim      = new Simulation();

            resource.OutOfService = resource.Count;
            Task[] tasks = new Task[resource.Count + 1];
            for (int i = 0; i < resource.Count; i++)
            {
                Task nop = new NoOperation(sim);
                tasks[i] = resource.Acquire(nop);
                nop.WaitOnTask(tasks[i]);
            }
            tasks[tasks.Length - 1] = new Process(sim, SetInService, resource);
            sim.Run(tasks);
            Assert.AreEqual(Names.Length, resource.InUse);
        }
示例#16
0
        public void SetOutOfServiceAnonymous()
        {
            IResource  resource = Resource.Create(7);
            Simulation sim      = new Simulation();

            resource.OutOfService = 2;
            Task[] tasks = new Task[resource.Count];
            for (int i = 0; i < resource.Count; i++)
            {
                Task nop = new NoOperation(sim);
                tasks[i] = resource.Acquire(nop);
                nop.WaitOnTask(tasks[i]);
            }
            sim.Run(tasks);
            Assert.AreEqual(resource.Count - resource.OutOfService,
                            resource.InUse);
        }
示例#17
0
        public void OrderedByPriority()
        {
            IQueue <int> fifo = new FifoQueue <int>();
            Simulation   sim  = new Simulation();

            for (int i = 0; i < 100; i++)
            {
                Task t = new OrderingTask(sim, i);
                t.Activate(null, 123L, fifo, 100 - i - 1);
            }
            int tasksNotRun = sim.Run();

            Assert.AreEqual(0, tasksNotRun);
            Assert.AreEqual(100, fifo.Count);

            for (int v = 0; fifo.Count > 0; v++)
            {
                Assert.AreEqual(v, fifo.Dequeue());
            }
        }