Add consistency unit test for ManualResetEventSlim between internal state and WaitHan...
authorJeremie Laval <jeremie.laval@gmail.com>
Thu, 5 Apr 2012 11:19:19 +0000 (12:19 +0100)
committerJeremie Laval <jeremie.laval@gmail.com>
Tue, 10 Apr 2012 11:39:02 +0000 (12:39 +0100)
mcs/class/corlib/Test/System.Threading/ManualResetEventSlimTests.cs

index 75b124c06117fac041468af9406112dd6a0480fd..a450951aca7a18de83662817990b9e4d1f554139 100644 (file)
@@ -214,6 +214,25 @@ namespace MonoTests.System.Threading
                        Assert.IsTrue (mre.WaitHandle.WaitOne (0), "#2");
                }
 
+               [Test]
+               public void WaitHandleConsistencyTest ()
+               {
+                       var mre = new ManualResetEventSlim ();
+                       mre.WaitHandle.WaitOne (0);
+
+                       for (int i = 0; i < 10000; i++) {
+                               int count = 2;
+                               SpinWait wait = new SpinWait ();
+
+                               ThreadPool.QueueUserWorkItem (_ => { mre.Set (); Interlocked.Decrement (ref count); });
+                               ThreadPool.QueueUserWorkItem (_ => { mre.Reset (); Interlocked.Decrement (ref count); });
+
+                               while (count > 0)
+                                       wait.SpinOnce ();
+                               Assert.AreEqual (mre.IsSet, mre.WaitHandle.WaitOne (0));
+                       }
+               }
+
                [Test]
                public void Dispose ()
                {