2 * enum-intrins.cs: Tests for Enum.HasFlag () intrinsic.
15 enum SByteEnum : sbyte {
21 enum ShortEnum : short {
27 enum UShortEnum : ushort {
39 enum UIntEnum : uint {
45 enum LongEnum : long {
51 enum ULongEnum : ulong {
59 static int TestIntrinsic ()
61 var byteEnum1 = ByteEnum.A | ByteEnum.B;
62 if (byteEnum1.HasFlag (ByteEnum.C))
65 var byteEnum2 = ByteEnum.A | ByteEnum.C;
66 if (!byteEnum2.HasFlag (ByteEnum.C))
69 var sbyteEnum1 = SByteEnum.A | SByteEnum.B;
70 if (sbyteEnum1.HasFlag (SByteEnum.C))
73 var sbyteEnum2 = SByteEnum.A | SByteEnum.C;
74 if (!sbyteEnum2.HasFlag (SByteEnum.C))
77 var shortEnum1 = ShortEnum.A | ShortEnum.B;
78 if (shortEnum1.HasFlag (ShortEnum.C))
81 var shortEnum2 = ShortEnum.A | ShortEnum.C;
82 if (!shortEnum2.HasFlag (ShortEnum.C))
85 var ushortEnum1 = UShortEnum.A | UShortEnum.B;
86 if (ushortEnum1.HasFlag (UShortEnum.C))
89 var ushortEnum2 = UShortEnum.A | UShortEnum.C;
90 if (!ushortEnum2.HasFlag (UShortEnum.C))
93 var intEnum1 = IntEnum.A | IntEnum.B;
94 if (intEnum1.HasFlag (IntEnum.C))
97 var intEnum2 = IntEnum.A | IntEnum.C;
98 if (!intEnum2.HasFlag (IntEnum.C))
101 var uintEnum1 = UIntEnum.A | UIntEnum.B;
102 if (uintEnum1.HasFlag (UIntEnum.C))
105 var uintEnum2 = UIntEnum.A | UIntEnum.C;
106 if (!uintEnum2.HasFlag (UIntEnum.C))
109 var longEnum1 = LongEnum.A | LongEnum.B;
110 if (longEnum1.HasFlag (LongEnum.C))
113 var longEnum2 = LongEnum.A | LongEnum.C;
114 if (!longEnum2.HasFlag (LongEnum.C))
117 var ulongEnum1 = ULongEnum.A | ULongEnum.B;
118 if (ulongEnum1.HasFlag (ULongEnum.C))
121 var ulongEnum2 = ULongEnum.A | ULongEnum.C;
122 if (!ulongEnum2.HasFlag (ULongEnum.C))
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))
136 var byteEnum2 = ByteEnum.A | ByteEnum.C;
137 if (!byteEnum2.HasFlag ((Enum)(object) ByteEnum.C))
140 var sbyteEnum1 = SByteEnum.A | SByteEnum.B;
141 if (sbyteEnum1.HasFlag ((Enum)(object) SByteEnum.C))
144 var sbyteEnum2 = SByteEnum.A | SByteEnum.C;
145 if (!sbyteEnum2.HasFlag ((Enum)(object) SByteEnum.C))
148 var shortEnum1 = ShortEnum.A | ShortEnum.B;
149 if (shortEnum1.HasFlag ((Enum)(object) ShortEnum.C))
152 var shortEnum2 = ShortEnum.A | ShortEnum.C;
153 if (!shortEnum2.HasFlag ((Enum)(object) ShortEnum.C))
156 var ushortEnum1 = UShortEnum.A | UShortEnum.B;
157 if (ushortEnum1.HasFlag ((Enum)(object) UShortEnum.C))
160 var ushortEnum2 = UShortEnum.A | UShortEnum.C;
161 if (!ushortEnum2.HasFlag ((Enum)(object) UShortEnum.C))
164 var intEnum1 = IntEnum.A | IntEnum.B;
165 if (intEnum1.HasFlag ((Enum)(object) IntEnum.C))
168 var intEnum2 = IntEnum.A | IntEnum.C;
169 if (!intEnum2.HasFlag ((Enum)(object) IntEnum.C))
172 var uintEnum1 = UIntEnum.A | UIntEnum.B;
173 if (uintEnum1.HasFlag ((Enum)(object) UIntEnum.C))
176 var uintEnum2 = UIntEnum.A | UIntEnum.C;
177 if (!uintEnum2.HasFlag ((Enum)(object) UIntEnum.C))
180 var longEnum1 = LongEnum.A | LongEnum.B;
181 if (longEnum1.HasFlag ((Enum)(object) LongEnum.C))
184 var longEnum2 = LongEnum.A | LongEnum.C;
185 if (!longEnum2.HasFlag ((Enum)(object) LongEnum.C))
188 var ulongEnum1 = ULongEnum.A | ULongEnum.B;
189 if (ulongEnum1.HasFlag ((Enum)(object) ULongEnum.C))
192 var ulongEnum2 = ULongEnum.A | ULongEnum.C;
193 if (!ulongEnum2.HasFlag ((Enum)(object) ULongEnum.C))
199 public static int Main ()
203 if ((res = TestIntrinsic ()) != 0)
206 if ((res = TestBoxed ()) != 0)