Esempio n. 1
0
        public void GeneralStaticEntranceTest()
        {
            int key      = 5;
            var LockDic  = new ConcurrentDictionary <int, bool>();
            var TimerDic = new ConcurrentDictionary <int, Timer>();
            Predicate <TestClass>   SolvePredicate = o => false;
            IEnumerable <TestClass> Objects        = ParallelEnumerable.Repeat <TestClass>(new TestClass(), 10);

            //check without locking
            //(without timer)

            LockDic[key] = false;

            SolvePredicate = o => false;
            bool answerFalse = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsFalse(answerFalse);
            Assert.IsFalse(LockDic[key]);

            SolvePredicate = o => true;
            bool answerTrue = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsTrue(answerTrue);
            Assert.IsTrue(LockDic[key]);


            //(with timer)
            LockDic[key]  = false;
            TimerDic[key] = new Timer(new TimeSpan(0, 0, 0, 0));

            SolvePredicate = o => false;
            answerFalse    = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsFalse(answerFalse);

            SolvePredicate = o => true;
            answerTrue     = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsTrue(answerTrue);
            Assert.IsTrue(LockDic[key]);


            //check for locking
            LockDic[key]   = true;
            SolvePredicate = o => true;
            TimerDic[key]  = new Timer(new TimeSpan(0, 0, 0, 0));
            answerFalse    = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsFalse(answerFalse);

            //check for timer
            LockDic[key]   = false;
            SolvePredicate = o => true;

            TimerDic[key] = new Timer(new TimeSpan(0, 0, 0, 0, 1000));
            TimerDic[key].Start();
            System.Threading.Thread.Sleep(500);
            answerFalse = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsFalse(answerFalse);

            TimerDic[key].Reset();
            int count_before = TimerDic[key].ElapsedTime;

            System.Threading.Thread.Sleep(1500);
            answerTrue = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsTrue(answerTrue);
            Assert.IsTrue(TimerDic[key].ElapsedTime < 500);

            //check for start timer
            LockDic[key]   = false;
            SolvePredicate = o => true;
            TimerDic[key]  = new Timer(new TimeSpan(0, 0, 0, 0, 1000));
            GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsTrue(TimerDic[key].IsRun);
        }