diff options
Diffstat (limited to 'tests/src/baseservices/threading/generics/WaitCallback/thread30.cs')
-rw-r--r-- | tests/src/baseservices/threading/generics/WaitCallback/thread30.cs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/src/baseservices/threading/generics/WaitCallback/thread30.cs b/tests/src/baseservices/threading/generics/WaitCallback/thread30.cs new file mode 100644 index 0000000000..ef14e682ed --- /dev/null +++ b/tests/src/baseservices/threading/generics/WaitCallback/thread30.cs @@ -0,0 +1,78 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +using System; +using System.Threading; + +struct Gen +{ + public static void Target<U>(object p) + { + //dummy line to avoid warnings + Test.Eval(typeof(U)!=p.GetType()); + ManualResetEvent evt = (ManualResetEvent) p; + Interlocked.Increment(ref Test.Xcounter); + evt.Set(); + } + public static void ThreadPoolTest<U>() + { + ManualResetEvent[] evts = new ManualResetEvent[Test.nThreads]; + WaitHandle[] hdls = new WaitHandle[Test.nThreads]; + + for (int i=0; i<Test.nThreads; i++) + { + evts[i] = new ManualResetEvent(false); + hdls[i] = (WaitHandle) evts[i]; + } + + for (int i = 0; i < Test.nThreads; i++) + { + WaitCallback cb = new WaitCallback(Gen.Target<U>); + ThreadPool.QueueUserWorkItem(cb,evts[i]); + } + + WaitHandle.WaitAll(hdls); + Test.Eval(Test.Xcounter==Test.nThreads); + Test.Xcounter = 0; + } +} + +public class Test +{ + public static int nThreads =50; + public static int counter = 0; + public static int Xcounter = 0; + public static bool result = true; + public static void Eval(bool exp) + { + counter++; + if (!exp) + { + result = exp; + Console.WriteLine("Test Failed at location: " + counter); + } + + } + + public static int Main() + { + Gen.ThreadPoolTest<object>(); + Gen.ThreadPoolTest<string>(); + Gen.ThreadPoolTest<Guid>(); + Gen.ThreadPoolTest<int>(); + Gen.ThreadPoolTest<double>(); + + if (result) + { + Console.WriteLine("Test Passed"); + return 100; + } + else + { + Console.WriteLine("Test Failed"); + return 1; + } + } +} + + |