diff options
Diffstat (limited to 'tests/src/baseservices/threading/generics/TimerCallback/thread18.cs')
-rw-r--r-- | tests/src/baseservices/threading/generics/TimerCallback/thread18.cs | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/tests/src/baseservices/threading/generics/TimerCallback/thread18.cs b/tests/src/baseservices/threading/generics/TimerCallback/thread18.cs new file mode 100644 index 0000000000..6e1db0802a --- /dev/null +++ b/tests/src/baseservices/threading/generics/TimerCallback/thread18.cs @@ -0,0 +1,85 @@ +// 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; + +interface IGen +{ + void Target<U>(object p); +} + +class Gen : IGen +{ + public virtual void Target<U>(object p) + { + //dummy line to avoid warnings + Test.Eval(typeof(U)!=p.GetType()); + if (Test.Xcounter>=Test.nThreads) + { + ManualResetEvent evt = (ManualResetEvent) p; + evt.Set(); + } + else + { + Interlocked.Increment(ref Test.Xcounter); + } + } + + public static void ThreadPoolTest<U>() + { + ManualResetEvent evt = new ManualResetEvent(false); + + IGen obj = new Gen(); + + TimerCallback tcb = new TimerCallback(obj.Target<U>); + Timer timer = new Timer(tcb,evt,Test.delay,Test.period); + + evt.WaitOne(); + timer.Dispose(); + Test.Eval(Test.Xcounter>=Test.nThreads); + Test.Xcounter = 0; + } +} + +public class Test +{ + public static int delay = 0; + public static int period = 2; + public static int nThreads = 5; + 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; + } + } +} + + |