예제 #1
0
        public void TestImmediatePreemptiveResource()
        {
            var env = new Environment();
            var res = new MyPreemptiveResource(env, capacity: 1);

            Assert.AreEqual(0, res.InUse);
            Assert.AreEqual(1, res.Remaining);
            Assert.AreEqual(0, res.RequestQueueLength);
            Assert.AreEqual(0, res.ReleaseQueueLength);

            var req1 = res.Request(1, true);

            Assert.IsTrue(req1.IsTriggered);
            Assert.AreEqual(1, res.InUse);
            Assert.AreEqual(0, res.Remaining);
            Assert.AreEqual(0, res.RequestQueueLength);
            Assert.AreEqual(0, res.ReleaseQueueLength);

            var req2 = res.Request(1, true);

            Assert.IsFalse(req2.IsTriggered);
            Assert.AreEqual(1, res.InUse);
            Assert.AreEqual(0, res.Remaining);
            Assert.AreEqual(1, res.RequestQueueLength);
            Assert.AreEqual(0, res.ReleaseQueueLength);

            req1.Dispose();
            Assert.IsFalse(req2.IsTriggered);
            Assert.AreEqual(0, res.InUse);
            Assert.AreEqual(1, res.Remaining);
            Assert.AreEqual(1, res.RequestQueueLength);
            Assert.AreEqual(0, res.ReleaseQueueLength);

            var req3 = res.Request(1, true);

            Assert.IsTrue(req2.IsTriggered);
            Assert.IsFalse(req3.IsTriggered);
            Assert.AreEqual(1, res.InUse);
            Assert.AreEqual(0, res.Remaining);
            Assert.AreEqual(1, res.RequestQueueLength);
            Assert.AreEqual(0, res.ReleaseQueueLength);
        }
예제 #2
0
        public void TestImmediatePreemptiveResource()
        {
            var env = new Environment();
              var res = new MyPreemptiveResource(env, capacity: 1);
              Assert.AreEqual(0, res.InUse);
              Assert.AreEqual(1, res.Remaining);
              Assert.AreEqual(0, res.RequestQueueLength);
              Assert.AreEqual(0, res.ReleaseQueueLength);

              var req1 = res.Request(1, true);
              Assert.IsTrue(req1.IsTriggered);
              Assert.AreEqual(1, res.InUse);
              Assert.AreEqual(0, res.Remaining);
              Assert.AreEqual(0, res.RequestQueueLength);
              Assert.AreEqual(0, res.ReleaseQueueLength);

              var req2 = res.Request(1, true);
              Assert.IsFalse(req2.IsTriggered);
              Assert.AreEqual(1, res.InUse);
              Assert.AreEqual(0, res.Remaining);
              Assert.AreEqual(1, res.RequestQueueLength);
              Assert.AreEqual(0, res.ReleaseQueueLength);

              req1.Dispose();
              Assert.IsFalse(req2.IsTriggered);
              Assert.AreEqual(0, res.InUse);
              Assert.AreEqual(1, res.Remaining);
              Assert.AreEqual(1, res.RequestQueueLength);
              Assert.AreEqual(0, res.ReleaseQueueLength);

              var req3 = res.Request(1, true);
              Assert.IsTrue(req2.IsTriggered);
              Assert.IsFalse(req3.IsTriggered);
              Assert.AreEqual(1, res.InUse);
              Assert.AreEqual(0, res.Remaining);
              Assert.AreEqual(1, res.RequestQueueLength);
              Assert.AreEqual(0, res.ReleaseQueueLength);
        }