public static void RunPartitionerStaticTest_DisposeException() { var data = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var enumerable = new DisposeTrackingEnumerable <int>(data); var partitioner = Partitioner.Create(enumerable); var partition = partitioner.GetDynamicPartitions(); IDisposable d = partition as IDisposable; if (d == null) { Assert.False(true, "RunPartitionerStaticTest_DisposeException: failed casting to IDisposable"); } else { d.Dispose(); } try { var enum1 = partition.GetEnumerator(); Assert.False(true, "RunPartitionerStaticTest_DisposeException: failed. Expecting ObjectDisposedException to be thrown"); } catch (ObjectDisposedException) { } }
// In the official dev unit test run, this test should be commented out // - Each time we call GetDynamicPartitions method, we create an internal "reader enumerator" to read the // source data, and we need to make sure that whenever the object returned by GetDynmaicPartitions is disposed, // the "reader enumerator" is also disposed. private static bool RunPartitionerStaticTest_DisposeException() { TestHarness.TestLog("RunPartitionerStaticTest_DisposeException: test ObjectDisposedException"); var data = new List <int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var enumerable = new DisposeTrackingEnumerable <int>(data); var partitioner = Partitioner.Create(enumerable); var partition = partitioner.GetDynamicPartitions(); IDisposable d = partition as IDisposable; if (d == null) { TestHarness.TestLog("failed casting to IDisposable"); return(false); } else { d.Dispose(); } try { var enum1 = partition.GetEnumerator(); TestHarness.TestLog("failed. Expecting ObjectDisposedException to be thrown"); return(false); } catch (ObjectDisposedException) { } return(true); }
public static void TestDisposeException() { var data = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var enumerable = new DisposeTrackingEnumerable <int>(data); var partitioner = Partitioner.Create(enumerable); var partition = partitioner.GetDynamicPartitions(); IDisposable d = partition as IDisposable; Assert.NotNull(d); d.Dispose(); Assert.Throws <ObjectDisposedException>(() => { var enum1 = partition.GetEnumerator(); }); }
public void UnionFollowedBySelectOnEmptyEnumerableInvokesDispose() { var enum1 = new DisposeTrackingEnumerable <int>(); var enum2 = new DisposeTrackingEnumerable <int>(); Assert.False(enum1.EnumeratorDisposed); Assert.False(enum2.EnumeratorDisposed); foreach (int value in enum1.Union(enum2)) { } Assert.True(enum1.EnumeratorDisposed); Assert.True(enum2.EnumeratorDisposed); }
private static bool RunPartitionerStaticTest_Dispose() { TestHarness.TestLog("RunPartitionerStaticTest_Dispose()"); bool passed = true; IList <int> data = new List <int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; Console.WriteLine("foreach"); DisposeTrackingEnumerable <int> source = new DisposeTrackingEnumerable <int>(data); foreach (int x in source) { } Console.WriteLine("P.ForEach: "); source = new DisposeTrackingEnumerable <int>(data); Parallel.ForEach(source, _ => { }); passed &= source.AreEnumeratorsDisposed(); Console.WriteLine("PLINQ.ForAll: "); source = new DisposeTrackingEnumerable <int>(data); ParallelEnumerable.ForAll(source.AsParallel(), _ => { }); passed &= source.AreEnumeratorsDisposed(); Console.WriteLine("Partitioner (GetPartitions-raw): "); source = new DisposeTrackingEnumerable <int>(data); Partitioner.Create(source).GetPartitions(1)[0].Dispose(); passed &= source.AreEnumeratorsDisposed(); Console.WriteLine("Partitioner (GetOrderablePartitions-raw): "); source = new DisposeTrackingEnumerable <int>(data); Partitioner.Create(source).GetOrderablePartitions(1)[0].Dispose(); passed &= source.AreEnumeratorsDisposed(); Console.WriteLine("Partitioner (GetDynamicPartitions-raw): "); source = new DisposeTrackingEnumerable <int>(data); ((IDisposable)Partitioner.Create(source).GetDynamicPartitions()).Dispose(); passed &= source.AreEnumeratorsDisposed(); Console.WriteLine("Partitioner (GetOrderableDynamicPartitions-raw): "); source = new DisposeTrackingEnumerable <int>(data); ((IDisposable)Partitioner.Create(source).GetOrderableDynamicPartitions()).Dispose(); passed &= source.AreEnumeratorsDisposed(); Console.WriteLine("Partitioner (TPL): "); source = new DisposeTrackingEnumerable <int>(data); Parallel.ForEach(Partitioner.Create(source), _ => { }); passed &= source.AreEnumeratorsDisposed(); Console.WriteLine("Partitioner (PLINQ): "); var partitions = Partitioner.Create(source); partitions.AsParallel().ForAll((x) => { }); passed &= source.AreEnumeratorsDisposed(); if (!passed) { TestHarness.TestLog("failed, underlying enumerator not disposed"); } return(passed); }
public Enumerator(DisposeTrackingEnumerable <T> enumerable) => _enumerable = enumerable;