2010-06-17 Geoff Norton <gnorton@novell.com>
[mono.git] / mono / tests / synchronized.cs
blob86ea9a8f02ca45379eba52cd523dbf8c7ce8cf3c
1 //
2 // synchronized.cs:
3 //
4 // Tests for the 'synchronized' method attribute
5 //
7 using System;
8 using System.Threading;
9 using System.Runtime.CompilerServices;
11 class Tests {
13 // We use Monitor.Pulse to test that the object is synchronized
15 [MethodImplAttribute(MethodImplOptions.Synchronized)]
16 public int test () {
17 Monitor.Pulse (this);
18 //Monitor.Enter (this);
19 return 2 + 2;
22 [MethodImplAttribute(MethodImplOptions.Synchronized)]
23 public static int test_static () {
24 Monitor.Pulse (typeof (Tests));
25 return 2 + 2;
28 [MethodImplAttribute(MethodImplOptions.Synchronized)]
29 public int test_exception () {
30 Monitor.Exit (this);
31 throw new Exception ("A");
34 [MethodImplAttribute(MethodImplOptions.Synchronized)]
35 public virtual int test_virtual () {
36 Monitor.Pulse (this);
37 return 2 + 2;
40 public static bool is_synchronized (object o) {
41 try {
42 Monitor.Pulse (o);
44 catch (SynchronizationLockException ex) {
45 return false;
47 return true;
50 public delegate int Delegate1 ();
52 static public int Main (String[] args) {
53 Tests b = new Tests ();
54 int res, err;
56 Console.WriteLine ("Test1...");
57 b.test ();
58 if (is_synchronized (b))
59 return 1;
61 Console.WriteLine ("Test2...");
62 test_static ();
63 if (is_synchronized (typeof (Tests)))
64 return 1;
66 Console.WriteLine ("Test3...");
67 try {
68 b.test_exception ();
70 catch (SynchronizationLockException ex) {
71 return 1;
73 catch (Exception ex) {
74 // OK
76 if (is_synchronized (b))
77 return 1;
79 Console.WriteLine ("Test4...");
80 b.test_virtual ();
81 if (is_synchronized (b))
82 return 1;
84 Console.WriteLine ("Test5...");
85 Delegate1 d = new Delegate1 (b.test);
86 res = d ();
87 if (is_synchronized (b))
88 return 1;
90 Console.WriteLine ("Test6...");
91 d = new Delegate1 (test_static);
92 res = d ();
93 if (is_synchronized (typeof (Tests)))
94 return 1;
96 Console.WriteLine ("Test7...");
97 d = new Delegate1 (b.test_virtual);
98 res = d ();
99 if (is_synchronized (b))
100 return 1;
102 Console.WriteLine ("Test8...");
103 d = new Delegate1 (b.test_exception);
104 try {
105 d ();
107 catch (SynchronizationLockException ex) {
108 return 2;
110 catch (Exception ex) {
111 // OK
113 if (is_synchronized (b))
114 return 1;
116 return 0;