Merge pull request #3979 from radical/fix-xbuild-tgt
[mono.git] / mcs / tests / gtest-117.cs
index 71dc3b8cd3d9bdb0afa8de23b3580e065af5de89..e1e54267b8e7f454420a630b289282625daf0a98 100644 (file)
@@ -1,5 +1,9 @@
+// Compiler options: -warnaserror
+
 using System;
 
+enum E { Item };
+
 public interface IFoo<T>
 { }
 
@@ -9,12 +13,95 @@ public class Foo<T>
        {
                return x is IFoo<T>;
        }
+       
+       public static bool Test ()
+       {
+               T t = default (T);
+               return t is int;
+       }
+       
+       public static bool TestB ()
+       {
+               T t = default (T);
+               return t is int?;
+       }
+}
+
+class Y<T> where T : struct
+{
+       public bool Foo ()
+       {
+               object o = null;
+               return o is System.Nullable <T>;
+       }
 }
 
 class X
 {
-       static void Main ()
+       public static bool TestA (object o)
+       {
+               return o is int?;
+       }
+       
+       public static bool TestB<T> (T o)
        {
-               Foo<int>.Test (3);
+               return o is int[];
+       }
+       
+       public static int TestC ()
+       {
+               int? i = null;
+               if (i is int) {
+                       return (int) i;
+               }
+               
+               return 3;
+       }
+       
+       static bool Check1 (E? e)
+       {
+               return e is Enum;
+       }
+
+       static bool Check2<T> (E e) where T : struct
+       {
+               return e is T;
+       }
+       
+       public static int Main ()
+       {
+               if (Foo<int>.Test (3))
+                       return 1;
+               
+               if (!Foo<int>.Test())
+                       return 2;
+               
+               // False expected int? != null
+               if (Foo<int?>.TestB())
+                       return 3;
+
+               int? i = 0;
+               if (!TestA(i))
+                       return 4;
+               
+               int[] a = new int[0];
+               if (!TestB(a))
+                       return 5;
+               
+               if (TestC () != 3)
+                       return 6;
+               
+               if (Check1 (null))
+                       return 7;
+
+               if (!Check1 (E.Item))
+                       return 8;
+
+               if (Check2<int> (E.Item))
+                       return 9;
+               
+               Console.WriteLine ("OK");
+               return 0;
        }
 }
+