Merge pull request #4419 from BrzVlad/fix-oom-nre
[mono.git] / mcs / tests / test-34.cs
index 63fad11e04541d406a0f61a642849b0927550fa2..60399d53be433ea1f04e3e8dcd25eb38b6cdcdea 100644 (file)
+//
+// This test tests both how arguments are selected in the presence
+// of ref/out modifiers and the params arguments.
+//
 using System;
 
-public class Blah {
+public struct FancyInt {
+       public int value;
+
+       public FancyInt (int v)
+       {
+               value = v;
+       }
+       
+}
 
+public class Blah {
+       static int got;
+       
        public static void Foo (ref int i, ref int j)
        {
+               got = 1;
        }
 
-       public static void Bar (int i, params int [] args)
+       public static int Bar (int j, params int [] args)
        {
+               got = 2;
+               int total = 0;
+               
+               foreach (int i in args){
+                       Console.WriteLine ("My argument: " + i);
+                       total += i;
+               }
+
+               return total;
        }
 
        public static void Foo (int i, int j)
        {
+               got = 3;
        }
 
+       static void In (ref int a)
+       {
+               a++;
+       }
+
+       static void Out (ref int a)
+       {
+               In (ref a);
+       }
+
+       static int AddArray (params int [] valores)
+       {
+               int total = 0;
+               
+               for (int i = 0; i < valores.Length; i++)
+                       total += valores [i];
+
+               return total;
+       }
+
+       static int AddFancy (params FancyInt [] vals)
+       {
+               int total = 0;
+               
+               for (int i = 0; i < vals.Length; i++)
+                       total += vals [i].value;
+
+               return total;
+       }
+       
+       
        public static int Main ()
        {
                int i = 1;
                int j = 2;
 
+               int [] arr = new int [2] { 0, 1 };
+
                Foo (i, j);
+               if (got != 3)
+                       return 1;
+               
                Foo (ref i, ref j);
+               if (got != 1)
+                       return 2;
+
+               if (Bar (i, j, 5, 4, 3, 3, 2) != 19)
+                       return 4;
+
+               //if (Bar (1, arr) != 1)
+               //      return 5;
+               
+               if (got != 2)
+                       return 3;
+
+               int k = 10;
+
+               Out (ref k);
+               if (k != 11)
+                       return 10;
+
+               int [] arr2 = new int [2] {1, 2};
+
+               if (AddArray (arr2) != 3)
+                       return 11;
+
+               FancyInt f_one = new FancyInt (1);
+               FancyInt f_two = new FancyInt (2);
+
+               if (AddFancy (f_one) != 1)
+                       return 12;
 
-               Bar (i, j);
+               if (AddFancy (f_one, f_two) != 3)
+                       return 13;
 
+               Console.WriteLine ("Test passes");
                return  0;
        }
 }