1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System.Collections.Generic; 6 using Xunit; 7 8 namespace System.Linq.Parallel.Tests 9 { 10 public static class ContainsTests 11 { OnlyOneData(int[] counts)12 public static IEnumerable<object[]> OnlyOneData(int[] counts) 13 { 14 foreach (int count in counts.DefaultIfEmpty(Sources.OuterLoopCount)) 15 { 16 foreach (int position in new[] { 0, count / 2, Math.Max(0, count - 1) }.Distinct()) 17 { 18 yield return new object[] { count, position }; 19 } 20 } 21 } 22 23 // 24 // Contains 25 // 26 [Theory] 27 [InlineData(0)] 28 [InlineData(1)] 29 [InlineData(2)] 30 [InlineData(16)] Contains_NoMatching(int count)31 public static void Contains_NoMatching(int count) 32 { 33 Assert.False(ParallelEnumerable.Range(0, count).Contains(count)); 34 Assert.False(ParallelEnumerable.Range(0, count).Contains(count, null)); 35 Assert.False(ParallelEnumerable.Range(0, count).Contains(count, DelegatingComparer.Create<int>((l, r) => false, i => 0))); 36 } 37 38 [Fact] 39 [OuterLoop] Contains_NoMatching_Longrunning()40 public static void Contains_NoMatching_Longrunning() 41 { 42 Contains_NoMatching(Sources.OuterLoopCount); 43 } 44 45 [Theory] 46 [InlineData(16)] Contains_MultipleMatching(int count)47 public static void Contains_MultipleMatching(int count) 48 { 49 Assert.True(ParallelEnumerable.Range(0, count).Contains(count, DelegatingComparer.Create<int>((l, r) => (l % 2) == (r % 2), i => i % 2))); 50 } 51 52 [Fact] 53 [OuterLoop] Contains_MultipleMatching_Longrunning()54 public static void Contains_MultipleMatching_Longrunning() 55 { 56 Contains_MultipleMatching(Sources.OuterLoopCount); 57 } 58 59 [Theory] 60 [MemberData(nameof(OnlyOneData), new[] { 2, 16 })] Contains_OneMatching(int count, int position)61 public static void Contains_OneMatching(int count, int position) 62 { 63 Assert.True(ParallelEnumerable.Range(0, count).Contains(position)); 64 Assert.True(ParallelEnumerable.Range(0, count).Contains(position, null)); 65 Assert.True(ParallelEnumerable.Range(0, count).Contains(position, DelegatingComparer.Create<int>((l, r) => l == position && r == position, i => i.GetHashCode()))); 66 } 67 68 [Theory] 69 [OuterLoop] 70 [MemberData(nameof(OnlyOneData), new int[] { /* Sources.OuterLoopCount */ })] Contains_OneMatching_Longrunning(int count, int position)71 public static void Contains_OneMatching_Longrunning(int count, int position) 72 { 73 Contains_OneMatching(count, position); 74 } 75 76 [Fact] Contains_OperationCanceledException()77 public static void Contains_OperationCanceledException() 78 { 79 AssertThrows.EventuallyCanceled((source, canceler) => source.Contains(-1, new CancelingEqualityComparer<int>(canceler))); 80 } 81 82 [Fact] Contains_AggregateException_Wraps_OperationCanceledException()83 public static void Contains_AggregateException_Wraps_OperationCanceledException() 84 { 85 AssertThrows.OtherTokenCanceled((source, canceler) => source.Contains(-1, new CancelingEqualityComparer<int>(canceler))); 86 AssertThrows.SameTokenNotCanceled((source, canceler) => source.Contains(-1, new CancelingEqualityComparer<int>(canceler))); 87 } 88 89 [Fact] Contains_OperationCanceledException_PreCanceled()90 public static void Contains_OperationCanceledException_PreCanceled() 91 { 92 AssertThrows.AlreadyCanceled(source => source.Contains(0)); 93 AssertThrows.AlreadyCanceled(source => source.Contains(0, EqualityComparer<int>.Default)); 94 } 95 96 [Fact] Contains_AggregateException()97 public static void Contains_AggregateException() 98 { 99 AssertThrows.Wrapped<DeliberateTestException>(() => ParallelEnumerable.Range(0, 1).Contains(1, new FailingEqualityComparer<int>())); 100 } 101 102 [Fact] Contains_ArgumentNullException()103 public static void Contains_ArgumentNullException() 104 { 105 AssertExtensions.Throws<ArgumentNullException>("source", () => ((ParallelQuery<bool>)null).Contains(false)); 106 AssertExtensions.Throws<ArgumentNullException>("source", () => ((ParallelQuery<bool>)null).Contains(false, EqualityComparer<bool>.Default)); 107 } 108 } 109 } 110