X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Farrays.cs;h=3775332690c554f0d8daf82b2b783535fdde48bc;hb=279b47e476642431c7f96e105ed32f133d6ed5a3;hp=380f7c7cd1c0d99ca3974fdd533df15f08fc1d96;hpb=7f449e7aff8f374d13db7023c7b326dde01b763d;p=mono.git diff --git a/mono/mini/arrays.cs b/mono/mini/arrays.cs index 380f7c7cd1c..3775332690c 100644 --- a/mono/mini/arrays.cs +++ b/mono/mini/arrays.cs @@ -29,23 +29,23 @@ class Tests { return TestDriver.RunTests (typeof (Tests)); } - static int test_10_create () { + public static int test_10_create () { int[] a = new int [10]; return a.Length; } - static int test_0_unset_value () { + public static int test_0_unset_value () { int[] a = new int [10]; return a [5]; } - static int test_3_set_value () { + public static int test_3_set_value () { int[] a = new int [10]; a [5] = 3; return a [5]; } - static int test_0_char_array_1 () { + public static int test_0_char_array_1 () { int value = -30; char[] tmp = new char [20]; char[] digitLowerTable = new char[16]; @@ -53,7 +53,7 @@ class Tests { return 0; } - static int test_0_char_array_2 () { + public static int test_0_char_array_2 () { int value = 5; char[] tmp = new char [20]; char[] digitLowerTable = new char[16]; @@ -61,7 +61,7 @@ class Tests { return 0; } - static int test_0_char_array_3 () { + public static int test_0_char_array_3 () { int value = -1; char[] tmp = new char [20]; char[] digitLowerTable = new char[16]; @@ -69,7 +69,7 @@ class Tests { return 0; } - unsafe static int test_0_byte_array () { + public unsafe static int test_0_byte_array () { byte [] src = new byte [8]; double ret; byte *dst = (byte *)&ret; @@ -156,5 +156,395 @@ class Tests { helper1 h = new helper1 (); return 2; } + + public static int test_0_stelemref_1 () { + object [] o = new object [1]; + o [0] = null; + + return 0; + } + + public static int test_0_stelemref_2 () { + object [] o = new object [1]; + o [0] = 1; + + return 0; + } + + interface IFace {} + class Face : IFace {} + + public static int test_0_stelemref_3 () { + object [] o = new IFace [1]; + o [0] = new Face (); + + return 0; + } + + public static int test_0_stelemref_4 () { + object [][] o = new object [5] []; + o [0] = new object [5]; + + return 0; + } + + struct FooStruct { + public int i; + + public FooStruct (int i) { + this.i = i; + } + } + + public static int test_0_arrays () { + + int sum; + + byte[] a1 = new byte [10]; + for (int i = 0; i < 10; ++i) + a1 [i] = (byte)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a1 [i]; + if (sum != 45) + return 1; + + sbyte[] a2 = new sbyte [10]; + for (int i = 0; i < 10; ++i) + a2 [i] = (sbyte)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a2 [i]; + if (sum != 45) + return 2; + + short[] a3 = new short [10]; + for (int i = 0; i < 10; ++i) + a3 [i] = (short)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a3 [i]; + if (sum != 45) + return 3; + + ushort[] a4 = new ushort [10]; + for (int i = 0; i < 10; ++i) + a4 [i] = (ushort)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a4 [i]; + if (sum != 45) + return 4; + + int[] a5 = new int [10]; + for (int i = 0; i < 10; ++i) + a5 [i] = (int)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a5 [i]; + if (sum != 45) + return 5; + + uint[] a6 = new uint [10]; + for (int i = 0; i < 10; ++i) + a6 [i] = (uint)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a6 [i]; + if (sum != 45) + return 6; + + long[] a7 = new long [10]; + for (int i = 0; i < 10; ++i) + a7 [i] = i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a7 [i]; + if (sum != 45) + return 7; + + ulong[] a8 = new ulong [10]; + for (int i = 0; i < 10; ++i) + a8 [i] = (ulong)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a8 [i]; + if (sum != 45) + return 8; + + float[] a9 = new float [10]; + for (int i = 0; i < 10; ++i) + a9 [i] = (float)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a9 [i]; + if (sum != 45) + return 9; + + double[] a10 = new double [10]; + for (int i = 0; i < 10; ++i) + a10 [i] = i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a10 [i]; + if (sum != 45) + return 10; + + object[] a11 = new object [10]; + object o = new Object (); + for (int i = 0; i < 10; ++i) + a11 [i] = o; + for (int i = 0; i < 10; ++i) + if (a11 [i] != o) + return 11; + + FooStruct[] a12 = new FooStruct [10]; + for (int i = 0; i < 10; ++i) + a12 [i] = new FooStruct (i); + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a12 [i].i; + if (sum != 45) + return 12; + + return 0; + } + + public static int test_0_multi_dimension_arrays () { + int sum; + + byte[,] a1 = new byte [10, 10]; + for (int i = 0; i < 10; ++i) + a1 [i, i] = (byte)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a1 [i, i]; + if (sum != 45) + return 1; + + sbyte[,] a2 = new sbyte [10, 10]; + for (int i = 0; i < 10; ++i) + a2 [i, i] = (sbyte)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a2 [i, i]; + if (sum != 45) + return 2; + + short[,] a3 = new short [10, 10]; + for (int i = 0; i < 10; ++i) + a3 [i, i] = (short)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a3 [i, i]; + if (sum != 45) + return 3; + + ushort[,] a4 = new ushort [10, 10]; + for (int i = 0; i < 10; ++i) + a4 [i, i] = (ushort)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a4 [i, i]; + if (sum != 45) + return 4; + + int[,] a5 = new int [10, 10]; + for (int i = 0; i < 10; ++i) + a5 [i, i] = (int)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += a5 [i, i]; + if (sum != 45) + return 5; + + uint[,] a6 = new uint [10, 10]; + for (int i = 0; i < 10; ++i) + a6 [i, i] = (uint)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a6 [i, i]; + if (sum != 45) + return 6; + + long[,] a7 = new long [10, 10]; + for (int i = 0; i < 10; ++i) + a7 [i, i] = i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a7 [i, i]; + if (sum != 45) + return 7; + + ulong[,] a8 = new ulong [10, 10]; + for (int i = 0; i < 10; ++i) + a8 [i, i] = (ulong)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a8 [i, i]; + if (sum != 45) + return 8; + + float[,] a9 = new float [10, 10]; + for (int i = 0; i < 10; ++i) + a9 [i, i] = (float)i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a9 [i, i]; + if (sum != 45) + return 9; + + double[,] a10 = new double [10, 10]; + for (int i = 0; i < 10; ++i) + a10 [i, i] = i; + sum = 0; + for (int i = 0; i < 10; ++i) + sum += (int)a10 [i, i]; + if (sum != 45) + return 10; + + object[,] a11 = new object [10, 10]; + object o = new Object (); + for (int i = 0; i < 10; ++i) + a11 [i, i] = o; + for (int i = 0; i < 10; ++i) + if (a11 [i, i] != o) + return 11; + + FooStruct[,] a12 = new FooStruct [10, 10]; + for (int i = 0; i < 10; ++i) + for (int j = 0; j < 10; ++j) { + /* This one calls Address */ + a12 [i, j] = new FooStruct (i + j); + + /* Test Set as well */ + FooStruct s = new FooStruct (i + j); + a12 [i, j] = s; + } + sum = 0; + for (int i = 0; i < 10; ++i) + for (int j = 0; j < 10; ++j) { + /* This one calls Address */ + sum += a12 [i, j].i; + + /* Test Get as well */ + FooStruct s = a12 [i, j]; + sum += s.i; + } + if (sum != 1800) + return 12; + + return 0; + } + + public static int test_0_bug_71454 () { + int[,] a = new int[4,4]; + int[,] b = new int[4,4]; + for(int i = 0; i < 4; ++i) { + b[0,0] = a[0,i % 4]; + } + return 0; + } + + public static int test_0_interface_array_cast () { + try { + object [] a = new ICloneable [2]; + ICloneable [] b = (ICloneable [])a; + } catch { + return 1; + } + return 0; + } + + class Foo { + public static Foo[][] foo; + } + + public static int test_0_regress_74549 () { + new Foo (); + return 0; + } + + public static int test_0_regress_75832 () { + int[] table = new int[] { 0, 0 }; + + int x = 0; + + int temp = -1 ^ x; + temp = 2 + temp; + int y = table[temp]; + + return y; + } + + public static int test_0_stelem_ref_null_opt () { + object[] arr = new Tests [1]; + + arr [0] = new Tests (); + arr [0] = null; + + return arr [0] == null ? 0 : 1; + } + + public static int test_0_invalid_new_array_size () { + int size; + object res = null; + size = -1; + try { + res = new float [size]; + } catch (OverflowException e) { + + } catch (Exception) { + return 1; + } + if (res != null) + return 2; + + size = -2147483648; + try { + res = new float [size]; + } catch (OverflowException e) { + + } catch (Exception) { + return 3; + } + + if (res != null) + return 4; + + return 0; + } + + + public static int test_0_invalid_new_multi_dym_array_size () { + int dym_size = 1; + int size; + object res = null; + size = -1; + try { + res = new float [dym_size, size]; + } catch (OverflowException e) { + + } catch (Exception) { + return 1; + } + if (res != null) + return 2; + + size = -2147483648; + try { + res = new float [size, dym_size]; + } catch (OverflowException e) { + + } catch (Exception) { + return 3; + } + + if (res != null) + return 4; + + return 0; + } } +