public void WithReadLockNullActionTest()
 {
     var l = new ReaderWriterLock();
     l.WithReadLock(null);
 }
 public void WithReadLockWithExceptionTest()
 {
     var l = new ReaderWriterLock();
     Assert.IsFalse(l.IsReaderLockHeld);
     var thrown = false;
     try
     {
         l.WithReadLock(() =>
         {
             Assert.IsTrue(l.IsReaderLockHeld);
             throw new InvalidOperationException();
         });
     }
     catch (InvalidOperationException)
     {
         thrown = true;
     }
     Assert.IsFalse(l.IsReaderLockHeld);
     Assert.IsTrue(thrown);
 }
 public void WithReadLockTimeoutWithExceptionTest()
 {
     var l = new ReaderWriterLock();
     var e = new AutoResetEvent(false);
     var lockGetted = false;
     var t = new Thread(() =>
     {
         var b = false;
         try
         {
             l.WithReadLock(() =>
             {
                 lockGetted = true;
                 Assert.IsTrue(l.IsReaderLockHeld);
                 throw new InvalidOperationException();
             }, TimeSpan.FromSeconds(5));
         }
         catch (InvalidOperationException)
         {
             b = true;
         }
         Assert.IsTrue(b);
         e.Set();
     });
     l.AcquireWriterLock(100);
     t.Start();
     Thread.Sleep(1000);
     Assert.IsFalse(lockGetted);
     l.ReleaseWriterLock();
     e.WaitOne();
     Assert.IsFalse(l.IsReaderLockHeld);
 }
 public void WithReadLockTimeoutSuccessTest()
 {
     var l = new ReaderWriterLock();
     var e = new AutoResetEvent(false);
     var lockGetted = false;
     var t = new Thread(() =>
     {
         l.WithReadLock(() =>
         {
             Assert.IsTrue(l.IsReaderLockHeld);
             lockGetted = true;
         }, TimeSpan.FromSeconds(5));
         e.Set();
     });
     l.AcquireWriterLock(100);
     t.Start();
     Thread.Sleep(1000);
     Assert.IsFalse(lockGetted);
     l.ReleaseWriterLock();
     e.WaitOne();
     Assert.IsTrue(lockGetted);
 }
 public void WithReadLockTimeoutNullActionTest()
 {
     var l = new ReaderWriterLock();
     l.WithReadLock(null, TimeSpan.Zero);
 }
 public void WithReadLockSuccessTest()
 {
     var l = new ReaderWriterLock();
     Assert.IsFalse(l.IsReaderLockHeld);
     l.WithReadLock(() => { Assert.IsTrue(l.IsReaderLockHeld); });
     Assert.IsFalse(l.IsReaderLockHeld);
 }