summaryrefslogtreecommitdiff
path: root/tests/src/baseservices/threading/generics/WaitCallback/thread30.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/baseservices/threading/generics/WaitCallback/thread30.cs')
-rw-r--r--tests/src/baseservices/threading/generics/WaitCallback/thread30.cs78
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;
+ }
+ }
+}
+
+