+//
+// 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;
}
}