@@ -326,6 +326,55 @@ public static void OrderByDescending_NotPipelined_CustomComparator_Longrunning(L
326
326
OrderByDescending_NotPipelined_CustomComparer ( labeled , count ) ;
327
327
}
328
328
329
+ [ Theory ]
330
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( Sources ) ) ]
331
+ [ MemberData ( "OrderByRandomData" , ( object ) ( new [ ] { 0 , 1 , 2 , 16 } ) ) ]
332
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( UnorderedSources ) ) ]
333
+ // Regression test for the PLINQ version of #2239 - comparer returning max/min value.
334
+ public static void OrderBy_ExtremeComparer ( Labeled < ParallelQuery < int > > labeled , int count )
335
+ {
336
+ int prev = int . MinValue ;
337
+ foreach ( int i in labeled . Item . OrderBy ( x => x , new ExtremeComparer < int > ( ) ) )
338
+ {
339
+ Assert . InRange ( i , prev , int . MaxValue ) ;
340
+ prev = i ;
341
+ }
342
+ }
343
+
344
+ [ Theory ]
345
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( Sources ) ) ]
346
+ [ MemberData ( "OrderByRandomData" , ( object ) ( new [ ] { 0 , 1 , 2 , 16 } ) ) ]
347
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( UnorderedSources ) ) ]
348
+ // Regression test for the PLINQ version of #2239 - comparer returning max/min value.
349
+ public static void OrderByDescending_ExtremeComparer ( Labeled < ParallelQuery < int > > labeled , int count )
350
+ {
351
+ int prev = int . MaxValue ;
352
+ foreach ( int i in labeled . Item . OrderByDescending ( x => x , new ExtremeComparer < int > ( ) ) )
353
+ {
354
+ Assert . InRange ( i , int . MinValue , prev ) ;
355
+ prev = i ;
356
+ }
357
+ }
358
+
359
+ [ Theory ]
360
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( Sources ) ) ]
361
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( UnorderedSources ) ) ]
362
+ public static void OrderBy_NotPipelined_ExtremeComparer ( Labeled < ParallelQuery < int > > labeled , int count )
363
+ {
364
+ int prev = int . MinValue ;
365
+ Assert . All ( labeled . Item . OrderBy ( x => x , new ExtremeComparer < int > ( ) ) . ToList ( ) , x => { Assert . InRange ( x , prev , int . MaxValue ) ; prev = x ; } ) ;
366
+ }
367
+
368
+ [ Theory ]
369
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( Sources ) ) ]
370
+ [ MemberData ( "OrderByRandomData" , ( object ) ( new [ ] { 0 , 1 , 2 , 16 } ) ) ]
371
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( UnorderedSources ) ) ]
372
+ public static void OrderByDescending_NotPipelined_ExtremeComparer ( Labeled < ParallelQuery < int > > labeled , int count )
373
+ {
374
+ int prev = int . MaxValue ;
375
+ Assert . All ( labeled . Item . OrderByDescending ( x => x , new ExtremeComparer < int > ( ) ) . ToList ( ) , x => { Assert . InRange ( x , int . MinValue , prev ) ; prev = x ; } ) ;
376
+ }
377
+
329
378
[ Fact ]
330
379
public static void OrderBy_ArgumentNullException ( )
331
380
{
@@ -753,6 +802,55 @@ public static void ThenByDescending_NotPipelined_CustomComparator_Longrunning(La
753
802
ThenByDescending_NotPipelined_CustomComparer ( labeled , count ) ;
754
803
}
755
804
805
+ [ Theory ]
806
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( Sources ) ) ]
807
+ [ MemberData ( "OrderByRandomData" , ( object ) ( new [ ] { 0 , 1 , 2 , 16 } ) ) ]
808
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( UnorderedSources ) ) ]
809
+ // Regression test for the PLINQ version of #2239 - comparer returning max/min value.
810
+ public static void ThenBy_ExtremeComparer ( Labeled < ParallelQuery < int > > labeled , int count )
811
+ {
812
+ int prev = int . MinValue ;
813
+ foreach ( int i in labeled . Item . OrderBy ( x => 0 ) . ThenBy ( x => x , new ExtremeComparer < int > ( ) ) )
814
+ {
815
+ Assert . InRange ( i , prev , int . MaxValue ) ;
816
+ prev = i ;
817
+ }
818
+ }
819
+
820
+ [ Theory ]
821
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( Sources ) ) ]
822
+ [ MemberData ( "OrderByRandomData" , ( object ) ( new [ ] { 0 , 1 , 2 , 16 } ) ) ]
823
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( UnorderedSources ) ) ]
824
+ // Regression test for the PLINQ version of #2239 - comparer returning max/min value.
825
+ public static void ThenByDescending_ExtremeComparer ( Labeled < ParallelQuery < int > > labeled , int count )
826
+ {
827
+ int prev = int . MaxValue ;
828
+ foreach ( int i in labeled . Item . OrderBy ( x => 0 ) . ThenByDescending ( x => x , new ExtremeComparer < int > ( ) ) )
829
+ {
830
+ Assert . InRange ( i , int . MinValue , prev ) ;
831
+ prev = i ;
832
+ }
833
+ }
834
+
835
+ [ Theory ]
836
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( Sources ) ) ]
837
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( UnorderedSources ) ) ]
838
+ public static void ThenBy_NotPipelined_ExtremeComparer ( Labeled < ParallelQuery < int > > labeled , int count )
839
+ {
840
+ int prev = int . MinValue ;
841
+ Assert . All ( labeled . Item . OrderBy ( x => 0 ) . ThenBy ( x => x , new ExtremeComparer < int > ( ) ) . ToList ( ) , x => { Assert . InRange ( x , prev , int . MaxValue ) ; prev = x ; } ) ;
842
+ }
843
+
844
+ [ Theory ]
845
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( Sources ) ) ]
846
+ [ MemberData ( "OrderByRandomData" , ( object ) ( new [ ] { 0 , 1 , 2 , 16 } ) ) ]
847
+ [ MemberData ( "Ranges" , ( object ) ( new int [ ] { 0 , 1 , 2 , 16 } ) , MemberType = typeof ( UnorderedSources ) ) ]
848
+ public static void ThenByDescending_NotPipelined_ExtremeComparer ( Labeled < ParallelQuery < int > > labeled , int count )
849
+ {
850
+ int prev = int . MaxValue ;
851
+ Assert . All ( labeled . Item . OrderBy ( x => 0 ) . ThenByDescending ( x => x , new ExtremeComparer < int > ( ) ) . ToList ( ) , x => { Assert . InRange ( x , int . MinValue , prev ) ; prev = x ; } ) ;
852
+ }
853
+
756
854
// Recursive sort with nested ThenBy...s
757
855
// Due to the use of randomized input, cycles will not start with a known input (and may skip values, etc).
758
856
0 commit comments