11// Licensed to the .NET Foundation under one or more agreements.
22// The .NET Foundation licenses this file to you under the MIT license.
33
4+ using System . Collections . Generic ;
45using Xunit ;
56
67namespace System . SpanTests
@@ -27,13 +28,13 @@ public static void TestContains()
2728 {
2829 a [ i ] = 10 * ( i + 1 ) ;
2930 }
30- ReadOnlySpan < int > span = new ReadOnlySpan < int > ( a ) ;
3131
3232 for ( int targetIndex = 0 ; targetIndex < length ; targetIndex ++ )
3333 {
3434 int target = a [ targetIndex ] ;
35- bool found = span . Contains ( target ) ;
36- Assert . True ( found ) ;
35+ Assert . True ( new ReadOnlySpan < int > ( a ) . Contains ( target ) ) ;
36+ Assert . All ( GetDefaultEqualityComparers < int > ( ) , comparer => Assert . True ( new ReadOnlySpan < int > ( a ) . Contains ( target , comparer ) ) ) ;
37+ Assert . False ( new ReadOnlySpan < int > ( a ) . Contains ( target , GetFalseEqualityComparer < int > ( ) ) ) ;
3738 }
3839 }
3940 }
@@ -52,9 +53,9 @@ public static void TestMultipleContains()
5253 a [ length - 1 ] = 5555 ;
5354 a [ length - 2 ] = 5555 ;
5455
55- ReadOnlySpan < int > span = new ReadOnlySpan < int > ( a ) ;
56- bool found = span . Contains ( 5555 ) ;
57- Assert . True ( found ) ;
56+ Assert . True ( new ReadOnlySpan < int > ( a ) . Contains ( 5555 ) ) ;
57+ Assert . All ( GetDefaultEqualityComparers < int > ( ) , comparer => Assert . True ( new ReadOnlySpan < int > ( a ) . Contains ( 5555 , comparer ) ) ) ;
58+ Assert . False ( new ReadOnlySpan < int > ( a ) . Contains ( 5555 , GetFalseEqualityComparer < int > ( ) ) ) ;
5859 }
5960 }
6061
@@ -71,8 +72,7 @@ public static void OnNoMatchForContainsMakeSureEveryElementIsCompared()
7172 a [ i ] = new TInt ( 10 * ( i + 1 ) , log ) ;
7273 }
7374 ReadOnlySpan < TInt > span = new ReadOnlySpan < TInt > ( a ) ;
74- bool found = span . Contains ( new TInt ( 9999 , log ) ) ;
75- Assert . False ( found ) ;
75+ Assert . False ( span . Contains ( new TInt ( 9999 , log ) ) ) ;
7676
7777 // Since we asked for a non-existent value, make sure each element of the array was compared once.
7878 // (Strictly speaking, it would not be illegal for IndexOf to compare an element more than once but
@@ -112,17 +112,19 @@ void checkForOutOfRangeAccess(int x, int y)
112112 }
113113
114114 ReadOnlySpan < TInt > span = new ReadOnlySpan < TInt > ( a , GuardLength , length ) ;
115- bool found = span . Contains ( new TInt ( 9999 , checkForOutOfRangeAccess ) ) ;
116- Assert . False ( found ) ;
115+ Assert . False ( span . Contains ( new TInt ( 9999 , checkForOutOfRangeAccess ) ) ) ;
117116 }
118117 }
119118
120119 [ Fact ]
121120 public static void ZeroLengthContains_String ( )
122121 {
123122 ReadOnlySpan < string > span = new ReadOnlySpan < string > ( Array . Empty < string > ( ) ) ;
124- bool found = span . Contains ( "a" ) ;
125- Assert . False ( found ) ;
123+ Assert . False ( span . Contains ( "a" ) ) ;
124+ Assert . All ( GetDefaultEqualityComparers < string > ( ) , comparer => Assert . False ( new ReadOnlySpan < string > ( Array . Empty < string > ( ) ) . Contains ( "a" , comparer ) ) ) ;
125+ Assert . False ( span . Contains ( "a" , null ) ) ;
126+ Assert . False ( span . Contains ( "a" , EqualityComparer < string > . Default ) ) ;
127+ Assert . False ( span . Contains ( "a" , EqualityComparer < string > . Create ( ( i , j ) => i == j ) ) ) ;
126128 }
127129
128130 [ Fact ]
@@ -140,8 +142,9 @@ public static void TestMatchContains_String()
140142 for ( int targetIndex = 0 ; targetIndex < length ; targetIndex ++ )
141143 {
142144 string target = a [ targetIndex ] ;
143- bool found = span . Contains ( target ) ;
144- Assert . True ( found ) ;
145+ Assert . True ( span . Contains ( target ) ) ;
146+ Assert . All ( GetDefaultEqualityComparers < string > ( ) , comparer => Assert . True ( new ReadOnlySpan < string > ( a ) . Contains ( target , comparer ) ) ) ;
147+ Assert . False ( span . Contains ( target , GetFalseEqualityComparer < string > ( ) ) ) ;
145148 }
146149 }
147150 }
@@ -161,8 +164,7 @@ public static void TestNoMatchContains_String()
161164 }
162165 ReadOnlySpan < string > span = new ReadOnlySpan < string > ( a ) ;
163166
164- bool found = span . Contains ( target ) ;
165- Assert . False ( found ) ;
167+ Assert . False ( span . Contains ( target ) ) ;
166168 }
167169 }
168170
@@ -181,8 +183,7 @@ public static void TestMultipleMatchContains_String()
181183 a [ length - 2 ] = "5555" ;
182184
183185 ReadOnlySpan < string > span = new ReadOnlySpan < string > ( a ) ;
184- bool found = span . Contains ( "5555" ) ;
185- Assert . True ( found ) ;
186+ Assert . True ( span . Contains ( "5555" ) ) ;
186187 }
187188 }
188189
@@ -192,6 +193,7 @@ public static void ContainsNull_String(string[] spanInput, bool expected)
192193 {
193194 ReadOnlySpan < string > theStrings = spanInput ;
194195 Assert . Equal ( expected , theStrings . Contains ( null ) ) ;
196+ Assert . All ( GetDefaultEqualityComparers < string > ( ) , comparer => Assert . Equal ( expected , new ReadOnlySpan < string > ( spanInput ) . Contains ( null , comparer ) ) ) ;
195197 }
196198 }
197199}
0 commit comments