11using System . Runtime . CompilerServices ;
2+ using System . Diagnostics . CodeAnalysis ;
23using RustyOptions . Async ;
34using static RustyOptions . Option ;
45
@@ -68,6 +69,7 @@ public async Task CanGetFirstOrNoneWithCancelAsync()
6869
6970 [ Theory ]
7071 [ MemberData ( nameof ( GetMapAsyncValues ) ) ]
72+ [ SuppressMessage ( "Usage" , "xUnit1031:Do not use blocking task operations in test method" , Justification = "Will not block" ) ]
7173 public async Task CanMapAsync ( object source , object mapper , Option < long > expected )
7274 {
7375 switch ( ( source , mapper ) )
@@ -80,21 +82,27 @@ public async Task CanMapAsync(object source, object mapper, Option<long> expecte
8082 break ;
8183 case ( ValueTask < Option < int > > src , Func < int , long > mpr ) :
8284 Assert . Equal ( expected , await src . MapAsync ( mpr ) ) ;
85+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . MapAsync ( mpr ) ) ;
8386 break ;
8487 case ( Task < Option < int > > src , Func < int , long > mpr ) :
8588 Assert . Equal ( expected , await src . MapAsync ( mpr ) ) ;
89+ Assert . Equal ( expected , await GetTask ( src . Result ) . MapAsync ( mpr ) ) ;
8690 break ;
8791 case ( ValueTask < Option < int > > src , Func < int , ValueTask < long > > mpr ) :
8892 Assert . Equal ( expected , await src . MapAsync ( mpr ) ) ;
93+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . MapAsync ( mpr ) ) ;
8994 break ;
9095 case ( Task < Option < int > > src , Func < int , ValueTask < long > > mpr ) :
9196 Assert . Equal ( expected , await src . MapAsync ( mpr ) ) ;
97+ Assert . Equal ( expected , await GetTask ( src . Result ) . MapAsync ( mpr ) ) ;
9298 break ;
9399 case ( ValueTask < Option < int > > src , Func < int , Task < long > > mpr ) :
94100 Assert . Equal ( expected , await src . MapAsync ( mpr ) ) ;
101+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . MapAsync ( mpr ) ) ;
95102 break ;
96103 case ( Task < Option < int > > src , Func < int , Task < long > > mpr ) :
97104 Assert . Equal ( expected , await src . MapAsync ( mpr ) ) ;
105+ Assert . Equal ( expected , await GetTask ( src . Result ) . MapAsync ( mpr ) ) ;
98106 break ;
99107
100108 default :
@@ -139,6 +147,7 @@ public static IEnumerable<object[]> GetMapAsyncValues()
139147
140148 [ Theory ]
141149 [ MemberData ( nameof ( GetMapOrElseAsyncValues ) ) ]
150+ [ SuppressMessage ( "Usage" , "xUnit1031:Do not use blocking task operations in test method" , Justification = "Will not block" ) ]
142151 public async Task CanMapOrElseAsync ( object source , object mapper , object defaultFactory , long expected )
143152 {
144153 switch ( ( source , mapper , defaultFactory ) )
@@ -151,21 +160,27 @@ public async Task CanMapOrElseAsync(object source, object mapper, object default
151160 break ;
152161 case ( ValueTask < Option < int > > src , Func < int , long > mpr , Func < long > dff ) :
153162 Assert . Equal ( expected , await src . MapOrElseAsync ( mpr , dff ) ) ;
163+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . MapOrElseAsync ( mpr , dff ) ) ;
154164 break ;
155165 case ( Task < Option < int > > src , Func < int , long > mpr , Func < long > dff ) :
156166 Assert . Equal ( expected , await src . MapOrElseAsync ( mpr , dff ) ) ;
167+ Assert . Equal ( expected , await GetTask ( src . Result ) . MapOrElseAsync ( mpr , dff ) ) ;
157168 break ;
158169 case ( ValueTask < Option < int > > src , Func < int , ValueTask < long > > mpr , Func < ValueTask < long > > dff ) :
159170 Assert . Equal ( expected , await src . MapOrElseAsync ( mpr , dff ) ) ;
171+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . MapOrElseAsync ( mpr , dff ) ) ;
160172 break ;
161173 case ( Task < Option < int > > src , Func < int , ValueTask < long > > mpr , Func < ValueTask < long > > dff ) :
162174 Assert . Equal ( expected , await src . MapOrElseAsync ( mpr , dff ) ) ;
175+ Assert . Equal ( expected , await GetTask ( src . Result ) . MapOrElseAsync ( mpr , dff ) ) ;
163176 break ;
164177 case ( ValueTask < Option < int > > src , Func < int , Task < long > > mpr , Func < Task < long > > dff ) :
165178 Assert . Equal ( expected , await src . MapOrElseAsync ( mpr , dff ) ) ;
179+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . MapOrElseAsync ( mpr , dff ) ) ;
166180 break ;
167181 case ( Task < Option < int > > src , Func < int , Task < long > > mpr , Func < Task < long > > dff ) :
168182 Assert . Equal ( expected , await src . MapOrElseAsync ( mpr , dff ) ) ;
183+ Assert . Equal ( expected , await GetTask ( src . Result ) . MapOrElseAsync ( mpr , dff ) ) ;
169184 break ;
170185
171186 default :
@@ -215,6 +230,7 @@ public static IEnumerable<object[]> GetMapOrElseAsyncValues()
215230
216231 [ Theory ]
217232 [ MemberData ( nameof ( GetAndThenAsyncValues ) ) ]
233+ [ SuppressMessage ( "Usage" , "xUnit1031:Do not use blocking task operations in test method" , Justification = "Will not block" ) ]
218234 public async Task CanAndThenAsync ( object source , object mapper , Option < long > expected )
219235 {
220236 switch ( ( source , mapper ) )
@@ -227,21 +243,27 @@ public async Task CanAndThenAsync(object source, object mapper, Option<long> exp
227243 break ;
228244 case ( ValueTask < Option < int > > src , Func < int , Option < long > > mpr ) :
229245 Assert . Equal ( expected , await src . AndThenAsync ( mpr ) ) ;
246+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . AndThenAsync ( mpr ) ) ;
230247 break ;
231248 case ( Task < Option < int > > src , Func < int , Option < long > > mpr ) :
232249 Assert . Equal ( expected , await src . AndThenAsync ( mpr ) ) ;
250+ Assert . Equal ( expected , await GetTask ( src . Result ) . AndThenAsync ( mpr ) ) ;
233251 break ;
234252 case ( ValueTask < Option < int > > src , Func < int , ValueTask < Option < long > > > mpr ) :
235253 Assert . Equal ( expected , await src . AndThenAsync ( mpr ) ) ;
254+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . AndThenAsync ( mpr ) ) ;
236255 break ;
237256 case ( Task < Option < int > > src , Func < int , ValueTask < Option < long > > > mpr ) :
238257 Assert . Equal ( expected , await src . AndThenAsync ( mpr ) ) ;
258+ Assert . Equal ( expected , await GetTask ( src . Result ) . AndThenAsync ( mpr ) ) ;
239259 break ;
240260 case ( ValueTask < Option < int > > src , Func < int , Task < Option < long > > > mpr ) :
241261 Assert . Equal ( expected , await src . AndThenAsync ( mpr ) ) ;
262+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . AndThenAsync ( mpr ) ) ;
242263 break ;
243264 case ( Task < Option < int > > src , Func < int , Task < Option < long > > > mpr ) :
244265 Assert . Equal ( expected , await src . AndThenAsync ( mpr ) ) ;
266+ Assert . Equal ( expected , await GetTask ( src . Result ) . AndThenAsync ( mpr ) ) ;
245267 break ;
246268
247269 default :
@@ -286,6 +308,7 @@ public static IEnumerable<object[]> GetAndThenAsyncValues()
286308
287309 [ Theory ]
288310 [ MemberData ( nameof ( GetOrElseAsyncValues ) ) ]
311+ [ SuppressMessage ( "Usage" , "xUnit1031:Do not use blocking task operations in test method" , Justification = "Will not block" ) ]
289312 public async Task CanOrElseAsync ( object source , object mapper , Option < int > expected )
290313 {
291314 switch ( ( source , mapper ) )
@@ -298,21 +321,27 @@ public async Task CanOrElseAsync(object source, object mapper, Option<int> expec
298321 break ;
299322 case ( ValueTask < Option < int > > src , Func < Option < int > > mpr ) :
300323 Assert . Equal ( expected , await src . OrElseAsync ( mpr ) ) ;
324+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . OrElseAsync ( mpr ) ) ;
301325 break ;
302326 case ( Task < Option < int > > src , Func < Option < int > > mpr ) :
303327 Assert . Equal ( expected , await src . OrElseAsync ( mpr ) ) ;
328+ Assert . Equal ( expected , await GetTask ( src . Result ) . OrElseAsync ( mpr ) ) ;
304329 break ;
305330 case ( ValueTask < Option < int > > src , Func < ValueTask < Option < int > > > mpr ) :
306331 Assert . Equal ( expected , await src . OrElseAsync ( mpr ) ) ;
332+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . OrElseAsync ( mpr ) ) ;
307333 break ;
308334 case ( Task < Option < int > > src , Func < ValueTask < Option < int > > > mpr ) :
309335 Assert . Equal ( expected , await src . OrElseAsync ( mpr ) ) ;
336+ Assert . Equal ( expected , await GetTask ( src . Result ) . OrElseAsync ( mpr ) ) ;
310337 break ;
311338 case ( ValueTask < Option < int > > src , Func < Task < Option < int > > > mpr ) :
312339 Assert . Equal ( expected , await src . OrElseAsync ( mpr ) ) ;
340+ Assert . Equal ( expected , await GetValueTask ( src . Result ) . OrElseAsync ( mpr ) ) ;
313341 break ;
314342 case ( Task < Option < int > > src , Func < Task < Option < int > > > mpr ) :
315343 Assert . Equal ( expected , await src . OrElseAsync ( mpr ) ) ;
344+ Assert . Equal ( expected , await GetTask ( src . Result ) . OrElseAsync ( mpr ) ) ;
316345 break ;
317346
318347 default :
@@ -382,4 +411,16 @@ private static async IAsyncEnumerable<Option<int>> EnumerateFilteredAsync(int ex
382411 yield return predicate ( i ) ? Some ( i ) : None < int > ( ) ;
383412 }
384413 }
414+
415+ private static async Task < T > GetTask < T > ( T value )
416+ {
417+ await Task . Delay ( 1 ) ;
418+ return value ;
419+ }
420+
421+ private static async ValueTask < T > GetValueTask < T > ( T value )
422+ {
423+ await Task . Delay ( 1 ) ;
424+ return value ;
425+ }
385426}
0 commit comments