From 876b8f2fb6e8fc8c8eafa88bc82cf4ded5bfa741 Mon Sep 17 00:00:00 2001 From: Raja R Harinath Date: Thu, 30 Jul 2009 19:42:04 +0000 Subject: 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 --- .../Test/System.Collections.Generic/ChangeLog | 5 + .../SortedDictionaryTest.cs | 102 +++++++++++++++++++++ 2 files changed, 107 insertions(+) (limited to 'mcs/class/System/Test') 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 + + * SortedDictionaryTest.cs (Enumerator_Current): New test. + (KeyEnumerator_Current, ValueEnumerator_Current): Likewise. + 2009-07-14 Gonzalo Paniagua Javier * 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.Enumerator (); + Assert.IsFalse (Throws (delegate { var x = e1.Current; })); + + var d = new SortedDictionary (); + 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>) 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.KeyCollection.Enumerator (); + Assert.IsFalse (Throws (delegate { var x = e1.Current; })); + + var d = new SortedDictionary ().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) 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.ValueCollection.Enumerator (); + Assert.IsFalse (Throws (delegate { var x = e1.Current; })); + + var d = new SortedDictionary ().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) 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 : IComparer -- cgit v1.2.3