X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FTest%2FSystem%2FArrayTest.cs;h=36db33d6352b9ac3efc47122a7897ed4289ea21d;hb=410bb8a57e23a901ea47d8a74f88a20972de423d;hp=a1cc1a008cbec9353c146b199a7d85475a671282;hpb=20d845ca07479ece43da9e344c060e49887fd369;p=mono.git diff --git a/mcs/class/corlib/Test/System/ArrayTest.cs b/mcs/class/corlib/Test/System/ArrayTest.cs index a1cc1a008cb..36db33d6352 100644 --- a/mcs/class/corlib/Test/System/ArrayTest.cs +++ b/mcs/class/corlib/Test/System/ArrayTest.cs @@ -779,6 +779,14 @@ public class ArrayTest Array.CreateInstance (typeof (Int32), (long[])null); } + [Test] + public void CreateInstanceVoid () + { + Assert.Throws (delegate () { + Array.CreateInstance (typeof (void), 1); + }); + } + [Test] public void TestGetEnumerator() { String[] s1 = {"this", "is", "a", "test"}; @@ -995,7 +1003,6 @@ public class ArrayTest int[] myBoundArray = new int[1] { Int32.MinValue }; Array myExtremeArray=Array.CreateInstance ( typeof(String), myLengthArray, myBoundArray ); Assert.AreEqual (Int32.MaxValue, ((IList)myExtremeArray).IndexOf (42), "AD04"); - } [Test] @@ -2548,6 +2555,53 @@ public class ArrayTest Assert.AreEqual (4, indices [0]); } + [Test] + public void TestSortComparable() + { + int[] source = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int[] expected = { 6, 5, 4, 3, 2, 1, 7, 8, 9 }; + Comp[] c = { new Comp (100), new Comp (16), new Comp (11), new Comp (9), new Comp (0), new Comp (-100) }; + IComparer comp = null; + Array.Sort (c, source, comp); + + Assert.AreEqual (expected, source); + } + + class Comp : IComparable + { + readonly int val; + + public Comp (int a) + { + val = a; + } + + int IComparable.CompareTo (object obj) + { + return val.CompareTo ((obj as Comp).val); + } + } + + [Test] + public void TestSortComparableMixed() + { + var m = new TestSortComparableMixed_Comparer (); + var arr = new object [] { 1, 2, m, 4, 5, 6, 7, 8, 9, 10 }; + + Array.Sort (arr); + + var expected = new object [] { m, 1, 2, 4, 5, 6, 7, 8, 9, 10 }; + Assert.AreEqual (expected, arr); + } + + class TestSortComparableMixed_Comparer : IComparable + { + public int CompareTo (object other) + { + return -1; + } + } + [Test] public void TestInitializeEmpty() { @@ -3331,6 +3385,30 @@ public class ArrayTest } } + [Test] + public void IEnumerator_Dispose () + { + IEnumerable e = new int[] { 1 }; + var en = e.GetEnumerator (); + Assert.IsTrue (en.MoveNext (), "#1"); + Assert.IsFalse (en.MoveNext (), "#2"); + en.Dispose (); + Assert.IsFalse (en.MoveNext (), "#3"); + } + + [Test] + public void IEnumerator_ZeroSize () + { + IEnumerable e = Array.Empty (); + var en = e.GetEnumerator (); + Assert.IsFalse (en.MoveNext (), "#1"); + + e = Array.Empty (); + en = e.GetEnumerator (); + Assert.IsFalse (en.MoveNext (), "#2"); + } + + [Test] public void ICollection_IsReadOnly() { ICollection arr = new string [10]; @@ -3449,7 +3527,6 @@ public class ArrayTest Assert.AreEqual (input, expected); } -#if NET_4_0 [Test] [ExpectedException (typeof (ArgumentException))] public void CompareToWithJaggedArray () { @@ -3616,7 +3693,20 @@ public class ArrayTest Assert.AreEqual (3, c.Counter); } -#endif + [Test] + public void EnumeratorsEquality () + { + int [] normalBase = new int [0]; + IEnumerable specialBase = new int [0]; + + var firstSpecial = specialBase.GetEnumerator (); + var secondSpecial = specialBase.GetEnumerator (); + var firstNormal = normalBase.GetEnumerator (); + var secondNormal = normalBase.GetEnumerator (); + + Assert.IsFalse (object.ReferenceEquals (firstNormal, secondNormal)); + Assert.IsTrue (object.ReferenceEquals (firstSpecial, secondSpecial)); + } [Test] public void JaggedArrayCtor () @@ -3635,5 +3725,17 @@ public class ArrayTest Assert.AreEqual (10, ((object[])arr [i]).Length); } } + + [Test] + public unsafe void PointerArraysBoxing () + { + var x = new int*[10]; + var e = x.GetEnumerator (); + e.MoveNext (); + + Assert.Throws (() => { var _ = e.Current; }, "#1"); + Assert.Throws (() => { var _ = x.GetValue (0); }, "#2"); + Assert.Throws (() => { x.SetValue (0, 0); }, "#3"); + } } }