summaryrefslogtreecommitdiff
path: root/tests/src/baseservices/threading/generics/Monitor/EnterExit05.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/baseservices/threading/generics/Monitor/EnterExit05.cs')
-rw-r--r--tests/src/baseservices/threading/generics/Monitor/EnterExit05.cs99
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/src/baseservices/threading/generics/Monitor/EnterExit05.cs b/tests/src/baseservices/threading/generics/Monitor/EnterExit05.cs
new file mode 100644
index 0000000000..e203506d96
--- /dev/null
+++ b/tests/src/baseservices/threading/generics/Monitor/EnterExit05.cs
@@ -0,0 +1,99 @@
+// 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;
+
+
+public struct ValX1<T> {}
+public class RefX1<T> {}
+
+class Gen<T>
+{
+ public static void EnterExitTest()
+ {
+ Type monitor = typeof(Gen<T>).GetGenericTypeDefinition();
+ TestHelper myHelper = new TestHelper(Test.nThreads);
+
+ // MonitorDelegate[] consumer = new MonitorDelegate[Test.nThreads];
+ // for(int i=0;i<Test.nThreads;i++)
+ // {
+ // consumer[i] = new MonitorDelegate(myHelper.Consumer);
+ // consumer[i].BeginInvoke(monitor,null,null);
+ // }
+
+ for (int i = 0; i < Test.nThreads; i++)
+ {
+ ThreadPool.QueueUserWorkItem(state =>
+ {
+ myHelper.Consumer(monitor);
+ });
+ }
+
+ for(int i=0;i<6;i++)
+ {
+ if(myHelper.m_Event.WaitOne(10000))//,true))
+ break;
+ if(myHelper.Error == true)
+ break;
+ }
+ Test.Eval(!myHelper.Error);
+ }
+}
+
+public class Test
+{
+ public static int nThreads = 10;
+ public static int counter = 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<int>.EnterExitTest();
+ Gen<double>.EnterExitTest();
+ Gen<string>.EnterExitTest();
+ Gen<object>.EnterExitTest();
+ Gen<Guid>.EnterExitTest();
+
+ Gen<int[]>.EnterExitTest();
+ Gen<double[,]>.EnterExitTest();
+ Gen<string[][][]>.EnterExitTest();
+ Gen<object[,,,]>.EnterExitTest();
+ Gen<Guid[][,,,][]>.EnterExitTest();
+
+ Gen<RefX1<int>[]>.EnterExitTest();
+ Gen<RefX1<double>[,]>.EnterExitTest();
+ Gen<RefX1<string>[][][]>.EnterExitTest();
+ Gen<RefX1<object>[,,,]>.EnterExitTest();
+ Gen<RefX1<Guid>[][,,,][]>.EnterExitTest();
+
+ Gen<ValX1<int>[]>.EnterExitTest();
+ Gen<ValX1<double>[,]>.EnterExitTest();
+ Gen<ValX1<string>[][][]>.EnterExitTest();
+ Gen<ValX1<object>[,,,]>.EnterExitTest();
+ Gen<ValX1<Guid>[][,,,][]>.EnterExitTest();
+
+ if (result)
+ {
+ Console.WriteLine("Test Passed");
+ return 100;
+ }
+ else
+ {
+ Console.WriteLine("Test Failed");
+ return 1;
+ }
+ }
+}
+
+