[System] Tweak socket test
[mono-project.git] / mono / tests / enum-intrins.cs
blob8ad3da1275f89b0e59a595b9c870da04e50b2f4a
1 /*
2 * enum-intrins.cs: Tests for Enum.HasFlag () intrinsic.
3 */
5 using System;
7 namespace Test {
9 enum ByteEnum : byte {
10 A = 1,
11 B = 2,
12 C = 4,
15 enum SByteEnum : sbyte {
16 A = 1,
17 B = 2,
18 C = 4,
21 enum ShortEnum : short {
22 A = 1,
23 B = 2,
24 C = 4,
27 enum UShortEnum : ushort {
28 A = 1,
29 B = 2,
30 C = 4,
33 enum IntEnum : int {
34 A = 1,
35 B = 2,
36 C = 4,
39 enum UIntEnum : uint {
40 A = 1,
41 B = 2,
42 C = 4,
45 enum LongEnum : long {
46 A = 1,
47 B = 2,
48 C = 4,
51 enum ULongEnum : ulong {
52 A = 1,
53 B = 2,
54 C = 4,
57 public class Test {
59 static int TestIntrinsic ()
61 var byteEnum1 = ByteEnum.A | ByteEnum.B;
62 if (byteEnum1.HasFlag (ByteEnum.C))
63 return 1;
65 var byteEnum2 = ByteEnum.A | ByteEnum.C;
66 if (!byteEnum2.HasFlag (ByteEnum.C))
67 return 2;
69 var sbyteEnum1 = SByteEnum.A | SByteEnum.B;
70 if (sbyteEnum1.HasFlag (SByteEnum.C))
71 return 3;
73 var sbyteEnum2 = SByteEnum.A | SByteEnum.C;
74 if (!sbyteEnum2.HasFlag (SByteEnum.C))
75 return 4;
77 var shortEnum1 = ShortEnum.A | ShortEnum.B;
78 if (shortEnum1.HasFlag (ShortEnum.C))
79 return 5;
81 var shortEnum2 = ShortEnum.A | ShortEnum.C;
82 if (!shortEnum2.HasFlag (ShortEnum.C))
83 return 6;
85 var ushortEnum1 = UShortEnum.A | UShortEnum.B;
86 if (ushortEnum1.HasFlag (UShortEnum.C))
87 return 7;
89 var ushortEnum2 = UShortEnum.A | UShortEnum.C;
90 if (!ushortEnum2.HasFlag (UShortEnum.C))
91 return 8;
93 var intEnum1 = IntEnum.A | IntEnum.B;
94 if (intEnum1.HasFlag (IntEnum.C))
95 return 9;
97 var intEnum2 = IntEnum.A | IntEnum.C;
98 if (!intEnum2.HasFlag (IntEnum.C))
99 return 10;
101 var uintEnum1 = UIntEnum.A | UIntEnum.B;
102 if (uintEnum1.HasFlag (UIntEnum.C))
103 return 11;
105 var uintEnum2 = UIntEnum.A | UIntEnum.C;
106 if (!uintEnum2.HasFlag (UIntEnum.C))
107 return 12;
109 var longEnum1 = LongEnum.A | LongEnum.B;
110 if (longEnum1.HasFlag (LongEnum.C))
111 return 13;
113 var longEnum2 = LongEnum.A | LongEnum.C;
114 if (!longEnum2.HasFlag (LongEnum.C))
115 return 14;
117 var ulongEnum1 = ULongEnum.A | ULongEnum.B;
118 if (ulongEnum1.HasFlag (ULongEnum.C))
119 return 15;
121 var ulongEnum2 = ULongEnum.A | ULongEnum.C;
122 if (!ulongEnum2.HasFlag (ULongEnum.C))
123 return 16;
125 return 0;
128 static int TestBoxed ()
130 /* The casts to Enum will make the JIT's pattern matching miss the call. */
132 var byteEnum1 = ByteEnum.A | ByteEnum.B;
133 if (byteEnum1.HasFlag ((Enum)(object) ByteEnum.C))
134 return 1;
136 var byteEnum2 = ByteEnum.A | ByteEnum.C;
137 if (!byteEnum2.HasFlag ((Enum)(object) ByteEnum.C))
138 return 2;
140 var sbyteEnum1 = SByteEnum.A | SByteEnum.B;
141 if (sbyteEnum1.HasFlag ((Enum)(object) SByteEnum.C))
142 return 3;
144 var sbyteEnum2 = SByteEnum.A | SByteEnum.C;
145 if (!sbyteEnum2.HasFlag ((Enum)(object) SByteEnum.C))
146 return 4;
148 var shortEnum1 = ShortEnum.A | ShortEnum.B;
149 if (shortEnum1.HasFlag ((Enum)(object) ShortEnum.C))
150 return 5;
152 var shortEnum2 = ShortEnum.A | ShortEnum.C;
153 if (!shortEnum2.HasFlag ((Enum)(object) ShortEnum.C))
154 return 6;
156 var ushortEnum1 = UShortEnum.A | UShortEnum.B;
157 if (ushortEnum1.HasFlag ((Enum)(object) UShortEnum.C))
158 return 7;
160 var ushortEnum2 = UShortEnum.A | UShortEnum.C;
161 if (!ushortEnum2.HasFlag ((Enum)(object) UShortEnum.C))
162 return 8;
164 var intEnum1 = IntEnum.A | IntEnum.B;
165 if (intEnum1.HasFlag ((Enum)(object) IntEnum.C))
166 return 9;
168 var intEnum2 = IntEnum.A | IntEnum.C;
169 if (!intEnum2.HasFlag ((Enum)(object) IntEnum.C))
170 return 10;
172 var uintEnum1 = UIntEnum.A | UIntEnum.B;
173 if (uintEnum1.HasFlag ((Enum)(object) UIntEnum.C))
174 return 11;
176 var uintEnum2 = UIntEnum.A | UIntEnum.C;
177 if (!uintEnum2.HasFlag ((Enum)(object) UIntEnum.C))
178 return 12;
180 var longEnum1 = LongEnum.A | LongEnum.B;
181 if (longEnum1.HasFlag ((Enum)(object) LongEnum.C))
182 return 13;
184 var longEnum2 = LongEnum.A | LongEnum.C;
185 if (!longEnum2.HasFlag ((Enum)(object) LongEnum.C))
186 return 14;
188 var ulongEnum1 = ULongEnum.A | ULongEnum.B;
189 if (ulongEnum1.HasFlag ((Enum)(object) ULongEnum.C))
190 return 15;
192 var ulongEnum2 = ULongEnum.A | ULongEnum.C;
193 if (!ulongEnum2.HasFlag ((Enum)(object) ULongEnum.C))
194 return 16;
196 return 0;
199 public static int Main ()
201 int res;
203 if ((res = TestIntrinsic ()) != 0)
204 return res;
206 if ((res = TestBoxed ()) != 0)
207 return res;
209 return 0;