1 // ArrayTest.cs - NUnit Test Cases for the System.Array class
3 // David Brandt (bucky@keystreams.com)
4 // Eduardo Garcia (kiwnix@yahoo.es)
6 // (C) Ximian, Inc. http://www.ximian.com
7 // Copyright (C) 2004 Novell (http://www.novell.com)
10 using NUnit.Framework;
12 using System.Collections;
13 using System.Globalization;
14 using System.Reflection;
15 using System.Collections.Generic;
17 namespace MonoTests.System
20 enum enua {hola,adios,mas,menos};
46 public override bool Equals (object obj)
51 public override int GetHashCode ()
57 //End Auxiliary Things
60 public class ArrayTest
62 char [] arrsort = {'d', 'b', 'f', 'e', 'a', 'c'};
67 public void TestIsFixedSize() {
69 Assert.IsTrue (a1.IsFixedSize, "All arrays are fixed");
73 public void TestIsReadOnly() {
75 Assert.IsTrue (!a1.IsReadOnly, "No array is readonly");
79 public void TestIsSynchronized() {
81 Assert.IsTrue (!a1.IsSynchronized, "No array is synchronized");
85 public void TestLength() {
88 Assert.AreEqual (0, a1.Length, "Zero length array");
92 Assert.AreEqual (1, a1.Length, "One-length array");
95 char[] a1 = {'c', 'c'};
96 Assert.AreEqual (2, a1.Length, "Two-length array");
101 public void TestRank() {
102 char[] a1 = { 'c', 'd', 'e' };
103 Assert.AreEqual (1, a1.Rank, "Rank one");
105 char[,] a2 = new Char[3,3];
106 Assert.AreEqual (2, a2.Rank, "Rank two");
108 char[,,] a3 = new Char[3,3,3];
109 Assert.AreEqual (3, a3.Rank, "Rank three");
113 public void TestBinarySearch1() {
114 bool errorThrown = false;
116 Array.BinarySearch(null, "blue");
117 } catch (ArgumentNullException) {
120 Assert.IsTrue (errorThrown, "#B01");
123 char[,] c1 = new Char[2,2];
124 Array.BinarySearch(c1, "needle");
125 } catch (RankException) {
128 Assert.IsTrue (errorThrown, "#B02");
131 char[] arr = {'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd'};
132 Assert.IsTrue (Array.BinarySearch(arr, 'c') >= 3, "#B05");
133 Assert.IsTrue (Array.BinarySearch(arr, 'c') < 6, "#B06");
136 char[] arr = {'a', 'b', 'b', 'd', 'd', 'd', 'e', 'e'};
137 Assert.AreEqual (-4, Array.BinarySearch(arr, 'c'), "#B07");
140 char[] arr = {'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd'};
141 Assert.AreEqual (-9, Array.BinarySearch(arr, 'e'), "#B08");
146 public void TestBinarySearch2() {
147 bool errorThrown = false;
149 Array.BinarySearch(null, 0, 1, "blue");
150 } catch (ArgumentNullException) {
153 Assert.IsTrue (errorThrown, "#B20");
156 char[,] c1 = new Char[2,2];
157 Array.BinarySearch(c1, 0, 1, "needle");
158 } catch (RankException) {
161 Assert.IsTrue (errorThrown, "#B21");
165 Array.BinarySearch(c1, -1, 1, 'a');
166 } catch (ArgumentOutOfRangeException) {
169 Assert.IsTrue (errorThrown, "#B22");
173 Array.BinarySearch(c1, 0, -1, 'a');
174 } catch (ArgumentOutOfRangeException) {
177 Assert.IsTrue (errorThrown, "#B23");
181 Array.BinarySearch(c1, 0, 4, 'a');
182 } catch (ArgumentException) {
185 Assert.IsTrue (errorThrown, "#B24");
188 char[] arr = {'z', 'z', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd'};
189 Assert.IsTrue (Array.BinarySearch(arr, 2, 8, 'c') >= 5, "#B26");
190 Assert.IsTrue (Array.BinarySearch(arr, 2, 8, 'c') < 8, "#B27");
193 char[] arr = {'z', 'z', 'a', 'b', 'b', 'd', 'd', 'd', 'e', 'e'};
194 Assert.AreEqual (-6, Array.BinarySearch(arr, 2, 8, 'c'), "#B28");
197 char[] arr = {'z', 'z', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd'};
198 Assert.AreEqual (-11, Array.BinarySearch(arr, 2, 8, 'e'), "#B29");
202 public void TestBinarySearch3()
204 int[] array = new int[100];
206 for (int i = 0; i < 100; i++)
209 Assert.AreEqual (49, Array.BinarySearch(array, 10), "#B30");
213 public void BinarySearch_NullValue ()
215 int[] array = new int[1];
216 Assert.AreEqual (-1, Array.BinarySearch (array, null), "I=a,o");
217 Assert.AreEqual (-1, Array.BinarySearch (array, null, null), "I=a,o,c");
218 Assert.AreEqual (-1, Array.BinarySearch (array, 0, 1, null), "I=a,i,i,o");
219 Assert.AreEqual (-1, Array.BinarySearch (array, 0, 1, null, null), "I=a,i,i,o,c");
221 object[] o = new object [3] { this, this, null };
222 Assert.AreEqual (-1, Array.BinarySearch (o, null), "O=a,o");
223 Assert.AreEqual (-1, Array.BinarySearch (o, null, null), "O=a,o,c");
224 Assert.AreEqual (-1, Array.BinarySearch (o, 0, 3, null), "O=a,i,i,o");
225 Assert.AreEqual (-1, Array.BinarySearch (o, 0, 3, null, null), "O=a,i,i,o,c");
228 class TestComparer7 : IComparer<int>
230 public int Compare (int x, int y)
233 throw new ApplicationException ();
235 return x.CompareTo (y);
240 public void BinarySearch_WithComparer ()
242 var a = new int[] { 2, 6, 9 };
243 Assert.AreEqual (-3, Array.BinarySearch (a, 7, new TestComparer7 ()));
247 public void TestClear() {
248 bool errorThrown = false;
250 Array.Clear(null, 0, 1);
251 } catch (ArgumentNullException) {
254 Assert.IsTrue (errorThrown, "#C01");
256 int[] i1 = { 1, 2, 3, 4 };
258 int[] compare = {1,2,3,4};
259 Assert.AreEqual (compare[0], i1[0], "#C02");
260 Assert.AreEqual (compare[1], i1[1], "#C03");
261 Assert.AreEqual (compare[2], i1[2], "#C04");
262 Assert.AreEqual (compare[3], i1[3], "#C05");
264 Array.Clear(i1, 3, 1);
266 int[] compare = {1,2,3,0};
267 Assert.AreEqual (compare[0], i1[0], "#C06");
268 Assert.AreEqual (compare[1], i1[1], "#C07");
269 Assert.AreEqual (compare[2], i1[2], "#C08");
270 Assert.AreEqual (compare[3], i1[3], "#C09");
272 Array.Clear(i1, 1, 1);
274 int[] compare = {1,0,3,0};
275 Assert.AreEqual (compare[0], i1[0], "#C10");
276 Assert.AreEqual (compare[1], i1[1], "#C11");
277 Assert.AreEqual (compare[2], i1[2], "#C12");
278 Assert.AreEqual (compare[3], i1[3], "#C13");
280 Array.Clear(i1, 1, 3);
282 int[] compare = {1,0,0,0};
283 Assert.AreEqual (compare[0], i1[0], "#C14");
284 Assert.AreEqual (compare[1], i1[1], "#C15");
285 Assert.AreEqual (compare[2], i1[2], "#C16");
286 Assert.AreEqual (compare[3], i1[3], "#C17");
289 string[] s1 = { "red", "green", "blue" };
290 Array.Clear(s1, 0, 3);
292 string[] compare = {null, null, null};
293 Assert.AreEqual (compare[0], s1[0], "#C18");
294 Assert.AreEqual (compare[1], s1[1], "#C19");
295 Assert.AreEqual (compare[2], s1[2], "#C20");
300 public void TestClone() {
301 char[] c1 = {'a', 'b', 'c'};
302 char[] c2 = (char[])c1.Clone();
303 Assert.AreEqual (c1[0], c2[0], "#D01");
304 Assert.AreEqual (c1[1], c2[1], "#D02");
305 Assert.AreEqual (c1[2], c2[2], "#D03");
307 char[] d10 = {'a', 'b'};
308 char[] d11 = {'a', 'c'};
309 char[] d12 = {'b', 'c'};
310 char[][] d1 = {d10, d11, d12};
311 char[][] d2 = (char[][])d1.Clone();
312 Assert.AreEqual (d1[0], d2[0], "#D04");
313 Assert.AreEqual (d1[1], d2[1], "#D05");
314 Assert.AreEqual (d1[2], d2[2], "#D06");
317 Assert.AreEqual (d1[0], d2[0], "#D07");
321 public void TestMemberwiseClone () {
322 int[] array = new int[] { 1, 2, 3 };
323 MethodBase mi = array.GetType ().GetMethod("MemberwiseClone",
324 BindingFlags.Instance | BindingFlags.NonPublic);
325 int[] res = (int[])mi.Invoke (array, null);
326 Assert.AreEqual (3, res.Length);
329 [Test] public void TestIndexer ()
331 int [] a = new int [10];
335 Assert.Fail ("IList.this [-1] should throw");
336 } catch (IndexOutOfRangeException) {
339 Assert.Fail ("Should have thrown an IndexOutOfRangeException");
344 public void TestCopy() {
346 bool errorThrown = false;
349 Array.Copy(c1, null, 1);
350 } catch (ArgumentNullException) {
353 Assert.IsTrue (errorThrown, "#E01");
356 bool errorThrown = false;
359 Array.Copy(null, c1, 1);
360 } catch (ArgumentNullException) {
363 Assert.IsTrue (errorThrown, "#E02");
366 bool errorThrown = false;
368 Char[] c1 = new Char[1];
369 Char[,] c2 = new Char[1,1];
370 Array.Copy(c1, c2, 1);
371 } catch (RankException) {
374 Assert.IsTrue (errorThrown, "#E03");
377 bool errorThrown = false;
379 Char[] c1 = new Char[1];
380 string[] s1 = new String[1];
381 Array.Copy(c1, s1, 1);
382 } catch (ArrayTypeMismatchException) {
385 Assert.IsTrue (errorThrown, "#E04");
388 bool errorThrown = false;
390 Char[] c1 = new Char[1];
391 Object[] o1 = new Object[1];
393 Array.Copy(o1, c1, 1);
394 } catch (InvalidCastException) {
397 Assert.IsTrue (errorThrown, "#E05");
400 bool errorThrown = false;
402 Char[] c1 = new Char[1];
403 Char[] c2 = new Char[1];
404 Array.Copy(c1, c2, -1);
405 } catch (ArgumentOutOfRangeException) {
408 Assert.IsTrue (errorThrown, "#E06");
411 bool errorThrown = false;
413 Char[] c1 = new Char[1];
414 Char[] c2 = new Char[2];
415 Array.Copy(c1, c2, 2);
416 } catch (ArgumentException) {
419 Assert.IsTrue (errorThrown, "#E07");
422 bool errorThrown = false;
424 Char[] c1 = new Char[1];
425 Char[] c2 = new Char[2];
426 Array.Copy(c2, c1, 2);
427 } catch (ArgumentException) {
430 Assert.IsTrue (errorThrown, "#E08");
433 char[] orig = {'a', 'b', 'd', 'a'};
434 char[] copy = new Char[4];
435 Array.Copy(orig, copy, 4);
436 for (int i = 0; i < orig.Length; i++) {
437 Assert.AreEqual (orig[i], copy[i], "#E09(" + i + ")");
439 Array.Clear(copy, 0, copy.Length);
440 for (int i = 0; i < orig.Length; i++) {
441 Assert.AreEqual ((char)0, copy[i], "#E10(" + i + ")");
443 Array.Copy(orig, copy, 2);
444 Assert.AreEqual (orig[0], copy[0], "#E11");
445 Assert.AreEqual (orig[1], copy[1], "#E12");
446 Assert.IsTrue (orig[2] != copy[2], "#E13");
447 Assert.IsTrue (orig[3] != copy[3], "#E14");
451 public void TestCopy2() {
453 bool errorThrown = false;
455 Char[] c1 = new Char[2];
456 Char[] c2 = new Char[2];
457 Array.Copy(c2, 1, c1, 0, 2);
458 } catch (ArgumentException) {
461 Assert.IsTrue (errorThrown, "#E31");
464 bool errorThrown = false;
466 Char[] c1 = new Char[2];
467 Char[] c2 = new Char[2];
468 Array.Copy(c2, 0, c1, 1, 2);
469 } catch (ArgumentException) {
472 Assert.IsTrue (errorThrown, "#E32");
475 char[] orig = {'a', 'b', 'd', 'a'};
476 char[] copy = new Char[4];
477 Array.Copy(orig, 1, copy, 1, 3);
478 Assert.IsTrue (copy[0] != orig[0], "#E33");
479 for (int i = 1; i < orig.Length; i++) {
480 Assert.AreEqual (orig[i], copy[i], "#E34(" + i + ")");
482 Array.Clear(copy, 0, copy.Length);
483 Array.Copy(orig, 1, copy, 0, 2);
484 Assert.AreEqual (orig[1], copy[0], "#E35");
485 Assert.AreEqual (orig[2], copy[1], "#E36");
486 Assert.IsTrue (copy[2] != orig[2], "#E37");
487 Assert.IsTrue (copy[3] != orig[3], "#E38");
491 [ExpectedException (typeof (InvalidCastException))]
492 public void Copy_InvalidCast () {
493 object[] arr1 = new object [10];
494 Type[] arr2 = new Type [10];
496 arr1 [0] = new object ();
498 Array.Copy (arr1, 0, arr2, 0, 10);
502 public void TestCopyTo() {
504 bool errorThrown = false;
506 Char[] c1 = new Char[2];
508 } catch (ArgumentNullException) {
511 Assert.IsTrue (errorThrown, "#E61");
514 bool errorThrown = false;
516 Char[] c1 = new Char[2];
517 Char[,] c2 = new Char[2,2];
519 } catch (ArgumentException) {
522 #if TARGET_JVM // This is really implementation dependent behaviour.
523 catch (RankException) {
527 Assert.IsTrue (errorThrown, "#E62");
530 bool errorThrown = false;
532 Char[,] c1 = new Char[2,2];
533 Char[] c2 = new Char[2];
535 } catch (RankException) {
538 Assert.IsTrue (errorThrown, "#E63");
541 bool errorThrown = false;
543 Char[,] c1 = new Char[2,2];
544 Char[] c2 = new Char[2];
546 } catch (RankException) {
549 Assert.IsTrue (errorThrown, "#E64");
552 bool errorThrown = false;
554 Char[] c1 = new Char[2];
555 Char[] c2 = new Char[2];
557 } catch (ArgumentOutOfRangeException) {
560 Assert.IsTrue (errorThrown, "#E65");
563 bool errorThrown = false;
565 Char[] c1 = new Char[2];
566 Char[] c2 = new Char[2];
568 } catch (ArgumentException) {
571 Assert.IsTrue (errorThrown, "#E66");
574 bool errorThrown = false;
576 Char[] c1 = new Char[2];
577 Char[] c2 = new Char[2];
579 } catch (ArgumentException) {
582 Assert.IsTrue (errorThrown, "#E67");
586 bool errorThrown = false;
588 String[] c1 = new String[2];
589 // TODO: this crashes mono if there are null
590 // values in the array.
593 Char[] c2 = new Char[2];
597 } catch (ArrayTypeMismatchException) {
600 Assert.IsTrue (errorThrown, "#E68");
603 Char[] orig = {'a', 'b', 'c', 'd'};
604 Char[] copy = new Char[10];
605 Array.Clear(copy, 0, copy.Length);
606 orig.CopyTo(copy, 3);
607 Assert.AreEqual ((char)0, copy[0], "#E69");
608 Assert.AreEqual ((char)0, copy[1], "#E70");
609 Assert.AreEqual ((char)0, copy[2], "#E71");
610 Assert.AreEqual (orig[0], copy[3], "#E72");
611 Assert.AreEqual (orig[1], copy[4], "#E73");
612 Assert.AreEqual (orig[2], copy[5], "#E74");
613 Assert.AreEqual (orig[3], copy[6], "#E75");
614 Assert.AreEqual ((char)0, copy[7], "#E76");
615 Assert.AreEqual ((char)0, copy[8], "#E77");
616 Assert.AreEqual ((char)0, copy[9], "#E78");
619 // The following is valid and must not throw an exception.
620 bool errorThrown = false;
622 int[] src = new int [0];
623 int[] dest = new int [0];
624 src.CopyTo (dest, 0);
625 } catch (ArgumentException) {
628 Assert.IsTrue (!errorThrown, "#E79");
633 bool errorThrown = false;
635 CClass[] src = new CClass [] { new CClass () };
636 BClass[] dest = new BClass [1];
638 src.CopyTo (dest, 0);
640 } catch (ArrayTypeMismatchException) {
643 Assert.IsTrue (errorThrown, "#E80");
648 public void TestCreateInstance() {
650 bool errorThrown = false;
652 Array.CreateInstance(null, 12);
653 } catch (ArgumentNullException) {
656 Assert.IsTrue (errorThrown, "#F01");
659 bool errorThrown = false;
661 Array.CreateInstance(Type.GetType("System.Char"), -3);
662 } catch (ArgumentOutOfRangeException) {
665 Assert.IsTrue (errorThrown, "#F02");
668 bool errorThrown = false;
670 Array.CreateInstance(Type.GetType("System.Char"), (int [])null);
671 } catch (ArgumentNullException) {
674 Assert.IsTrue (errorThrown, "#F03a");
678 bool errorThrown = false;
680 Array.CreateInstance(Type.GetType("System.Char"), (int [])null);
681 } catch (ArgumentNullException) {
684 Assert.IsTrue (errorThrown, "#F03b");
686 #if !TARGET_JVM // Arrays lower bounds are not supported for TARGET_JVM
688 bool errorThrown = false;
690 Array.CreateInstance(Type.GetType("System.Char"), null, null);
691 } catch (ArgumentNullException) {
694 Assert.IsTrue (errorThrown, "#F04");
698 bool errorThrown = false;
700 int[] lengths = new int [0];
701 Array.CreateInstance(Type.GetType("System.Char"), lengths);
702 } catch (ArgumentException) {
705 Assert.IsTrue (errorThrown, "#F05");
707 #if !TARGET_JVM // CreateInstance with lower bounds not supported for TARGET_JVM
709 bool errorThrown = false;
711 int[] lengths = new int [1];
712 int[] bounds = new int [2];
713 Array.CreateInstance(Type.GetType("System.Char"), lengths, bounds);
715 } catch (ArgumentException) {
718 Assert.IsTrue (errorThrown, "#F06");
721 char[] c1 = (char[])Array.CreateInstance(Type.GetType("System.Char"), 12);
722 Assert.AreEqual (12, c1.Length, "#F07");
724 Array c2 = Array.CreateInstance(Type.GetType("System.Char"), 12, 5);
725 Assert.AreEqual (2, c2.Rank, "#F08");
726 Assert.AreEqual (60, c2.Length, "#F09");
730 int[] lengths = { 3 };
731 int[] bounds = { 5 };
732 int[] src = { 512, 718, 912 };
733 Array array = Array.CreateInstance(typeof(int), lengths, bounds);
735 Assert.AreEqual (3, array.Length, "#F10");
736 Assert.AreEqual (5, array.GetLowerBound(0), "#F11");
737 Assert.AreEqual (7, array.GetUpperBound(0), "#F12");
739 src.CopyTo (array, 5);
741 for (int i = 0; i < src.Length; i++)
742 Assert.AreEqual (src[i], array.GetValue(i+5), "#F13(" + i + ")");
745 // Test that a 1 dimensional array with 0 lower bound is the
746 // same as an szarray
747 Type szarrayType = new int [10].GetType ();
748 Assert.IsTrue (szarrayType == (Array.CreateInstance (typeof (int), new int[] {1}, new int[] {0})).GetType ());
749 Assert.IsTrue (szarrayType != (Array.CreateInstance (typeof (int), new int[] {1}, new int[] {1})).GetType ());
754 [ExpectedException (typeof (ArgumentNullException))]
755 public void TestCreateInstance2 ()
757 Array.CreateInstance (typeof (Int32), (int[])null);
761 [ExpectedException (typeof (ArgumentNullException))]
762 public void TestCreateInstance2b ()
764 Array.CreateInstance (typeof (Int32), (long[])null);
768 public void TestGetEnumerator() {
769 String[] s1 = {"this", "is", "a", "test"};
770 IEnumerator en = s1.GetEnumerator ();
771 Assert.IsNotNull (en, "#G01");
773 Assert.IsTrue (en.MoveNext (), "#G02");
774 Assert.AreEqual ("this", en.Current, "#G03");
775 Assert.IsTrue (en.MoveNext (), "#G04");
776 Assert.AreEqual ("is", en.Current, "#G05");
777 Assert.IsTrue (en.MoveNext (), "#G06");
778 Assert.AreEqual ("a", en.Current, "#G07");
779 Assert.IsTrue (en.MoveNext (), "#G08");
780 Assert.AreEqual ("test", en.Current, "#G09");
781 Assert.IsTrue (!en.MoveNext (), "#G10");
784 Assert.IsTrue (en.MoveNext (), "#G11");
785 Assert.AreEqual ("this", en.Current, "#G12");
787 // mutation does not invalidate array enumerator!
788 s1.SetValue ("change", 1);
789 Assert.IsTrue (en.MoveNext (), "#G13");
790 Assert.AreEqual ("change", en.Current, "#G14");
794 public void TestGetEnumeratorMultipleDimension() {
795 String[,] s1 = {{"this", "is"}, {"a", "test"}};
796 IEnumerator en = s1.GetEnumerator ();
797 Assert.IsNotNull (en, "#AA01");
799 Assert.IsTrue (en.MoveNext (), "#AA02");
800 Assert.AreEqual ("this", en.Current, "#AA03");
801 Assert.IsTrue (en.MoveNext (), "#AA04");
802 Assert.AreEqual ("is", en.Current, "#AA05");
803 Assert.IsTrue (en.MoveNext (), "#AA06");
804 Assert.AreEqual ("a", en.Current, "#AA07");
805 Assert.IsTrue (en.MoveNext (), "#AA08");
806 Assert.AreEqual ("test", en.Current, "#AA09");
807 Assert.IsTrue (!en.MoveNext (), "#AA10");
810 Assert.IsTrue (en.MoveNext (), "#AA11");
811 Assert.AreEqual ("this", en.Current, "#AA12");
814 // mutation does not invalidate array enumerator!
815 s1.SetValue ("change", idxs);
816 Assert.IsTrue (en.MoveNext (), "#AA13");
817 Assert.AreEqual ("change", en.Current, "#AA14");
821 [Category ("TargetJvmNotSupported")] // Arrays lower bounds are not supported for TARGET_JVM
822 public void TestGetEnumeratorNonZeroLowerBounds() {
823 int[] myLengthsArray = new int[2] { 3, 5 };
824 int[] myBoundsArray = new int[2] { 2, 3 };
826 Array myArray=Array.CreateInstance( typeof(String), myLengthsArray, myBoundsArray );
827 for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
828 for ( int j = myArray.GetLowerBound(1); j <= myArray.GetUpperBound(1); j++ ) {
829 int[] myIndicesArray = new int[2] { i, j };
830 myArray.SetValue( Convert.ToString(i) + j, myIndicesArray );
832 IEnumerator en = myArray.GetEnumerator ();
833 Assert.IsNotNull (en, "#AB01");
835 // check the first couple of values
836 Assert.IsTrue (en.MoveNext (), "#AB02");
837 Assert.AreEqual ("23", en.Current, "#AB03");
838 Assert.IsTrue (en.MoveNext (), "#AB04");
839 Assert.AreEqual ("24", en.Current, "#AB05");
841 // then check the last element's value
844 lastElement = (string)en.Current;
845 } while (en.MoveNext());
846 Assert.AreEqual ("47", lastElement, "#AB06");
850 [Category ("TargetJvmNotSupported")] // Arrays lower bounds are not supported for TARGET_JVM
851 public void TestIList_Add () {
852 int[] myLengthsArray = new int[2] { 3, 5 };
853 int[] myBoundsArray = new int[2] { 2, 3 };
855 Array myArray=Array.CreateInstance ( typeof(String), myLengthsArray, myBoundsArray );
857 ((IList)myArray).Add ("can not");
858 Assert.Fail ("IList.Add should throw");
860 catch (NotSupportedException) {
864 Assert.Fail ("IList.Add threw wrong exception type");
867 Assert.Fail ("IList.Add shouldn't get this far");
871 [Category ("TargetJvmNotSupported")] // Arrays lower bounds are not supported for TARGET_JVM
872 public void TestIList_Insert () {
873 int[] myLengthsArray = new int[2] { 3, 5 };
874 int[] myBoundsArray = new int[2] { 2, 3 };
876 Array myArray=Array.CreateInstance ( typeof(String), myLengthsArray, myBoundsArray );
878 ((IList)myArray).Insert (0, "can not");
879 Assert.Fail ("IList.Insert should throw");
881 catch (NotSupportedException) {
885 Assert.Fail ("IList.Insert threw wrong exception type");
888 Assert.Fail ("IList.Insert shouldn't get this far");
892 [Category ("TargetJvmNotSupported")] // Arrays lower bounds are not supported for TARGET_JVM
893 public void TestIList_Remove () {
894 int[] myLengthsArray = new int[2] { 3, 5 };
895 int[] myBoundsArray = new int[2] { 2, 3 };
897 Array myArray=Array.CreateInstance ( typeof(String), myLengthsArray, myBoundsArray );
899 ((IList)myArray).Remove ("can not");
900 Assert.Fail ("IList.Remove should throw");
902 catch (NotSupportedException) {
906 Assert.Fail ("IList.Remove threw wrong exception type");
909 Assert.Fail ("IList.Remove shouldn't get this far");
913 [Category ("TargetJvmNotSupported")] // Arrays lower bounds are not supported for TARGET_JVM
914 public void TestIList_RemoveAt () {
915 int[] myLengthsArray = new int[2] { 3, 5 };
916 int[] myBoundsArray = new int[2] { 2, 3 };
918 Array myArray=Array.CreateInstance ( typeof(String), myLengthsArray, myBoundsArray );
920 ((IList)myArray).RemoveAt (0);
921 Assert.Fail ("IList.RemoveAt should throw");
923 catch (NotSupportedException) {
927 Assert.Fail ("IList.RemoveAt threw wrong exception type");
930 Assert.Fail ("IList.RemoveAt shouldn't get this far");
934 [Category ("TargetJvmNotSupported")] // Arrays lower bounds are not supported for TARGET_JVM
935 public void TestIList_Contains () {
936 int[] myLengthsArray = new int[2] { 3, 5 };
937 int[] myBoundsArray = new int[2] { 2, 3 };
939 Array myArray=Array.CreateInstance ( typeof(String), myLengthsArray, myBoundsArray );
942 bool b = ((IList)myArray).Contains ("23");
943 Assert.Fail ("IList.Contains should throw with multi-dimensional arrays");
945 catch (RankException) {
946 int[] iArr = new int[3] { 1, 2, 3};
947 // check the first and last items
948 Assert.IsTrue (((IList)iArr).Contains (1), "AC01");
949 Assert.IsTrue (((IList)iArr).Contains (3), "AC02");
951 // and one that is definately not there
952 Assert.IsTrue (!((IList)iArr).Contains (42), "AC03");
956 Assert.Fail ("Should not get here");
960 [Category ("TargetJvmNotSupported")] // Arrays lower bounds are not supported for TARGET_JVM
961 public void TestIList_IndexOf () {
962 int[] myLengthsArray = new int[2] { 3, 5 };
963 int[] myBoundsArray = new int[2] { 2, 3 };
965 Array myArray=Array.CreateInstance ( typeof(String), myLengthsArray, myBoundsArray );
968 bool b = ((IList)myArray).Contains ("23");
969 Assert.Fail ("IList.Contains should throw with multi-dimensional arrays");
971 catch (RankException) {
972 int[] iArr = new int[3] { 1, 2, 3};
973 // check the first and last items
974 Assert.AreEqual (0, ((IList)iArr).IndexOf (1), "AD01");
975 Assert.AreEqual (2, ((IList)iArr).IndexOf (3), "AD02");
977 // and one that is definately not there
978 Assert.AreEqual (-1, ((IList)iArr).IndexOf (42), "AD03");
980 catch (Exception e) {
981 Assert.Fail ("Unexpected exception: " + e.ToString());
984 // check that wierd case whem lowerbound is Int32.MinValue,
985 // so that IndexOf() needs to return Int32.MaxValue when it cannot find the object
986 int[] myLengthArray = new int[1] { 3 };
987 int[] myBoundArray = new int[1] { Int32.MinValue };
988 Array myExtremeArray=Array.CreateInstance ( typeof(String), myLengthArray, myBoundArray );
989 Assert.AreEqual (Int32.MaxValue, ((IList)myExtremeArray).IndexOf (42), "AD04");
994 public void TestGetLength() {
996 bool errorThrown = false;
998 char[] c1 = {'a', 'b', 'c'};
1000 } catch (IndexOutOfRangeException) {
1003 Assert.IsTrue (errorThrown, "#H01");
1006 bool errorThrown = false;
1008 char[] c1 = {'a', 'b', 'c'};
1010 } catch (IndexOutOfRangeException) {
1013 Assert.IsTrue (errorThrown, "#H02");
1016 char[] c2 = new Char[5];
1017 Assert.AreEqual (5, c2.GetLength(0), "#H03");
1019 char[,] c3 = new Char[6,7];
1020 Assert.AreEqual (6, c3.GetLength(0), "#H04");
1021 Assert.AreEqual (7, c3.GetLength(1), "#H05");
1025 public void TestGetLowerBound() {
1027 bool errorThrown = false;
1029 char[] c = {'a', 'b', 'c'};
1030 c.GetLowerBound(-1);
1031 } catch (IndexOutOfRangeException) {
1034 Assert.IsTrue (errorThrown, "#H31");
1037 bool errorThrown = false;
1039 char[] c = {'a', 'b', 'c'};
1041 } catch (IndexOutOfRangeException) {
1044 Assert.IsTrue (errorThrown, "#H32");
1047 char[] c1 = new Char[5];
1048 Assert.AreEqual (0, c1.GetLowerBound(0), "#H33");
1050 char[,] c2 = new Char[4,4];
1051 Assert.AreEqual (0, c2.GetLowerBound(0), "#H34");
1052 Assert.AreEqual (0, c2.GetLowerBound(1), "#H35");
1056 public void TestGetUpperBound() {
1058 bool errorThrown = false;
1060 char[] c = {'a', 'b', 'c'};
1061 c.GetUpperBound(-1);
1062 } catch (IndexOutOfRangeException) {
1065 Assert.IsTrue (errorThrown, "#H61");
1068 bool errorThrown = false;
1070 char[] c = {'a', 'b', 'c'};
1072 } catch (IndexOutOfRangeException) {
1075 Assert.IsTrue (errorThrown, "#H62");
1078 char[] c1 = new Char[5];
1079 Assert.AreEqual (4, c1.GetUpperBound(0), "#H63");
1081 char[,] c2 = new Char[4,6];
1082 Assert.AreEqual (3, c2.GetUpperBound(0), "#H64");
1083 Assert.AreEqual (5, c2.GetUpperBound(1), "#H65");
1087 public void TestGetValue1() {
1089 bool errorThrown = false;
1091 char[,] c = new Char[2,2];
1093 } catch (ArgumentException) {
1096 Assert.IsTrue (errorThrown, "#I01");
1099 bool errorThrown = false;
1101 char[] c = {'a', 'b', 'c'};
1103 } catch (IndexOutOfRangeException) {
1106 Assert.IsTrue (errorThrown, "#I02");
1109 bool errorThrown = false;
1111 char[] c = {'a', 'b', 'c'};
1113 } catch (IndexOutOfRangeException) {
1116 Assert.IsTrue (errorThrown, "#I03");
1119 char[] c1 = {'a', 'b', 'c', 'd'};
1120 for (int i = 0; i < c1.Length; i++) {
1121 Assert.AreEqual (c1[i], c1.GetValue(i), "#I04(" + i + ")");
1126 public void TestGetValue2() {
1128 bool errorThrown = false;
1130 char[] c = new Char[2];
1132 } catch (ArgumentException) {
1135 Assert.IsTrue (errorThrown, "#I21");
1138 bool errorThrown = false;
1140 char[,] c = new Char[2,2];
1142 } catch (IndexOutOfRangeException) {
1145 Assert.IsTrue (errorThrown, "#I22");
1148 bool errorThrown = false;
1150 char[,] c = new Char[2,2];
1152 } catch (IndexOutOfRangeException) {
1155 Assert.IsTrue (errorThrown, "#I23");
1158 char[,] c1 = new Char[4,6];
1159 for (int i = 0; i < 24; i++) {
1162 c1[first,second] = (char)(((int)'a')+i);
1164 for (int i = 0; i < c1.GetLength(0); i++) {
1165 for (int j = 0; j < c1.GetLength(1); j++) {
1166 Assert.AreEqual (c1[i, j], c1.GetValue(i, j), "#I24(" + i + "," + j + ")");
1172 public void TestGetValue3() {
1174 bool errorThrown = false;
1176 char[] c = new Char[2];
1178 } catch (ArgumentException) {
1181 Assert.IsTrue (errorThrown, "#I41");
1184 bool errorThrown = false;
1186 char[,,] c = new Char[2,2,2];
1187 c.GetValue(-1, 1, 1);
1188 } catch (IndexOutOfRangeException) {
1191 Assert.IsTrue (errorThrown, "#I42");
1194 bool errorThrown = false;
1196 char[,,] c = new Char[2,2,2];
1198 } catch (IndexOutOfRangeException) {
1201 Assert.IsTrue (errorThrown, "#I43");
1204 char[,,] c1 = new Char[4,2,3];
1205 for (int i = 0; i < 24; i++) {
1207 int remains = i % 6;
1208 int second = remains / 3;
1209 int third = remains % 3;
1210 c1[first,second, third] = (char)(((int)'a')+i);
1212 for (int i = 0; i < c1.GetLength(0); i++) {
1213 for (int j = 0; j < c1.GetLength(1); j++) {
1214 for (int k = 0; k < c1.GetLength(2); k++) {
1215 Assert.AreEqual (c1[i, j, k], c1.GetValue(i, j, k), "#I44(" + i + "," + j + ")");
1222 [ExpectedException (typeof (ArgumentNullException))]
1223 public void TestGetValueLongArray ()
1225 char[] c = new Char[2];
1226 c.GetValue((long [])null);
1230 public void TestGetValueN() {
1232 bool errorThrown = false;
1234 char[] c = new Char[2];
1235 c.GetValue((int [])null);
1236 } catch (ArgumentNullException) {
1239 Assert.IsTrue (errorThrown, "#I61a");
1242 bool errorThrown = false;
1244 char[] c = new Char[2];
1245 int[] coords = {1, 1};
1247 } catch (ArgumentException) {
1250 Assert.IsTrue (errorThrown, "#I62");
1253 bool errorThrown = false;
1255 char[,] c = new Char[2,2];
1256 int[] coords = {-1, 1};
1258 } catch (IndexOutOfRangeException) {
1261 Assert.IsTrue (errorThrown, "#I63");
1264 bool errorThrown = false;
1266 char[,] c = new Char[2,2];
1267 int[] coords = {4, 1};
1269 } catch (IndexOutOfRangeException) {
1272 Assert.IsTrue (errorThrown, "#I64");
1275 char[,] c1 = new Char[4,6];
1276 for (int i = 0; i < 24; i++) {
1279 c1[first,second] = (char)(((int)'a')+i);
1281 for (int i = 0; i < c1.GetLength(0); i++) {
1282 for (int j = 0; j < c1.GetLength(1); j++) {
1283 int[] coords = {i, j};
1284 Assert.AreEqual (c1[i, j], c1.GetValue(coords), "#I65(" + i + "," + j + ")");
1290 public void TestIndexOf1() {
1292 bool errorThrown = false;
1294 Array.IndexOf(null, "huh?");
1295 } catch (ArgumentNullException) {
1298 Assert.IsTrue (errorThrown, "#J01");
1301 bool errorThrown = false;
1303 char[,] c = new Char[2,2];
1304 Array.IndexOf(c, "huh?");
1305 } catch (RankException) {
1308 Assert.IsTrue (errorThrown, "#J02");
1311 String[] s1 = {"this", "is", "a", "test"};
1312 Assert.AreEqual (-1, Array.IndexOf(s1, null), "#J03");
1313 Assert.AreEqual (-1, Array.IndexOf(s1, "nothing"), "#J04");
1314 Assert.AreEqual (0, Array.IndexOf(s1, "this"), "#J05");
1315 Assert.AreEqual (3, Array.IndexOf(s1, "test"), "#J06");
1319 public void TestIndexOf2() {
1321 bool errorThrown = false;
1323 Array.IndexOf(null, "huh?", 0);
1324 } catch (ArgumentNullException) {
1327 Assert.IsTrue (errorThrown, "#J21");
1330 bool errorThrown = false;
1332 char[,] c = new Char[2,2];
1333 Array.IndexOf(c, "huh?", 0);
1334 } catch (RankException) {
1337 Assert.IsTrue (errorThrown, "#J22");
1340 bool errorThrown = false;
1342 char[] c = new Char[2];
1343 Array.IndexOf(c, "huh?", 3);
1344 } catch (ArgumentOutOfRangeException) {
1347 Assert.IsTrue (errorThrown, "#J23");
1350 String[] s1 = {"this", "is", "really", "a", "test"};
1351 Assert.AreEqual (-1, Array.IndexOf(s1, null, 1), "#J24");
1352 Assert.AreEqual (-1, Array.IndexOf(s1, "nothing", 1), "#J25");
1353 Assert.AreEqual (-1, Array.IndexOf(s1, "this", 1), "#J26");
1354 Assert.AreEqual (1, Array.IndexOf(s1, "is", 1), "#J27");
1355 Assert.AreEqual (4, Array.IndexOf(s1, "test", 1), "#J28");
1359 public void TestIndexOf3() {
1361 bool errorThrown = false;
1363 Array.IndexOf(null, "huh?", 0, 1);
1364 } catch (ArgumentNullException) {
1367 Assert.IsTrue (errorThrown, "#J41");
1370 bool errorThrown = false;
1372 char[,] c = new Char[2,2];
1373 Array.IndexOf(c, "huh?", 0, 1);
1374 } catch (RankException) {
1377 Assert.IsTrue (errorThrown, "#J42");
1380 bool errorThrown = false;
1382 char[] c = new Char[2];
1383 Array.IndexOf(c, "huh?", 3, 1);
1384 } catch (ArgumentOutOfRangeException) {
1387 Assert.IsTrue (errorThrown, "#J43");
1390 bool errorThrown = false;
1392 char[] c = new Char[2];
1393 Array.IndexOf(c, "huh?", 0, 5);
1394 } catch (ArgumentOutOfRangeException) {
1397 Assert.IsTrue (errorThrown, "#J44");
1400 String[] s1 = {"this", "is", "really", "a", "test"};
1401 Assert.AreEqual (-1, Array.IndexOf(s1, null, 1, 3), "#J45");
1402 Assert.AreEqual (-1, Array.IndexOf(s1, "nothing", 1, 3), "#J46");
1403 Assert.AreEqual (-1, Array.IndexOf(s1, "this", 1, 3), "#J47");
1404 Assert.AreEqual (1, Array.IndexOf(s1, "is", 1, 3), "#J48");
1405 Assert.AreEqual (-1, Array.IndexOf(s1, "test", 1, 3), "#J49");
1406 Assert.AreEqual (3, Array.IndexOf(s1, "a", 1, 3), "#J50");
1410 public void TestIndexOf_CustomEqual ()
1412 DataEqual[] test = new DataEqual [] { new DataEqual () };
1413 Assert.AreEqual (0, Array.IndexOf (test, "asdfas", 0));
1415 IList array = (IList)test;
1416 Assert.AreEqual (0, array.IndexOf ("asdfas"));
1420 public void TestLastIndexOf1() {
1422 bool errorThrown = false;
1424 Array.LastIndexOf(null, "huh?");
1425 } catch (ArgumentNullException) {
1428 Assert.IsTrue (errorThrown, "#K01");
1431 bool errorThrown = false;
1433 char[,] c = new Char[2,2];
1434 Array.LastIndexOf(c, "huh?");
1435 } catch (RankException) {
1438 Assert.IsTrue (errorThrown, "#K02");
1441 String[] s1 = {"this", "is", "a", "a", "test"};
1442 Assert.AreEqual (-1, Array.LastIndexOf(s1, null), "#K03");
1443 Assert.AreEqual (-1, Array.LastIndexOf(s1, "nothing"), "#K04");
1444 Assert.AreEqual (0, Array.LastIndexOf(s1, "this"), "#K05");
1445 Assert.AreEqual (4, Array.LastIndexOf(s1, "test"), "#K06");
1446 Assert.AreEqual (3, Array.LastIndexOf(s1, "a"), "#K07");
1448 Assert.AreEqual (-1, Array.LastIndexOf (new String [0], "foo"));
1452 public void TestLastIndexOf2() {
1454 bool errorThrown = false;
1456 Array.LastIndexOf(null, "huh?", 0);
1457 } catch (ArgumentNullException) {
1460 Assert.IsTrue (errorThrown, "#K21");
1463 bool errorThrown = false;
1465 char[,] c = new Char[2,2];
1466 Array.LastIndexOf(c, "huh?", 0);
1467 } catch (RankException) {
1470 Assert.IsTrue (errorThrown, "#K22");
1473 bool errorThrown = false;
1475 char[] c = new Char[2];
1476 Array.LastIndexOf(c, "huh?", 3);
1477 } catch (ArgumentOutOfRangeException) {
1480 Assert.IsTrue (errorThrown, "#K23");
1483 String[] s1 = {"this", "is", "really", "a", "test"};
1484 Assert.AreEqual (-1, Array.LastIndexOf(s1, null, 3), "#K24");
1485 Assert.AreEqual (-1, Array.LastIndexOf(s1, "nothing", 3), "#K25");
1486 Assert.AreEqual (-1, Array.LastIndexOf(s1, "test", 3), "#K26");
1487 Assert.AreEqual (3, Array.LastIndexOf(s1, "a", 3), "#K27");
1488 Assert.AreEqual (0, Array.LastIndexOf(s1, "this", 3), "#K28");
1492 public void TestLastIndexOf3() {
1494 bool errorThrown = false;
1496 Array.LastIndexOf(null, "huh?", 0, 1);
1497 } catch (ArgumentNullException) {
1500 Assert.IsTrue (errorThrown, "#K41");
1503 bool errorThrown = false;
1505 char[,] c = new Char[2,2];
1506 Array.LastIndexOf(c, "huh?", 0, 1);
1507 } catch (RankException) {
1510 Assert.IsTrue (errorThrown, "#K42");
1513 bool errorThrown = false;
1515 char[] c = new Char[2];
1516 Array.LastIndexOf(c, "huh?", 3, 1);
1517 } catch (ArgumentOutOfRangeException) {
1520 Assert.IsTrue (errorThrown, "#K43");
1523 bool errorThrown = false;
1525 char[] c = new Char[2];
1526 Array.LastIndexOf(c, "huh?", 0, 5);
1527 } catch (ArgumentOutOfRangeException) {
1530 Assert.IsTrue (errorThrown, "#K44");
1533 String[] s1 = {"this", "is", "really", "a", "test"};
1534 Assert.AreEqual (-1, Array.LastIndexOf(s1, null, 3, 3), "#K45");
1535 Assert.AreEqual (-1, Array.LastIndexOf(s1, "nothing", 3, 3), "#K46");
1536 Assert.AreEqual (-1, Array.LastIndexOf(s1, "this", 3, 3), "#K47");
1537 Assert.AreEqual (1, Array.LastIndexOf(s1, "is", 3, 3), "#K48");
1538 Assert.AreEqual (-1, Array.LastIndexOf(s1, "test", 3, 3), "#K49");
1539 Assert.AreEqual (3, Array.LastIndexOf(s1, "a", 3, 3), "#K50");
1543 public void TestLastIndexOf4 ()
1545 short [] a = new short [] { 19, 238, 317, 6, 565, 0, -52, 60, -563, 753, 238, 238};
1547 Array.LastIndexOf (a, (object)16, -1);
1548 NUnit.Framework.Assert.Fail ("#1");
1549 } catch (ArgumentOutOfRangeException) { }
1552 Array.LastIndexOf<short> (a, 16, -1);
1553 NUnit.Framework.Assert.Fail ("#2");
1554 } catch (ArgumentOutOfRangeException) { }
1558 public void TestLastIndexOf5 ()
1560 char [] a = new char [] {'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a', 'j', 'i', 'h'};
1565 for (int i = a.Length - 1; i >= 0 ; i--) {
1567 retval = Array.LastIndexOf(a, a [i], i, i + 1);
1571 Assert.IsTrue (!error);
1575 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1576 public void LastIndexOf_StartIndexOverflow ()
1578 // legal - no exception
1579 byte[] array = new byte [16];
1580 Array.LastIndexOf (array, this, Int32.MaxValue, 1);
1584 [ExpectedException (typeof (ArgumentOutOfRangeException))]
1585 public void LastIndexOf_CountOverflow ()
1587 // legal - no exception
1588 byte[] array = new byte [16];
1589 Array.LastIndexOf (array, this, 1, Int32.MaxValue);
1593 public void LastIndexOf_0LengthArray ()
1595 Array array = Array.CreateInstance (typeof (char), 0);
1596 int idx = Array.LastIndexOf (array, (object) null, -1, 0);
1597 Assert.IsTrue (idx == -1, "#01");
1598 idx = Array.LastIndexOf (array, (object) null, -1, 10);
1599 Assert.IsTrue (idx == -1, "#02");
1600 idx = Array.LastIndexOf (array, (object) null, -100, 10);
1601 Assert.IsTrue (idx == -1, "#02");
1603 array = Array.CreateInstance (typeof (char), 1);
1605 Array.LastIndexOf (array, (object) null, -1, 0);
1606 Assert.Fail ("#04");
1607 } catch (ArgumentOutOfRangeException e) {
1610 Array.LastIndexOf (array, (object) null, -1, 10);
1611 Assert.Fail ("#05");
1612 } catch (ArgumentOutOfRangeException e) {
1615 Array.LastIndexOf (array, (object) null, -100, 10);
1616 Assert.Fail ("#06");
1617 } catch (ArgumentOutOfRangeException e) {
1623 public void FindIndexTest ()
1625 var a = new int[] { 2, 2, 2, 3, 2 };
1626 Assert.AreEqual (2, Array.FindIndex (a, 2, 2, l => true));
1630 public void FindIndex_Invalid ()
1632 var array = new int [] { 1, 2, 3, 4, 5 };
1635 Array.FindIndex (array, null);
1637 } catch (ArgumentNullException) {
1641 Array.FindIndex (array, -1, l => true);
1643 } catch (ArgumentOutOfRangeException) {
1647 Array.FindIndex (array, -1, 0, l => true);
1648 Assert.Fail ("#2b");
1649 } catch (ArgumentOutOfRangeException) {
1653 Array.FindIndex (array, 0, -1, l => true);
1655 } catch (ArgumentOutOfRangeException) {
1659 Array.FindIndex (array, 100, l => true);
1661 } catch (ArgumentOutOfRangeException) {
1665 Array.FindIndex (array, 100, 0, l => true);
1666 Assert.Fail ("#4b");
1667 } catch (ArgumentOutOfRangeException) {
1671 Array.FindIndex (array, 7, 2, l => true);
1673 } catch (ArgumentOutOfRangeException) {
1677 [Test, ExpectedException (typeof (ArgumentNullException))]
1678 public void FindLastNullTest ()
1680 var array = new int [] { 1, 2, 3, 4, 5 };
1681 Array.FindLast (array, null);
1685 public void FindLastIndexTest ()
1687 var array = new int [] { 1, 2, 3, 4, 5 };
1689 Assert.AreEqual (2, Array.FindLastIndex (array, 2, 3, l => true));
1690 Assert.AreEqual (2, Array.FindLastIndex (array, 2, 2, l => true));
1691 Assert.AreEqual (1, Array.FindLastIndex (array, 1, 2, l => true));
1695 public void FindLastIndex_Invalid ()
1697 var array = new int [] { 1, 2, 3, 4, 5 };
1699 Array.FindLastIndex (array, null);
1701 } catch (ArgumentNullException) {
1705 Array.FindLastIndex (array, -1, l => true);
1707 } catch (ArgumentOutOfRangeException) {
1711 Array.FindLastIndex (array, -1, 0, l => true);
1712 Assert.Fail ("#2b");
1713 } catch (ArgumentOutOfRangeException) {
1717 Array.FindLastIndex (array, 0, -1, l => true);
1719 } catch (ArgumentOutOfRangeException) {
1723 Array.FindLastIndex (array, 100, l => true);
1725 } catch (ArgumentOutOfRangeException) {
1729 Array.FindLastIndex (array, 100, 0, l => true);
1730 Assert.Fail ("#4b");
1731 } catch (ArgumentOutOfRangeException) {
1735 Array.FindLastIndex (array, 2, 4, l => true);
1737 } catch (ArgumentOutOfRangeException) {
1742 public void TestReverse() {
1744 bool errorThrown = false;
1746 Array.Reverse(null);
1747 } catch (ArgumentNullException) {
1750 Assert.IsTrue (errorThrown, "#L01");
1753 bool errorThrown = false;
1755 char[,] c = new Char[2,2];
1757 } catch (RankException) {
1760 Assert.IsTrue (errorThrown, "#L02");
1763 char[] c1 = {'a', 'b', 'c', 'd'};
1765 Assert.AreEqual ('d', c1[0], "#L03");
1766 Assert.AreEqual ('c', c1[1], "#L04");
1767 Assert.AreEqual ('b', c1[2], "#L05");
1768 Assert.AreEqual ('a', c1[3], "#L06");
1771 bool errorThrown = false;
1773 Array.Reverse(null, 0, 0);
1774 } catch (ArgumentNullException) {
1777 Assert.IsTrue (errorThrown, "#L07");
1780 bool errorThrown = false;
1782 char[,] c = new Char[2,2];
1783 Array.Reverse(c, 0, 0);
1784 } catch (RankException) {
1787 Assert.IsTrue (errorThrown, "#L08");
1790 //bool errorThrown = false;
1792 // char[] c = new Char[2];
1793 // Array.Reverse(c, 0, 3);
1794 //} catch (ArgumentOutOfRangeException) {
1795 // errorThrown = true;
1797 //Assert.IsTrue (errorThrown, "#L09");
1800 //bool errorThrown = false;
1802 // char[] c = new Char[2];
1803 // Array.Reverse(c, 3, 0);
1804 //} catch (ArgumentOutOfRangeException) {
1805 // errorThrown = true;
1807 //Assert.IsTrue (errorThrown, "#L10");
1810 char[] c2 = { 'a', 'b', 'c', 'd'};
1811 Array.Reverse(c2, 1, 2);
1812 Assert.AreEqual ('a', c2[0], "#L11");
1813 Assert.AreEqual ('c', c2[1], "#L12");
1814 Assert.AreEqual ('b', c2[2], "#L13");
1815 Assert.AreEqual ('d', c2[3], "#L14");
1820 public void ReverseStruct () {
1821 BStruct[] c3 = new BStruct[2];
1822 c3 [0] = new BStruct () { i1 = 1, i2 = 2, i3 = 3 };
1823 c3 [1] = new BStruct () { i1 = 4, i2 = 5, i3 = 6 };
1825 Assert.AreEqual (4, c3 [0].i1);
1826 Assert.AreEqual (5, c3 [0].i2);
1827 Assert.AreEqual (6, c3 [0].i3);
1828 Assert.AreEqual (1, c3 [1].i1);
1829 Assert.AreEqual (2, c3 [1].i2);
1830 Assert.AreEqual (3, c3 [1].i3);
1834 public int i1, i2, i3;
1838 public void TestSetValue1() {
1840 bool errorThrown = false;
1842 char[,] c = new Char[2,2];
1843 c.SetValue("buh", 1);
1844 } catch (ArgumentException) {
1847 Assert.IsTrue (errorThrown, "#M01");
1850 bool errorThrown = false;
1852 char[] c = {'a', 'b', 'c'};
1853 c.SetValue("buh", -1);
1854 } catch (IndexOutOfRangeException) {
1857 Assert.IsTrue (errorThrown, "#M02");
1860 bool errorThrown = false;
1862 char[] c = {'a', 'b', 'c'};
1863 c.SetValue("buh", 4);
1864 } catch (IndexOutOfRangeException) {
1867 Assert.IsTrue (errorThrown, "#M03");
1870 char[] c1 = {'a', 'b', 'c', 'd'};
1871 char[] c2 = new char[4];
1872 for (int i = 0; i < c1.Length; i++) {
1873 c2.SetValue(c1[i], i);
1875 for (int i = 0; i < c1.Length; i++) {
1876 Assert.AreEqual (c1[i], c2[i], "#M04(" + i + ")");
1879 int[] c3 = { 1, 2, 3 };
1880 long[] c4 = new long [3];
1882 for (int i = 0; i < c3.Length; i++)
1883 c4.SetValue (c3 [i], i);
1887 } catch (Exception e) {
1888 Assert.Fail ("c3.CopyTo(): e=" + e);
1890 for (int i = 0; i < c3.Length; i++)
1891 Assert.IsTrue (c3[i] == c4[i], "#M05(" + i + ")");
1893 Object[] c5 = new Object [3];
1894 long[] c6 = new long [3];
1898 } catch (Exception e) {
1899 Assert.Fail ("c4.CopyTo(): e=" + e);
1904 } catch (Exception e) {
1905 Assert.Fail ("c5.CopyTo(): e=" + e);
1907 // for (int i = 0; i < c5.Length; i++)
1908 // Assert.IsTrue (c5[i] == c6[i], "#M06(" + i + ")");
1912 public void TestSetValue2() {
1914 bool errorThrown = false;
1916 char[] c = new Char[2];
1917 c.SetValue("buh", 1,1);
1918 } catch (ArgumentException) {
1921 Assert.IsTrue (errorThrown, "#M21");
1924 bool errorThrown = false;
1926 char[,] c = new Char[2,2];
1927 c.SetValue("buh", -1, 1);
1928 } catch (IndexOutOfRangeException) {
1931 Assert.IsTrue (errorThrown, "#M22");
1934 bool errorThrown = false;
1936 char[,] c = new Char[2,2];
1937 c.SetValue("buh", 4,1);
1938 } catch (IndexOutOfRangeException) {
1941 Assert.IsTrue (errorThrown, "#M23");
1944 char[,] c1 = new Char[4,6];
1945 char[,] c2 = new Char[4,6];
1946 for (int i = 0; i < 24; i++) {
1949 c1[first,second] = (char)(((int)'a')+i);
1950 c2.SetValue(c1[first,second], first, second);
1952 for (int i = 0; i < c1.GetLength(0); i++) {
1953 for (int j = 0; j < c1.GetLength(1); j++) {
1954 Assert.AreEqual (c1[i, j], c2[i, j], "#M24(" + i + "," + j + ")");
1960 public void TestSetValue3() {
1962 bool errorThrown = false;
1964 char[] c = new Char[2];
1965 c.SetValue("buh", 1,1,1);
1966 } catch (ArgumentException) {
1969 Assert.IsTrue (errorThrown, "#M41");
1972 bool errorThrown = false;
1974 char[,,] c = new Char[2,2,2];
1975 c.SetValue("buh", -1, 1, 1);
1976 } catch (IndexOutOfRangeException) {
1979 Assert.IsTrue (errorThrown, "#M42");
1982 bool errorThrown = false;
1984 char[,,] c = new Char[2,2,2];
1985 c.SetValue("buh", 4,1,1);
1986 } catch (IndexOutOfRangeException) {
1989 Assert.IsTrue (errorThrown, "#M43");
1992 char[,,] c1 = new Char[4,2,3];
1993 char[,,] c2 = new Char[4,2,3];
1994 for (int i = 0; i < 24; i++) {
1996 int remains = i % 6;
1997 int second = remains / 3;
1998 int third = remains % 3;
1999 c1[first,second, third] = (char)(((int)'a')+i);
2000 c2.SetValue(c1[first, second, third], first, second, third);
2002 for (int i = 0; i < c1.GetLength(0); i++) {
2003 for (int j = 0; j < c1.GetLength(1); j++) {
2004 for (int k = 0; k < c1.GetLength(2); k++) {
2005 Assert.AreEqual (c1[i, j, k], c2[i, j, k], "#M44(" + i + "," + j + " )");
2012 [ExpectedException (typeof (ArgumentNullException))]
2013 public void TestSetValueLongArray ()
2015 char[] c = new Char[2];
2016 c.SetValue("buh", (long [])null);
2020 public void TestSetValueN() {
2022 bool errorThrown = false;
2024 char[] c = new Char[2];
2025 c.SetValue("buh", (int [])null);
2026 } catch (ArgumentNullException) {
2029 Assert.IsTrue (errorThrown, "#M61a");
2032 bool errorThrown = false;
2034 char[] c = new Char[2];
2035 int[] coords = {1, 1};
2036 c.SetValue("buh", coords);
2037 } catch (ArgumentException) {
2040 Assert.IsTrue (errorThrown, "#M62");
2043 bool errorThrown = false;
2045 char[,] c = new Char[2,2];
2046 int[] coords = {-1, 1};
2047 c.SetValue("buh", coords);
2048 } catch (IndexOutOfRangeException) {
2051 Assert.IsTrue (errorThrown, "#M63");
2054 bool errorThrown = false;
2056 char[,] c = new Char[2,2];
2057 int[] coords = {4, 1};
2058 c.SetValue("buh", coords);
2059 } catch (IndexOutOfRangeException) {
2062 Assert.IsTrue (errorThrown, "#M64");
2065 char[,] c1 = new Char[4,6];
2066 char[,] c2 = new Char[4,6];
2067 for (int i = 0; i < 24; i++) {
2070 c1[first,second] = (char)(((int)'a')+i);
2071 int[] coords = {first, second};
2072 c2.SetValue(c1[first,second], coords);
2074 for (int i = 0; i < c1.GetLength(0); i++) {
2075 for (int j = 0; j < c1.GetLength(1); j++) {
2076 Assert.AreEqual (c1[i, j], c2[i, j], "#M65(" + i + "," + j + ")");
2082 public void TestSetValue4() {
2084 int[] c1 = { 1, 2, 3 };
2085 long[] c2 = new long [3];
2087 for (int i = 0; i < c1.Length; i++)
2088 c2.SetValue (c1 [i], i);
2090 for (int i = 0; i < c1.Length; i++) {
2091 Assert.IsTrue (c1[i] == c2[i], "#M81(" + i + ")");
2092 Assert.AreEqual (typeof (long), c2[i].GetType (), "#M82(" + i + ")");
2096 long[] c1 = { 1, 2, 3 };
2097 int[] c2 = new int [3];
2098 bool errorThrown = false;
2100 c2.SetValue (c1 [0], 0);
2101 } catch (ArgumentException) {
2104 Assert.IsTrue (errorThrown, "#M83");
2107 int[] c1 = { 1, 2, 3 };
2108 Object[] c2 = new Object [3];
2110 for (int i = 0; i < c1.Length; i++)
2111 c2.SetValue (c1 [i], i);
2113 for (int i = 0; i < c1.Length; i++)
2114 Assert.AreEqual (c1[i], Convert.ToInt32 (c2[i]), "#M84(" + i + ")");
2117 Object[] c1 = new Object [3];
2118 Object[] c2 = new Object [3];
2119 c1[0] = new Object ();
2121 for (int i = 0; i < c1.Length; i++)
2122 c2.SetValue (c1 [i], i);
2124 for (int i = 0; i < c1.Length; i++)
2125 Assert.AreEqual (c1[i], c2[i], "#M85(" + i + ")");
2128 Object[] c1 = new Object [3];
2129 string[] c2 = new String [3];
2130 string test = "hello";
2133 c2.SetValue (c1 [0], 0);
2134 Assert.AreEqual (c1[0], c2[0], "#M86");
2135 Assert.AreEqual ("hello", c2[0], "#M87");
2138 char[] c1 = { 'a', 'b', 'c' };
2139 string[] c2 = new string [3];
2141 c2.SetValue (c1 [0], 0);
2142 Assert.Fail ("#M88");
2143 } catch (InvalidCastException) {}
2146 Single[] c1 = { 1.2F, 2.3F, 3.4F, 4.5F };
2147 long[] c2 = new long [3];
2149 c2.SetValue (c1 [0], 0);
2150 Assert.Fail ("#M89");
2151 } catch (ArgumentException) {}
2179 UInt32 v11 = 235354;
2180 UInt64 v12 = 234552;
2182 Object[] va1 = { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12 };
2183 Object[] va2 = { "true", "1", "a", "-1.2", "-32", "-234", "-34523", "-1",
2184 "-4.8F", "24234", "235354", "234552" };
2186 Object[][] vt = { va1, va1, va1, va1, va1, va1, va1, va1, va1, va1, va1, va1 };
2189 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2190 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
2191 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
2192 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
2193 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1,
2194 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1,
2195 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1,
2196 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1,
2197 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
2198 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
2199 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0,
2200 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0
2205 for (int i = 0; i < types.Length; i++) {
2206 for (int j = 0; j < types.Length; j++) {
2207 Array array = Array.CreateInstance (types [j], 2);
2209 Object value = vt[j][i];
2211 bool errorThrown = false;
2213 array.SetValue (value, 0);
2214 } catch (ArgumentException) {
2218 int ex_index = (i * types.Length) + j;
2220 Assert.AreEqual (errorThrown, arg_ex [ex_index] == 1, "#M90(" + types [i] + "," + types [j] + ")");
2224 for (int i = 0; i < types.Length; i++) {
2225 String[] array = new String [2];
2227 Object value = va1 [i];
2229 bool errorThrown = false;
2231 array.SetValue (value, 0);
2232 } catch (InvalidCastException) {
2236 Assert.IsTrue (errorThrown, "#M91(" + types [i] + ")");
2239 for (int i = 0; i < types.Length; i++) {
2240 Array array = Array.CreateInstance (types [i], 2);
2242 Object value = va2 [i];
2244 bool errorThrown = false;
2246 array.SetValue (value, 0);
2247 } catch (InvalidCastException) {
2251 Assert.IsTrue (errorThrown, "#M92(" + types [i] + ")");
2254 for (int i = 0; i < types.Length; i++) {
2255 Array array = Array.CreateInstance (types [i], 2);
2257 Object value = null;
2259 bool errorThrown = false;
2261 array.SetValue (value, 0);
2262 } catch (InvalidCastException) {
2266 Assert.IsTrue (!errorThrown, "#M93(" + types [i] + ")");
2271 for (int i = 0; i < types.Length; i++) {
2272 for (int j = 0; j < types.Length; j++) {
2273 Array source = Array.CreateInstance (types [i], 2);
2274 Array array = Array.CreateInstance (types [j], 2);
2276 source.SetValue (vt[j][i], 0);
2277 source.SetValue (vt[j][i], 1);
2279 bool errorThrown = false;
2281 Array.Copy (source, array, 2);
2282 } catch (ArrayTypeMismatchException) {
2286 int ex_index = (i * types.Length) + j;
2288 Assert.AreEqual (errorThrown, arg_ex [ex_index] == 1, "#M94(" + types [i] + "," + types [j] + ")");
2292 for (int i = 0; i < types.Length; i++) {
2293 Array source = Array.CreateInstance (types [i], 2);
2294 String[] array = new String [2];
2296 source.SetValue (va1 [i], 0);
2297 source.SetValue (va1 [i], 1);
2299 bool errorThrown = false;
2301 Array.Copy (source, array, 2);
2302 } catch (ArrayTypeMismatchException) {
2306 Assert.IsTrue (errorThrown, "#M95(" + types [i] + ")");
2309 for (int i = 0; i < types.Length; i++) {
2310 String[] source = new String [2];
2311 Array array = Array.CreateInstance (types [i], 2);
2313 source.SetValue (va2 [i], 0);
2314 source.SetValue (va2 [i], 1);
2316 bool errorThrown = false;
2318 Array.Copy (source, array, 2);
2319 } catch (ArrayTypeMismatchException) {
2323 Assert.IsTrue (errorThrown, "#M96(" + types [i] + ")");
2329 public void TestSort() {
2331 bool errorThrown = false;
2334 } catch (ArgumentNullException) {
2337 Assert.IsTrue (errorThrown, "#N01");
2340 bool errorThrown = false;
2342 Array.Sort(null, 0, 1);
2343 } catch (ArgumentNullException) {
2346 Assert.IsTrue (errorThrown, "#N02");
2349 bool errorThrown = false;
2351 char[] c1 = new Char[2];
2352 Array.Sort(null, c1);
2353 } catch (ArgumentNullException) {
2356 Assert.IsTrue (errorThrown, "#N03");
2359 bool errorThrown = false;
2361 char[] c1 = new Char[2];
2362 Array.Sort(null, c1, 0, 1);
2363 } catch (ArgumentNullException) {
2366 Assert.IsTrue (errorThrown, "#N04");
2370 char[] arr = {'d', 'b', 'f', 'e', 'a', 'c'};
2373 Array.Sort (null, 0, 1);
2374 Assert.Fail ("#N" + tc.ToString ());
2376 catch (ArgumentException) {}
2377 catch (Exception) { Assert.Fail ("#N" + tc.ToString ()); }
2381 Array.Sort (arr, -1, 3);
2382 Assert.Fail ("#N" + tc.ToString ());
2384 catch (ArgumentException) {}
2385 catch (Exception) { Assert.Fail ("#N" + tc.ToString ()); }
2389 Array.Sort (arr, 1, -3);
2390 Assert.Fail ("#N" + tc.ToString ());
2392 catch (ArgumentException) {}
2393 catch (Exception) { Assert.Fail ("#N" + tc.ToString ()); }
2397 Array.Sort (arr, arr.Length, arr.Length + 2);
2398 Assert.Fail ("#N" + tc.ToString ());
2400 catch (ArgumentException) {}
2401 catch (Exception) { Assert.Fail ("#N" + tc.ToString ()); }
2404 // note: null second array => just sort first array
2405 char[] starter = {'d', 'b', 'f', 'e', 'a', 'c'};
2406 int[] starter1 = {1,2,3,4,5,6};
2408 char[] c1 = (char[])starter.Clone();
2410 Assert.AreEqual ('a', c1[0], "#N21");
2411 Assert.AreEqual ('b', c1[1], "#N22");
2412 Assert.AreEqual ('c', c1[2], "#N23");
2413 Assert.AreEqual ('d', c1[3], "#N24");
2414 Assert.AreEqual ('e', c1[4], "#N25");
2415 Assert.AreEqual ('f', c1[5], "#N26");
2418 char[] c1 = (char[])starter.Clone();
2419 int[] i1 = (int[])starter1.Clone();
2421 Assert.AreEqual ('a', c1[0], "#N41");
2422 Assert.AreEqual ('b', c1[1], "#N42");
2423 Assert.AreEqual ('c', c1[2], "#N43");
2424 Assert.AreEqual ('d', c1[3], "#N44");
2425 Assert.AreEqual ('e', c1[4], "#N45");
2426 Assert.AreEqual ('f', c1[5], "#N46");
2427 Assert.AreEqual (5, i1[0], "#N47");
2428 Assert.AreEqual (2, i1[1], "#N48");
2429 Assert.AreEqual (6, i1[2], "#N49");
2430 Assert.AreEqual (1, i1[3], "#N50");
2431 Assert.AreEqual (4, i1[4], "#N51");
2432 Assert.AreEqual (3, i1[5], "#N52");
2435 char[] c1 = (char[])starter.Clone();
2436 Array.Sort(c1, 1, 4);
2437 Assert.AreEqual ('d', c1[0], "#N61");
2438 Assert.AreEqual ('a', c1[1], "#N62");
2439 Assert.AreEqual ('b', c1[2], "#N63");
2440 Assert.AreEqual ('e', c1[3], "#N64");
2441 Assert.AreEqual ('f', c1[4], "#N65");
2442 Assert.AreEqual ('c', c1[5], "#N66");
2445 char[] c1 = (char[])starter.Clone();
2446 int[] i1 = (int[])starter1.Clone();
2447 Array.Sort(c1, i1, 1, 4);
2448 Assert.AreEqual ('d', c1[0], "#N81");
2449 Assert.AreEqual ('a', c1[1], "#N82");
2450 Assert.AreEqual ('b', c1[2], "#N83");
2451 Assert.AreEqual ('e', c1[3], "#N84");
2452 Assert.AreEqual ('f', c1[4], "#N85");
2453 Assert.AreEqual ('c', c1[5], "#N86");
2454 Assert.AreEqual (1, i1[0], "#N87");
2455 Assert.AreEqual (5, i1[1], "#N88");
2456 Assert.AreEqual (2, i1[2], "#N89");
2457 Assert.AreEqual (4, i1[3], "#N90");
2458 Assert.AreEqual (3, i1[4], "#N91");
2459 Assert.AreEqual (6, i1[5], "#N92");
2464 double[] a = new double[115];
2465 int[] b = new int[256];
2466 Array.Sort<double, int> (a, b, 0, 115);
2469 /* Check that ulong[] is not sorted as long[] */
2471 string[] names = new string[] {
2472 "A", "B", "C", "D", "E"
2475 ulong[] arr = new ulong [] {
2477 unchecked((ulong)0xffffFFFF00000000),
2484 Array.Sort (a, names, null);
2485 Assert.AreEqual (0, a.GetValue (0));
2490 public void SortNonGenericDoubleItems () {
2491 double[] doubleValues = new double[11];
2493 doubleValues[0] = 0.221788066253601;
2494 doubleValues[1] = 0.497278285809481;
2495 doubleValues[2] = 0.100565033883643;
2496 doubleValues[3] = 0.0433309347749905;
2497 doubleValues[4] = 0.00476726438463812;
2498 doubleValues[5] = 0.1354609735456;
2499 doubleValues[6] = 0.57690356588135;
2500 doubleValues[7] = 0.466239434334826;
2501 doubleValues[8] = 0.409741461978934;
2502 doubleValues[9] = 0.0112412763949565;
2503 doubleValues[10] = 0.668704347674307;
2505 int[] indices = new int[11];
2518 Array.Sort ((Array)doubleValues, (Array)indices);
2519 Assert.AreEqual (4, indices [0]);
2523 public void TestInitializeEmpty()
2535 Assert.IsTrue (!catched, "#TI01");
2539 public void TestInitializeInt()
2544 for(int i=a.GetLowerBound(0);i<=a.GetUpperBound(0);i++)
2546 Assert.AreEqual (a[i], b[i], "#TI02 " + i);
2551 public void TestInitializeDouble()
2553 double[] a = {1.0,2.0,0.0};
2555 double[] b = {1.0,2.0,0.0};
2556 for(int i=a.GetLowerBound(0);i<=a.GetUpperBound(0);i++)
2558 Assert.AreEqual (a[i], b[i], "#TI03 " + i);
2563 public void TestInitializeFloat()
2565 float[] a = {1.0F,2.0F,0.0F};
2567 float[] b = {1.0F,2.0F,0.0F};
2568 for(int i=a.GetLowerBound(0);i<=a.GetUpperBound(0);i++)
2570 Assert.AreEqual (a[i], b[i], "#TI04 " + i);
2575 public void TestInitializeChar()
2577 char[] a = {'1','.','0','F','2','.','0','F'};
2579 char[] b = {'1','.','0','F','2','.','0','F'};
2580 for(int i=a.GetLowerBound(0);i<=a.GetUpperBound(0);i++)
2582 Assert.AreEqual (a[i], b[i], "#TI05 " + i);
2587 public void TestInitializeString()
2589 string[] a = {"hola","adios","menos","mas"};
2591 string[] b = {"hola","adios","menos","mas"};
2592 for(int i=a.GetLowerBound(0);i<=a.GetUpperBound(0);i++)
2594 Assert.AreEqual (a[i], b[i], "#TI06 " + i);
2599 public void TestInitializeEnum()
2601 enua[] a = {enua.hola,enua.adios,enua.menos,enua.mas};
2603 enua[] b = {enua.hola,enua.adios,enua.menos,enua.mas};
2604 for(int i=a.GetLowerBound(0);i<=a.GetUpperBound(0);i++)
2606 Assert.AreEqual (a[i], b[i], "#TI07 " + i);
2611 public void TestInitializeIntNI()
2613 int[] a = new int[20];
2617 Assert.AreEqual (b, 0, "#TI08");
2622 public void TestInitializeCharNI()
2624 char[] a = new char[20];
2626 foreach(char b in a)
2628 Assert.AreEqual (b, 0, "#TI09");
2633 public void TestInitializeDoubleNI()
2635 double[] a = new double[20];
2637 foreach(double b in a)
2639 Assert.AreEqual (b, 0.0, "#TI09");
2644 public void TestInitializeStringNI()
2646 string[] a = new string[20];
2648 foreach(string b in a)
2650 Assert.AreEqual (b, null, "#TI10");
2655 public void TestInitializeObjectNI()
2657 object[] a = new object[20];
2659 foreach(object b in a)
2661 Assert.AreEqual (b, null, "#TI11");
2666 public void TestInitializeAClassNI()
2668 AClass[] a = new AClass[20];
2670 foreach(AClass b in a)
2672 Assert.AreEqual (b, null, "#TI12");
2678 public void TestInitializeAStructNI()
2680 AStruct[] a = new AStruct[20];
2682 foreach(AStruct b in a)
2684 Assert.AreEqual (b, new AStruct(), "#TI14");
2689 public void TestInitializeAStruct()
2691 AStruct[] a = new AStruct[3];
2695 AStruct[] b = new AStruct[3];
2698 for(int i=a.GetLowerBound(0);i<=a.GetUpperBound(0);i++)
2700 Assert.AreEqual (a[i], b[i], "#TI15 " + i);
2705 public void TestInitializeDateTimeNI()
2707 DateTime[] a = new DateTime[20];
2709 foreach(DateTime b in a)
2711 Assert.AreEqual (b, new DateTime(), "#TI16");
2716 [ExpectedException (typeof (ArgumentNullException))]
2717 public void MoreSort1 ()
2719 Array.Sort (null, 0, 1);
2723 [ExpectedException (typeof (ArgumentOutOfRangeException))]
2724 public void MoreSort2 ()
2726 Array.Sort (arrsort, -1, 3);
2730 [ExpectedException (typeof (ArgumentOutOfRangeException))]
2731 public void MoreSort3 ()
2733 Array.Sort (arrsort, 1, -3);
2737 [ExpectedException (typeof (ArgumentException))]
2738 public void MoreSort4 ()
2740 Array.Sort (arrsort, arrsort.Length, arrsort.Length + 2);
2744 [ExpectedException (typeof (RankException))]
2745 public void MoreSort5 ()
2747 char [,] arr = new char [,] {{'a'}, {'b'}};
2748 Array.Sort (arr, 0, 1);
2752 public void MoreSort6 ()
2754 Array.Sort (arrsort, 0, 0);
2758 [ExpectedException (typeof (ArgumentException))]
2759 public void MoreSort7 ()
2761 Array.Sort (arrsort, arrsort.Length - 1, 2);
2765 [ExpectedException (typeof (ArgumentException))]
2766 public void MoreSort8 ()
2768 Array.Sort (arrsort, 0, arrsort.Length + 1);
2772 public void MoreSort9 ()
2774 Array.Sort (arrsort, null, 0, arrsort.Length, null);
2778 [ExpectedException (typeof (InvalidOperationException))]
2779 public void MoreSort10 ()
2781 object [] array = {true, 'k', SByte.MinValue, Byte.MinValue, (short) 2, 634, (long) 436, (float) 1.1, 1.23, "Hello World"};
2782 Array.Sort (array, (IComparer) null);
2785 [Test] // bug #81941
2788 double [] a = new double [2] { 0.9, 0.3 };
2789 uint [] b = new uint [2] { 4, 7 };
2791 Assert.AreEqual (0.3, a [0], "#1");
2792 Assert.AreEqual (0.9, a [1], "#2");
2793 Assert.AreEqual (7, b [0], "#3");
2794 Assert.AreEqual (4, b [1], "#4");
2798 public void ClearJaggedArray ()
2800 byte[][] matrix = new byte [8][];
2801 for (int i=0; i < 8; i++) {
2802 matrix [i] = new byte [8];
2803 for (int j=0; j < 8; j++) {
2807 Array.Clear (matrix, 0, 8);
2808 for (int i=0; i < 8; i++) {
2809 Assert.IsNull (matrix [i], i.ToString ());
2814 public void ClearMultidimentionalArray ()
2816 byte[,] matrix = new byte [2,2] { {1, 1}, {2, 2} };
2817 Array.Clear (matrix, 0, 2);
2818 Assert.AreEqual (0, matrix [0, 0], "0,0");
2819 Assert.AreEqual (0, matrix [0, 1], "0,1");
2820 Assert.AreEqual (2, matrix [1, 0], "1,0");
2821 Assert.AreEqual (2, matrix [1, 1], "1,1");
2825 [ExpectedException (typeof (IndexOutOfRangeException))]
2826 public void ClearOutsideMultidimentionalArray ()
2828 byte[,] matrix = new byte [2,2] { {1, 1}, {2, 2} };
2829 Array.Clear (matrix, 0, 5);
2833 [ExpectedException (typeof (IndexOutOfRangeException))]
2834 public void Clear_IndexOverflow ()
2836 byte[] array = new byte [16];
2837 Array.Clear (array, 4, Int32.MaxValue);
2841 [ExpectedException (typeof (IndexOutOfRangeException))]
2842 public void Clear_LengthOverflow ()
2844 byte[] array = new byte [16];
2845 Array.Clear (array, Int32.MaxValue, 4);
2849 [ExpectedException (typeof (ArgumentException))]
2850 public void Copy_SourceIndexOverflow ()
2852 byte[] array = new byte [16];
2853 Array.Copy (array, Int32.MaxValue, array, 8, 8);
2857 [ExpectedException (typeof (ArgumentException))]
2858 public void Copy_DestinationIndexOverflow ()
2860 byte[] array = new byte [16];
2861 Array.Copy (array, 8, array, Int32.MaxValue, 8);
2865 [ExpectedException (typeof (ArgumentException))]
2866 public void Copy_LengthOverflow ()
2868 byte[] array = new byte [16];
2869 Array.Copy (array, 8, array, 8, Int32.MaxValue);
2873 [ExpectedException (typeof (ArgumentException))]
2874 public void Reverse_IndexOverflow ()
2876 byte[] array = new byte [16];
2877 Array.Reverse (array, Int32.MaxValue, 8);
2881 [ExpectedException (typeof (ArgumentException))]
2882 public void Reverse_LengthOverflow ()
2884 byte[] array = new byte [16];
2885 Array.Reverse (array, 8, Int32.MaxValue);
2888 public struct CharX : IComparable {
2891 public CharX (char c)
2896 public int CompareTo (object obj)
2899 return c.CompareTo (((CharX) obj).c);
2901 return c.CompareTo (obj);
2906 public void BinarySearch_ArgPassingOrder ()
2909 // This tests that arguments are passed to the comprer in the correct
2910 // order. The IComparable of the *array* elements must get called, not
2911 // that of the search object.
2913 CharX [] x = { new CharX ('a'), new CharX ('b'), new CharX ('c') };
2914 Assert.AreEqual (1, Array.BinarySearch (x, 'b'));
2917 class Comparer: IComparer {
2919 private bool called = false;
2921 public bool Called {
2923 bool result = called;
2929 public int Compare (object x, object y)
2937 public void BinarySearch1_EmptyList ()
2939 int[] array = new int[0];
2940 Assert.AreEqual (- 1, Array.BinarySearch (array, 0), "BinarySearch");
2944 public void BinarySearch2_EmptyList ()
2946 int[] array = new int[0];
2947 Assert.AreEqual (-1, Array.BinarySearch (array, 0, 0, 0), "BinarySearch");
2951 public void BinarySearch3_EmptyList ()
2953 Comparer comparer = new Comparer ();
2954 int[] array = new int[0];
2955 Assert.AreEqual (-1, Array.BinarySearch (array, 0, comparer), "BinarySearch");
2956 // bug 77030 - the comparer isn't called for an empty array/list
2957 Assert.IsTrue (!comparer.Called, "Called");
2961 public void BinarySearch4_EmptyList ()
2963 Comparer comparer = new Comparer ();
2964 int[] array = new int[0];
2965 Assert.AreEqual (-1, Array.BinarySearch (array, 0, 0, comparer), "BinarySearch");
2966 // bug 77030 - the comparer isn't called for an empty array/list
2967 Assert.IsTrue (!comparer.Called, "Called");
2971 [ExpectedException (typeof (ArgumentNullException))]
2972 public void AsReadOnly_NullArray ()
2974 Array.AsReadOnly <int> (null);
2978 public void ReadOnly_Count ()
2980 Assert.AreEqual (10, Array.AsReadOnly (new int [10]).Count);
2984 public void ReadOnly_Contains ()
2986 int[] arr = new int [2];
2989 IList<int> a = Array.AsReadOnly (arr);
2991 Assert.IsTrue (a.Contains (3));
2992 Assert.IsTrue (!a.Contains (6));
2996 public void ReadOnly_IndexOf ()
2998 int[] arr = new int [2];
3001 IList<int> a = Array.AsReadOnly (arr);
3003 Assert.AreEqual (0, a.IndexOf (3));
3004 Assert.AreEqual (1, a.IndexOf (5));
3005 Assert.AreEqual (-1, a.IndexOf (6));
3009 public void ReadOnly_Indexer ()
3011 int[] arr = new int [2];
3014 IList<int> a = Array.AsReadOnly (arr);
3016 Assert.AreEqual (3, a [0]);
3017 Assert.AreEqual (5, a [1]);
3019 /* Check that modifications to the original array are visible */
3021 Assert.AreEqual (6, a [0]);
3025 public void ReadOnly_Enumerator ()
3027 int[] arr = new int [10];
3029 for (int i = 0; i < 10; ++i)
3033 foreach (int i in Array.AsReadOnly (arr))
3036 Assert.AreEqual (45, sum);
3040 public void ReadOnly_CopyTo ()
3042 int[] arr = new int [2];
3045 IList<int> a = Array.AsReadOnly (arr);
3047 int[] arr2 = new int [3];
3050 Assert.AreEqual (0, arr2 [0]);
3051 Assert.AreEqual (3, arr2 [1]);
3052 Assert.AreEqual (5, arr2 [2]);
3056 public void Resize ()
3058 int [] arr = new int [] { 1, 3, 5 };
3059 Array.Resize <int> (ref arr, 3);
3060 Assert.AreEqual (3, arr.Length, "#A1");
3061 Assert.AreEqual (1, arr [0], "#A2");
3062 Assert.AreEqual (3, arr [1], "#A3");
3063 Assert.AreEqual (5, arr [2], "#A4");
3065 Array.Resize <int> (ref arr, 2);
3066 Assert.AreEqual (2, arr.Length, "#B1");
3067 Assert.AreEqual (1, arr [0], "#B2");
3068 Assert.AreEqual (3, arr [1], "#B3");
3070 Array.Resize <int> (ref arr, 4);
3071 Assert.AreEqual (4, arr.Length, "#C1");
3072 Assert.AreEqual (1, arr [0], "#C2");
3073 Assert.AreEqual (3, arr [1], "#C3");
3074 Assert.AreEqual (0, arr [2], "#C4");
3075 Assert.AreEqual (0, arr [3], "#C5");
3079 public void Resize_null ()
3082 Array.Resize (ref arr, 10);
3083 Assert.AreEqual (arr.Length, 10);
3087 public void Test_ContainsAndIndexOf_EquatableItem ()
3089 EquatableClass[] list = new EquatableClass[] {new EquatableClass (0), new EquatableClass (1), new EquatableClass (0)};
3091 Assert.AreEqual (0, Array.IndexOf<EquatableClass> (list, list[0]), "#0");
3092 Assert.AreEqual (0, Array.IndexOf<EquatableClass> (list, new EquatableClass (0)), "#1");
3093 Assert.AreEqual (2, Array.LastIndexOf<EquatableClass> (list, list[0]), "#2");
3094 Assert.AreEqual (2, Array.LastIndexOf<EquatableClass> (list, new EquatableClass (0)), "#3");
3097 public class EquatableClass : IEquatable<EquatableClass>
3100 public EquatableClass (int x)
3105 public bool Equals (EquatableClass other)
3107 return this._x == other._x;
3112 public void AsIList ()
3114 IList<int> arr = new int [10];
3116 Assert.AreEqual (5, arr [0]);
3118 IList<FooStruct> arr2 = new FooStruct [10];
3119 FooStruct s = new FooStruct ();
3124 Assert.AreEqual (11, s.i);
3125 Assert.AreEqual (22, s.j);
3127 IList<string> arr3 = new string [10];
3129 Assert.AreEqual ("ABC", arr3 [5]);
3136 #if !TARGET_JVM // BugBUG: T[] is not yet ICollection<T> under TARGET_JVM
3139 public void ICollectionNull ()
3141 ICollection<object> test;
3143 test = new List<object>();
3144 Assert.AreEqual (test.Contains (null), false, "list<o>");
3146 test = new object[] {};
3147 Assert.AreEqual (test.Contains (null), false, "empty array");
3149 test = new object[] {null};
3150 Assert.AreEqual (test.Contains (null), true, "array with null");
3152 test = new object[] { 1, null};
3153 Assert.IsTrue (test.Contains (null), "array with last null");
3155 test = new List<object>(test);
3156 Assert.AreEqual (test.Contains (null), true, "List<object> with test");
3158 test = new object[] {new object()};
3159 Assert.AreEqual (test.Contains (null), false, "array with object");
3161 test = new List<object>(test);
3162 Assert.AreEqual (test.Contains (null), false, "array with test");
3166 public void IListNull ()
3170 test = new List<object>();
3171 Assert.AreEqual (-1, test.IndexOf (null), "list<o>");
3173 test = new object[] {};
3174 Assert.AreEqual (-1, test.IndexOf (null), "empty array");
3176 test = new object[] {null};
3177 Assert.AreEqual (0, test.IndexOf (null), "array with null");
3179 test = new object[] { 1, null};
3180 Assert.AreEqual (1, test.IndexOf (null), "array with last null");
3182 test = new List<object>(test);
3183 Assert.AreEqual (1, test.IndexOf (null), "List<object> with test");
3185 test = new object[] {new object()};
3186 Assert.AreEqual (-1, test.IndexOf (null), "array with object");
3188 test = new List<object>(test);
3189 Assert.AreEqual (-1, test.IndexOf (null), "array with test");
3192 #endif // TARGET_JVM
3196 enum ByteEnum : byte {}
3197 enum IntEnum : int {}
3200 public void TestByteEnumArrayToByteArray ()
3202 ByteEnum[] a = new ByteEnum[] {(ByteEnum) 1, (ByteEnum) 2};
3203 byte[] b = new byte[a.Length];
3208 public void TestByteEnumArrayToIntArray ()
3210 ByteEnum[] a = new ByteEnum[] {(ByteEnum) 1, (ByteEnum) 2};
3211 int[] b = new int[a.Length];
3216 [ExpectedException (typeof (ArrayTypeMismatchException))]
3217 public void TestIntEnumArrayToByteArray ()
3219 IntEnum[] a = new IntEnum[] {(IntEnum) 1, (IntEnum) 2};
3220 byte[] b = new byte[a.Length];
3225 public void TestIntEnumArrayToIntArray ()
3227 IntEnum[] a = new IntEnum[] {(IntEnum) 1, (IntEnum) 2};
3228 int[] b = new int[a.Length];
3234 [Test] // bug #322248
3235 public void IEnumerator_Reset ()
3237 int[] array = new int[] { 1, 2, 3};
3238 IEnumerator<int> e = ((IEnumerable<int>)array).GetEnumerator ();
3239 Assert.IsTrue (e.MoveNext (), "#A1");
3240 Assert.AreEqual (1, e.Current, "#A2");
3241 Assert.IsTrue (e.MoveNext (), "#A3");
3242 Assert.AreEqual (2, e.Current, "#A4");
3246 Assert.IsTrue (e.MoveNext (), "#C1");
3247 Assert.AreEqual (1, e.Current, "#C2");
3251 public void IEnumerator_Current_Finished ()
3253 int[] array = new int[] { 1, 2, 3 };
3254 IEnumerator<int> e = ((IEnumerable<int>)array).GetEnumerator ();
3255 Assert.IsTrue (e.MoveNext (), "#A1");
3256 Assert.AreEqual (1, e.Current, "#A2");
3257 Assert.IsTrue (e.MoveNext (), "#A3");
3258 Assert.AreEqual (2, e.Current, "#A4");
3259 Assert.IsTrue (e.MoveNext (), "#A5");
3260 Assert.AreEqual (3, e.Current, "#A6");
3261 Assert.IsTrue (!e.MoveNext (), "#A6");
3264 Assert.Fail ("#B1:" + e.Current);
3265 } catch (InvalidOperationException ex) {
3266 // Enumeration already finished
3267 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
3268 Assert.IsNull (ex.InnerException, "#B3");
3269 Assert.IsNotNull (ex.Message, "#B4");
3274 public void IEnumerator_Current_NotStarted ()
3276 int[] array = new int[] { 1, 2, 3 };
3277 IEnumerator<int> e = ((IEnumerable<int>)array).GetEnumerator ();
3280 Assert.Fail ("#A1:" + e.Current);
3281 } catch (InvalidOperationException ex) {
3282 // Enumeration has not started. Call MoveNext
3283 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
3284 Assert.IsNull (ex.InnerException, "#A3");
3285 Assert.IsNotNull (ex.Message, "#A4");
3290 public void IEnumerator_Current_Reset ()
3292 int[] array = new int[] { 1, 2, 3 };
3293 IEnumerator<int> e = ((IEnumerable<int>)array).GetEnumerator ();
3298 Assert.Fail ("#B1:" + e.Current);
3299 } catch (InvalidOperationException ex) {
3300 // Enumeration has not started. Call MoveNext
3301 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
3302 Assert.IsNull (ex.InnerException, "#B3");
3303 Assert.IsNotNull (ex.Message, "#B4");
3307 public void ICollection_IsReadOnly() {
3308 ICollection<string> arr = new string [10];
3310 Assert.IsTrue (arr.IsReadOnly);
3314 [ExpectedException (typeof (NotSupportedException))]
3315 public void ArrayCreateInstanceOfVoid ()
3317 Array.CreateInstance (typeof (void), 42);
3323 [ExpectedException (typeof (NotSupportedException))]
3324 public void ArrayCreateInstanceOfOpenGenericType ()
3326 Array.CreateInstance (typeof (Foo<>), 42);
3330 [ExpectedException (typeof (IndexOutOfRangeException))]
3331 public void ClearNegativeLength ()
3333 Array.Clear (new int [] { 1, 2 }, 0, -1);
3337 [ExpectedException (typeof (ArgumentException))]
3338 public void MultiDimension_IList_setItem ()
3340 IList array = new int [1, 1];
3345 [ExpectedException (typeof (ArgumentException))]
3346 public void MultiDimension_IList_getItem ()
3348 IList array = new int [1, 1];
3349 int a = (int) array [0];
3353 public void SetValue_Nullable () {
3354 Array array = Array.CreateInstance (typeof (int?), 7);
3358 array.SetValue (o, 0);
3359 Assert.AreEqual (42, array.GetValue (0));
3361 array.SetValue (null, 0);
3362 Assert.AreEqual (null, array.GetValue (0));
3366 public void SortNullsWithGenericVersion ()
3368 string[] s1 = new string[6]{
3376 string[] s2 = new string[]{null,
3383 Array.Sort<string> (s1);
3384 for (int i = 0; i < 6; i++) {
3385 Assert.AreEqual (s1[i], s2[i], "At:" + i);
3390 // This is a test case for the case that was broken by the code contributed
3393 // This tests the fix for: #622101
3396 public void SortActuallyWorks ()
3398 string[] data = new string[9]{"Foo", "Bar", "Dingus", null, "Dingu4", "123", "Iam", null, "NotNull"};
3399 IComparer comparer = new NullAtEndComparer ();
3400 Array.Sort (data, comparer);
3402 Assert.AreEqual (data [7], null);
3403 Assert.AreNotEqual (data [0], null);
3406 class NullAtEndComparer : IComparer {
3407 public int Compare(object x, object y)
3409 if (x == null) return 1;
3410 if (y == null) return -1;
3411 return ((string)x).CompareTo((string)y);
3416 public void UnalignedArrayClear ()
3418 byte[] input = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
3419 byte[] expected = new byte[] { 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
3420 Array.Clear (input, 5, 11);
3422 Assert.AreEqual (input, expected);
3427 [ExpectedException (typeof (ArgumentException))]
3428 public void CompareToWithJaggedArray () {
3429 IStructuralComparable a = new int[][] { new int [] { 1,2 }, new int [] { 3,4 }};
3430 IStructuralComparable b = new int[][] { new int [] { 1,2 }, new int [] { 3,4 }};
3431 a.CompareTo (b, Comparer<object>.Default);
3435 [ExpectedException (typeof (ArgumentException))]
3436 public void CompareToWithArrayOfTheWrongKind () {
3437 IStructuralComparable a = new int[] { 1, 2 };
3438 IStructuralComparable b = new double[] { 1, 2 };
3439 a.CompareTo (b, Comparer<object>.Default);
3443 [ExpectedException (typeof (ArgumentException))]
3444 public void CompareToWithNonArrayType () {
3445 IStructuralComparable a = new int[] { 1, 2 };
3446 a.CompareTo (99, Comparer<object>.Default);
3450 [ExpectedException (typeof (ArgumentException))]
3451 public void CompareToWithNonArrayOfDifferentSize () {
3452 IStructuralComparable a = new int[] { 1, 2 };
3453 IStructuralComparable b = new int[] { 1, 2, 3 };
3454 a.CompareTo (b, Comparer<object>.Default);
3458 [ExpectedException (typeof (ArgumentException))]
3459 public void CompareToWithMultiDimArray1 () {
3460 IStructuralComparable a = new int [2,2] { {10, 10 }, { 10, 10 } };
3461 IStructuralComparable b = new int [2,2] { {10, 10 }, { 10, 10 } };
3462 a.CompareTo (b, Comparer<object>.Default);
3466 [ExpectedException (typeof (ArgumentException))]
3467 public void CompareToWithMultiDimArray2 () {
3468 IStructuralComparable a = new int [2] { 10, 10 };
3469 IStructuralComparable b = new int [2,2] { {10, 10 }, { 10, 10 } };
3470 a.CompareTo (b, Comparer<object>.Default);
3474 [ExpectedException (typeof (ArgumentException))]
3475 public void CompareToWithMultiDimArray3 () {
3476 IStructuralComparable a = new int [4] { 10, 10, 10, 10 };
3477 IStructuralComparable b = new int [2,2] { {10, 10 }, { 10, 10 } };
3478 a.CompareTo (b, Comparer<object>.Default);
3482 [ExpectedException (typeof (IndexOutOfRangeException))]
3483 public void CompareToWithBoundedArray1 () {
3484 IStructuralComparable a = new int [2] { 10, 10 };
3485 Array ab = Array.CreateInstance (typeof (int), new int[] { 2 }, new int [] { 5 });
3486 IStructuralComparable b = ab;
3487 ab.SetValue (10, 5);
3488 ab.SetValue (10, 6);
3490 a.CompareTo (b, Comparer<object>.Default);
3494 [ExpectedException (typeof (IndexOutOfRangeException))]
3495 public void CompareToWithBoundedArray2 () {
3496 IStructuralComparable a = new int [2] { 10, 10 };
3497 Array ab = Array.CreateInstance (typeof (int), new int[] { 2 }, new int [] { 5 });
3498 IStructuralComparable b = ab;
3499 ab.SetValue (10, 5);
3500 ab.SetValue (10, 6);
3502 //Yes, CompareTo simply doesn't work with bounded arrays!
3503 b.CompareTo (b, Comparer<object>.Default);
3507 [ExpectedException (typeof (NullReferenceException))]
3508 public void CompareToWithNullComparer () {
3509 IStructuralComparable a = new int[] { 1, 2 };
3510 IStructuralComparable b = new int[] { 1, 2 };
3511 a.CompareTo (b, null);
3515 public void CompareToWithNullArray () {
3516 IStructuralComparable a = new int[] { 1, 2 };
3517 Assert.AreEqual (1, a.CompareTo (null, Comparer<object>.Default));
3521 public void CompareToWithGoodArrays () {
3522 IStructuralComparable a = new int[] { 10, 20 };
3523 Assert.AreEqual (0, a.CompareTo (a, Comparer<object>.Default));
3524 Assert.AreEqual (0, a.CompareTo (new int [] { 10, 20 }, Comparer<object>.Default));
3525 Assert.AreEqual (-1, a.CompareTo (new int [] { 11, 20 }, Comparer<object>.Default));
3526 Assert.AreEqual (-1, a.CompareTo (new int [] { 10, 21 }, Comparer<object>.Default));
3527 Assert.AreEqual (1, a.CompareTo (new int [] { 9, 20 }, Comparer<object>.Default));
3528 Assert.AreEqual (1, a.CompareTo (new int [] { 10, 19 }, Comparer<object>.Default));
3532 public void IStructuralEquatable_Equals ()
3534 IStructuralEquatable array = new int[] {1, 2, 3};
3535 IStructuralEquatable array2 = new int[] {1, 2, 3};
3536 Assert.AreEqual (false, array.Equals (null, null));
3537 Assert.AreEqual (true, array.Equals (array, null));
3538 Assert.AreEqual (true, array.Equals (array2, EqualityComparer<int>.Default));
3542 [ExpectedException (typeof (NullReferenceException))]
3543 public void IStructuralEquatable_Equals_NoComparer ()
3545 IStructuralEquatable array = new int[] {1, 2, 3};
3546 IStructuralComparable array2 = new int[] {1, 2, 3};
3547 array.Equals (array2, null);
3551 [ExpectedException (typeof (ArgumentException))]
3552 public void IStructuralEquatable_Equals_ComparerThrows ()
3554 IStructuralEquatable array = new int[] {1, 2, 3};
3555 IStructuralComparable array2 = new int[] {1, 2, 3};
3556 array.Equals (array2, EqualityComparer<long>.Default);
3560 [ExpectedException (typeof (ArgumentNullException))]
3561 public void IStructuralEquatable_GetHashCode_NullComparer ()
3563 IStructuralEquatable a = new int[] { 1, 2 };
3564 a.GetHashCode (null);
3567 class TestComparer_GetHashCode : IEqualityComparer
3571 bool IEqualityComparer.Equals (object x, object y)
3573 throw new NotImplementedException ();
3576 public int GetHashCode (object obj)
3583 public void IStructuralEquatable_GetHashCode ()
3585 IStructuralEquatable a = new int[] { 1, 2, 9 };
3587 var c = new TestComparer_GetHashCode ();
3589 Assert.AreEqual (3, c.Counter);