@@ -414,7 +414,6 @@ def test_exclusivity_with_key(self):
414414 [].sort (key = 1 , keylist = 1 )
415415
416416 def test_argtype (self ):
417- msg = 'Only one of key and keylist can be provided.'
418417 for arg in [1 , (), iter (())]:
419418 msg = f"'{ type (arg ).__name__ } ' object is not a list"
420419 with self .assertRaisesRegex (TypeError , msg ):
@@ -426,31 +425,51 @@ def test_unequal_sizes(self):
426425 with self .assertRaisesRegex (ValueError , msg ):
427426 [1 , 2 , 3 ].sort (keylist = arg )
428427
429- def test_keylist_vs_key (self ):
430- data = list (range (10 ))
431- # NOTE: BORLAND32
432- keyfunc = lambda x : ((22695477 * x + 1 ) % 2 ** 32 ) % 10
433- keylist = list (map (keyfunc , data ))
434- res_keyfunc = sorted (data , key = keyfunc )
435- res_keylist = sorted (data , keylist = keylist )
436- self .assertEqual (res_keyfunc , res_keylist )
428+ def test_empty (self ):
429+ data = []
430+ keylist = []
431+ data .sort (keylist = keylist )
432+ self .assertEqual (data , [])
433+ self .assertEqual (keylist , [])
437434
438- def test_mutability_plus (self ):
439- for size in [10 , 100 , 1000 ]:
440- data = list (range (size ))
441- # NOTE: BORLAND32
442- keyfunc = lambda x : ((22695477 * x + 1 ) % 2 ** 32 ) % size
435+ def test_keylist_vs_key (self ):
436+ for reverse in [False , True ]:
437+ data = list (range (10 ))
438+ # NOTE: BORLAND32-RNG-LIKE
439+ keyfunc = lambda x : ((22695477 * x + 1 ) % 2 ** 32 ) % 10
443440 keylist = list (map (keyfunc , data ))
444- orig_keylist = list (keylist )
445-
446- expected_keylist = sorted (keylist )
447- result = sorted (data , keylist = keylist )
448- self .assertEqual (keylist , expected_keylist )
441+ res_keyfunc = sorted (data , key = keyfunc , reverse = reverse )
442+ res_keylist = sorted (data , keylist = keylist , reverse = reverse )
443+ self .assertEqual (res_keyfunc , res_keylist )
449444
450- # And for completeness check the result
451- idxs = sorted (range (len (keylist )), key = orig_keylist .__getitem__ )
452- expected_result = [data [i ] for i in idxs ]
453- self .assertEqual (result , expected_result )
445+ def test_mutability_plus (self ):
446+ for reverse in [False , True ]:
447+ for size in [10 , 100 , 1000 ]:
448+ data = list (range (size ))
449+ # NOTE: BORLAND32-RNG-LIKE
450+ keyfunc = lambda x : ((22695477 * x + 1 ) % 2 ** 32 ) % size
451+ keylist = list (map (keyfunc , data ))
452+ orig_keylist = list (keylist )
453+
454+ expected_keylist = sorted (keylist , reverse = reverse )
455+ result = sorted (data , keylist = keylist , reverse = reverse )
456+ self .assertEqual (keylist , expected_keylist )
457+
458+ # And for completeness check the result
459+ rge = range (len (keylist ))
460+ idxs = sorted (rge , key = orig_keylist .__getitem__ , reverse = reverse )
461+ expected_result = [data [i ] for i in idxs ]
462+ self .assertEqual (result , expected_result )
463+
464+ def test_mid_failure (self ):
465+ values = list (range (5 ))
466+ keylist = [2 , 1 , 3 , 0 , None ]
467+ with self .assertRaises (TypeError ):
468+ values .sort (keylist = keylist )
469+
470+ expected_values = sorted (range (4 ), keylist = [2 , 1 , 3 , 0 ])
471+ self .assertEqual (values , expected_values + [4 ])
472+ self .assertEqual (keylist , [0 , 1 , 2 , 3 , None ])
454473
455474
456475if __name__ == "__main__" :
0 commit comments