static void Main(string[] args) { CLock MyClock = new CLock(23, 59, 56); void AlarmFunc(int hour) { Console.WriteLine($"This is {hour} o'clock now."); } void TickFunc(int second, int minite, int hour) { Console.WriteLine("Tic tok."); } MyClock.AlarmClock += AlarmFunc; MyClock.TickClock += TickFunc; MyClock.WorkingClock(); }
public void Lock_Integration(ALock aLock, BLock bLock, CLock cLock, ALock nullLock) { nullLock.Lock = null; nullLock.Hash = 0; aLock.Lock = new object(); aLock.Hash = 1; bLock.Lock = new object(); bLock.Hash = 2; cLock.Lock = new object(); cLock.Hash = 3; Monitor.Enter(cLock.Lock); bool locked = false; bool hasException = false; var thread = new Thread(() => { try { locker.Lock(new ILockable[] { cLock, nullLock, bLock, aLock }).Do(() => { locked = true; }); } catch (Exception) { hasException = true; } }); thread.Start(); Thread.Sleep(200); locked.Should().BeFalse(); enterObjects.Should().Equal(aLock.Lock, bLock.Lock); Monitor.Exit(cLock.Lock); thread.Join(1000); hasException.Should().BeFalse(); enterObjects.Should().Equal(aLock.Lock, bLock.Lock, cLock.Lock); exitObjects.Should().Equal(cLock.Lock, bLock.Lock, aLock.Lock); }
public void VisitLock(CLock @lock) { @lock.Accept(visitor); }
public void UnlockAll_WhenCalled_ShouldAllowToLockAgain(ALock aLock, BLock bLock, CLock cLock) { aLock.Lock = new object(); bLock.Lock = new object(); cLock.Lock = new object(); aLock.Hash = 100; bLock.Hash = 100; cLock.Hash = 100; locker.Lock(new ILockable[] { aLock, cLock, bLock }); locker.UnlockAll(); locker.Lock(new ILockable[] { aLock, cLock, bLock }); locker.UnlockAll(); enterObjects.Should().Equal(aLock.Lock, bLock.Lock, cLock.Lock, aLock.Lock, bLock.Lock, cLock.Lock); exitObjects.Should().Equal(cLock.Lock, bLock.Lock, aLock.Lock, cLock.Lock, bLock.Lock, aLock.Lock); }
public void UnlockAll_WhenCalledMultipleTimes_ShouldNotUnlockObjectsTwice(ALock aLock, BLock bLock, CLock cLock) { aLock.Lock = new object(); bLock.Lock = new object(); cLock.Lock = new object(); aLock.Hash = 100; bLock.Hash = 100; cLock.Hash = 100; locker.Lock(new ILockable[] { aLock, cLock, bLock }); locker.UnlockAll(); locker.UnlockAll(); exitObjects.Should().Equal(cLock.Lock, bLock.Lock, aLock.Lock); }
public void UnlockAll_WhenCalled_ShouldUnlockObjectsInReverseOrder(ALock aLock, BLock bLock, CLock cLock) { aLock.Lock = new object(); bLock.Lock = new object(); cLock.Lock = new object(); aLock.Hash = 100; bLock.Hash = 100; cLock.Hash = 100; locker.Lock(new ILockable[] { aLock, cLock, bLock }); exitObjects.Should().BeEmpty(); locker.UnlockAll(); exitObjects.Should().Equal(cLock.Lock, bLock.Lock, aLock.Lock); }
public void Lock_WhenCalledWithCollidingHashes_ShouldUseTypeNameToSort(ALock aLock, BLock bLock, CLock cLock) { aLock.Lock = new object(); bLock.Lock = new object(); cLock.Lock = new object(); aLock.Hash = 100; bLock.Hash = 100; cLock.Hash = 100; locker.Lock(new ILockable[] { aLock, cLock, bLock }); enterObjects.Should().Equal(aLock.Lock, bLock.Lock, cLock.Lock); }