public void GeneralStaticExit() { int key = 5; var LockDic = new ConcurrentDictionary <int, bool>(); IEnumerable <TestClass> Objects = ParallelEnumerable.Repeat <TestClass>(new TestClass(), 10); bool WasChanged = false; Action <TestClass> DecreaseAction = new Action <TestClass>(o => { }); Action <TestClass> IncreaseAction = new Action <TestClass>(o => { }); //check for release lock LockDic[key] = true; GeneralTransition <TestClass> .StaticExit(Objects, DecreaseAction, IncreaseAction, ref WasChanged, LockDic, key); Assert.IsFalse(LockDic[key]); //check for set "WasChanged" WasChanged = false; GeneralTransition <TestClass> .StaticExit(Objects, DecreaseAction, IncreaseAction, ref WasChanged, LockDic, key); Assert.IsTrue(WasChanged); //check for do action Objects.AsParallel().ForAll(o => { o.Number = 1; o.Word = "Hello"; }); DecreaseAction = o => o.Number = 2; IncreaseAction = o => o.Word = "Word"; GeneralTransition <TestClass> .StaticExit(Objects, DecreaseAction, IncreaseAction, ref WasChanged, LockDic, key); Assert.IsTrue(Objects.All(o => o.Word == "Word" && o.Number == 2)); }
public void WasChangedGeneralTransitionTest() { //test1 IEnumerable <TestClass> Objects = ParallelEnumerable.Repeat <TestClass>(new TestClass(), 2); Objects.AsParallel().ForAll(o => { o.Number = 2; o.Word = "ccc"; }); GeneralLocker gLocker = new GeneralLocker(); GeneralTransition <TestClass> genTrans = new GeneralTransition <TestClass>(o => true, o => o.Number == 2 && o.Word == "ccc", o => { }, o => { o.Number = 3; o.Word = "ddd"; }, ExecutionMode.Synch, 0, gLocker, 0, Objects.ToList()); genTrans.Do(); Assert.IsTrue(gLocker.WasChanged); }
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); }
public void WasChangedGeneralTransitionTest() { //test1 IEnumerable<TestClass> Objects = ParallelEnumerable.Repeat<TestClass>(new TestClass(), 2); Objects.AsParallel().ForAll(o => { o.Number = 2; o.Word = "ccc"; }); GeneralLocker gLocker = new GeneralLocker(); GeneralTransition<TestClass> genTrans = new GeneralTransition<TestClass>(o => true, o => o.Number == 2 && o.Word == "ccc", o => { }, o => { o.Number = 3; o.Word = "ddd"; }, ExecutionMode.Synch, 0, gLocker, 0, Objects.ToList()); genTrans.Do(); Assert.IsTrue(gLocker.WasChanged); }