From 44e063161885fc7e5d288265e4241d163f98ad02 Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Thu, 5 Oct 2017 13:54:35 +0200 Subject: [PATCH] [corlib] Fixes array enumerator to match .net behaviour --- mcs/class/corlib/System/Array.cs | 3 +-- mcs/class/corlib/Test/System/ArrayTest.cs | 24 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) 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]; -- 2.25.1