X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Farrays.cs;h=65606e0d2b2e90403dbe9a77d332055f0d5095ef;hb=04713a947f77fb5a41d66d39aaaeadb8c7049fe6;hp=012bdfdf7565646297e52a6a20b6c9c2bb4d51db;hpb=75df74a96c33af7a99e16e4281272f1b67334a48;p=mono.git diff --git a/mono/mini/arrays.cs b/mono/mini/arrays.cs index 012bdfdf756..65606e0d2b2 100644 --- a/mono/mini/arrays.cs +++ b/mono/mini/arrays.cs @@ -437,6 +437,13 @@ class Tests { return 0; } + public static int test_100_3_dimensional_arrays () { + int[,,] test = new int[10, 10, 10]; + + test [1, 1, 1] = 100; + return test [1, 1, 1]; + } + public static int test_0_bug_71454 () { int[,] a = new int[4,4]; int[,] b = new int[4,4]; @@ -476,6 +483,254 @@ class Tests { 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_multidym_array_with_negative_lower_bound () { + int[,] x = (int[,]) Array.CreateInstance(typeof (int), new int[] { 2, 2 }, new int[] { -2, -3 }); + + if(x.GetLowerBound (0) != -2) + return 1; + if (x.GetLowerBound (1) != -3) + return 2; + + x.SetValue (10, new int [] { -2, -3 }); + x.SetValue (20, new int [] { -2, -2 }); + x.SetValue (30, new int [] { -1, -3 }); + x.SetValue (40, new int [] { -1, -2 }); + + try { + x.SetValue (10, new int [] { -3, -3 }); + return 3; + } catch (IndexOutOfRangeException) { } + + try { + x.SetValue (10, new int [] { -2, -4 }); + return 4; + } catch (IndexOutOfRangeException) { } + + try { + x.SetValue (10, new int [] { 0, -3 }); + return 5; + } catch (IndexOutOfRangeException) { } + + try { + x.SetValue (10, new int [] { -1, -1 }); + return 6; + } catch (IndexOutOfRangeException) { } + + if ((int)x.GetValue (new int [] { -2, -3 }) != 10) + return 7; + if ((int)x.GetValue (new int [] { -2, -2 }) != 20) + return 8; + if ((int)x.GetValue (new int [] { -1, -3 }) != 30) + return 9; + if ((int)x.GetValue (new int [] { -1, -2 }) != 40) + return 10; + + try { + x.GetValue (new int [] { -3, -3 }); + return 11; + } catch (IndexOutOfRangeException) { } + + try { + x.GetValue ( new int [] { -2, -4 }); + return 12; + } catch (IndexOutOfRangeException) { } + + try { + x.GetValue (new int [] { 0, -3 }); + return 13; + } catch (IndexOutOfRangeException) { } + + try { + x.GetValue (new int [] { -1, -1 }); + return 14; + } catch (IndexOutOfRangeException) { } + 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; + } + + public enum IntEnum { + A,B,C + } + + public enum UintEnum : uint { + A,B,C + } + + static bool TryCast (object o) { + return o is T[]; + } + + public static int test_0_primitive_array_cast () { + object a = new int[1]; + object b = new uint[1]; + object c = new IntEnum[1]; + object d = new UintEnum[1]; + + object[] arr = new object[] { a, b, c, d }; + int err = 1; + + foreach (var v in arr) { + if (!TryCast (v)) + return err; + if (!TryCast (v)) + return err + 1; + if (!TryCast (v)) + return err + 2; + if (!TryCast (v)) + return err + 3; + err += 4; + } + + foreach (var v in arr) { + if (!(v is int[])) + return err; + if (!(v is uint[])) + return err; + if (!(v is IntEnum[])) + return err; + if (!(v is UintEnum[])) + return err; + err += 4; + } + return 0; + } + + public static int test_0_intptr_array_cast () { + object[] a = new object[] { new int[1], new uint[1] }; + object[] b = new object[] { new long[1], new ulong[1] }; + object[] c = new object[] { new IntPtr[1], new UIntPtr[1] }; + + int err = 1; + if (IntPtr.Size == 4) { + foreach (var v in a) { + if (!(v is IntPtr[])) + return err; + if (!(v is IntPtr[])) + return err; + err += 2; + } + foreach (var v in b) { + if (v is IntPtr[]) + return err; + if (v is IntPtr[]) + return err; + err += 2; + } + + foreach (var v in c) { + if (!(v is int[])) + return err; + if (!(v is uint[])) + return err; + err += 2; + } + } else { + foreach (var v in a) { + if (v is IntPtr[]) + return err; + if (v is IntPtr[]) + return err; + err += 2; + } + foreach (var v in b) { + if (!(v is IntPtr[])) + return err; + if (!(v is IntPtr[])) + return err; + err += 2; + } + foreach (var v in c) { + if (!(v is long[])) + return err; + if (!(v is ulong[])) + return err; + err += 2; + } + } + return 0; + } + + public static int long_indices () { + int[] arr = new int [10]; + int[,] arr2 = new int [10, 10]; + long index = 1; + arr [index] = 5; + if (arr [index] != 5) + return 1; + arr2 [index, index] = 5; + if (arr2 [index, index] != 5) + return 2; + return 0; + } }