From: Marek Safar Date: Thu, 5 Oct 2017 11:54:35 +0000 (+0200) Subject: [corlib] Fixes array enumerator to match .net behaviour X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mono.git;a=commitdiff_plain;h=44e063161885fc7e5d288265e4241d163f98ad02 [corlib] Fixes array enumerator to match .net behaviour --- diff --git a/mcs/class/corlib/System/Array.cs b/mcs/class/corlib/System/Array.cs index 00e0430d3de..d699446f2b5 100644 --- a/mcs/class/corlib/System/Array.cs +++ b/mcs/class/corlib/System/Array.cs @@ -207,7 +207,7 @@ namespace System // we just decr the size, so, 0 - 1 == FINISHED const int FINISHED = -1; - Array array; + readonly Array array; int idx; internal InternalEnumerator (Array array) @@ -218,7 +218,6 @@ namespace System public void Dispose () { - idx = NOT_STARTED; } public bool MoveNext () diff --git a/mcs/class/corlib/Test/System/ArrayTest.cs b/mcs/class/corlib/Test/System/ArrayTest.cs index 5279edc1a2b..0a04041aea3 100644 --- a/mcs/class/corlib/Test/System/ArrayTest.cs +++ b/mcs/class/corlib/Test/System/ArrayTest.cs @@ -3385,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];