diff options
author | Raja R Harinath <harinath@hurrynot.org> | 2009-07-30 23:42:04 +0400 |
---|---|---|
committer | Raja R Harinath <harinath@hurrynot.org> | 2009-07-30 23:42:04 +0400 |
commit | 876b8f2fb6e8fc8c8eafa88bc82cf4ded5bfa741 (patch) | |
tree | 7785eda3fabe9789a5e8880ffaf1eba152acc4de /mcs/class/System/Test | |
parent | 6d523ef3e4f6f195ed286cb186d7844e3b439bbb (diff) |
Fix Enumerator.Current handling in SortedDictionary<,>
* System.Collections.Generic/RBTree.cs (NodeEnumerator.check_current):
New helper.
(NodeEnumerator.Current): Don't check invariants.
* SortedDictionary.cs (Enumerator.Current): Likewise.
(ValueCollection.Enumerator.Current): Likewise.
(KeyCollection.Enumerator.Current): Likewise.
* Test/System.Collections.Generic/SortedDictionaryTest.cs
(Enumerator_Current, KeyEnumerator_Current, ValueEnumerator_Current): New tests.
svn path=/trunk/mcs/; revision=139115
Diffstat (limited to 'mcs/class/System/Test')
-rw-r--r-- | mcs/class/System/Test/System.Collections.Generic/ChangeLog | 5 | ||||
-rw-r--r-- | mcs/class/System/Test/System.Collections.Generic/SortedDictionaryTest.cs | 102 |
2 files changed, 107 insertions, 0 deletions
diff --git a/mcs/class/System/Test/System.Collections.Generic/ChangeLog b/mcs/class/System/Test/System.Collections.Generic/ChangeLog index 9901e47c71b..35dea1ecd55 100644 --- a/mcs/class/System/Test/System.Collections.Generic/ChangeLog +++ b/mcs/class/System/Test/System.Collections.Generic/ChangeLog @@ -1,3 +1,8 @@ +2009-07-31 Raja R Harinath <harinath@hurrynot.org> + + * SortedDictionaryTest.cs (Enumerator_Current): New test. + (KeyEnumerator_Current, ValueEnumerator_Current): Likewise. + 2009-07-14 Gonzalo Paniagua Javier <gonzalo@novell.com> * SortedListTest.cs: new tests for bug #521750 provided by diff --git a/mcs/class/System/Test/System.Collections.Generic/SortedDictionaryTest.cs b/mcs/class/System/Test/System.Collections.Generic/SortedDictionaryTest.cs index af38b8dc7f8..f293f329a20 100644 --- a/mcs/class/System/Test/System.Collections.Generic/SortedDictionaryTest.cs +++ b/mcs/class/System/Test/System.Collections.Generic/SortedDictionaryTest.cs @@ -463,6 +463,108 @@ namespace MonoTests.System.Collections.Generic d.Add (4, "D"); e.MoveNext (); } + + + delegate void D (); + bool Throws (D d) + { + try { + d (); + return false; + } catch { + return true; + } + } + + [Test] + // based on #491858, #517415 + public void Enumerator_Current () + { + var e1 = new SortedDictionary<int,int>.Enumerator (); + Assert.IsFalse (Throws (delegate { var x = e1.Current; })); + + var d = new SortedDictionary<int,int> (); + var e2 = d.GetEnumerator (); + Assert.IsFalse (Throws (delegate { var x = e2.Current; })); + e2.MoveNext (); + Assert.IsFalse (Throws (delegate { var x = e2.Current; })); + e2.Dispose (); + Assert.IsFalse (Throws (delegate { var x = e2.Current; })); + + var e3 = ((IEnumerable<KeyValuePair<int,int>>) d).GetEnumerator (); + Assert.IsFalse (Throws (delegate { var x = e3.Current; })); + e3.MoveNext (); + Assert.IsFalse (Throws (delegate { var x = e3.Current; })); + e3.Dispose (); + Assert.IsFalse (Throws (delegate { var x = e3.Current; })); + + var e4 = ((IEnumerable) d).GetEnumerator (); + Assert.IsTrue (Throws (delegate { var x = e4.Current; })); + e4.MoveNext (); + Assert.IsTrue (Throws (delegate { var x = e4.Current; })); + ((IDisposable) e4).Dispose (); + Assert.IsTrue (Throws (delegate { var x = e4.Current; })); + } + + [Test] + // based on #491858, #517415 + public void KeyEnumerator_Current () + { + var e1 = new SortedDictionary<int,int>.KeyCollection.Enumerator (); + Assert.IsFalse (Throws (delegate { var x = e1.Current; })); + + var d = new SortedDictionary<int,int> ().Keys; + var e2 = d.GetEnumerator (); + Assert.IsFalse (Throws (delegate { var x = e2.Current; })); + e2.MoveNext (); + Assert.IsFalse (Throws (delegate { var x = e2.Current; })); + e2.Dispose (); + Assert.IsFalse (Throws (delegate { var x = e2.Current; })); + + var e3 = ((IEnumerable<int>) d).GetEnumerator (); + Assert.IsFalse (Throws (delegate { var x = e3.Current; })); + e3.MoveNext (); + Assert.IsFalse (Throws (delegate { var x = e3.Current; })); + e3.Dispose (); + Assert.IsFalse (Throws (delegate { var x = e3.Current; })); + + var e4 = ((IEnumerable) d).GetEnumerator (); + Assert.IsTrue (Throws (delegate { var x = e4.Current; })); + e4.MoveNext (); + Assert.IsTrue (Throws (delegate { var x = e4.Current; })); + ((IDisposable) e4).Dispose (); + Assert.IsTrue (Throws (delegate { var x = e4.Current; })); + } + + [Test] + // based on #491858, #517415 + public void ValueEnumerator_Current () + { + var e1 = new SortedDictionary<int,int>.ValueCollection.Enumerator (); + Assert.IsFalse (Throws (delegate { var x = e1.Current; })); + + var d = new SortedDictionary<int,int> ().Values; + var e2 = d.GetEnumerator (); + Assert.IsFalse (Throws (delegate { var x = e2.Current; })); + e2.MoveNext (); + Assert.IsFalse (Throws (delegate { var x = e2.Current; })); + e2.Dispose (); + Assert.IsFalse (Throws (delegate { var x = e2.Current; })); + + var e3 = ((IEnumerable<int>) d).GetEnumerator (); + Assert.IsFalse (Throws (delegate { var x = e3.Current; })); + e3.MoveNext (); + Assert.IsFalse (Throws (delegate { var x = e3.Current; })); + e3.Dispose (); + Assert.IsFalse (Throws (delegate { var x = e3.Current; })); + + var e4 = ((IEnumerable) d).GetEnumerator (); + Assert.IsTrue (Throws (delegate { var x = e4.Current; })); + e4.MoveNext (); + Assert.IsTrue (Throws (delegate { var x = e4.Current; })); + ((IDisposable) e4).Dispose (); + Assert.IsTrue (Throws (delegate { var x = e4.Current; })); + } } class ReverseComparer<T> : IComparer<T> |