示例#1
0
        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)
            { }
        }
示例#2
0
        // 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(); });
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
 public Enumerator(DisposeTrackingEnumerable <T> enumerable) => _enumerable = enumerable;