@@ -307,6 +307,39 @@ def test_datetime64_factorize(self, writable):
307
307
tm .assert_numpy_array_equal (codes , expected_codes )
308
308
tm .assert_numpy_array_equal (uniques , expected_uniques )
309
309
310
+ @pytest .mark .parametrize ("sort" , [True , False ])
311
+ def test_factorize_rangeindex (self , sort ):
312
+ # increasing -> sort doesn't matter
313
+ ri = pd .RangeIndex .from_range (range (10 ))
314
+ expected = np .arange (10 , dtype = np .intp ), ri
315
+
316
+ result = algos .factorize (ri , sort = sort )
317
+ tm .assert_numpy_array_equal (result [0 ], expected [0 ])
318
+ tm .assert_index_equal (result [1 ], expected [1 ], exact = True )
319
+
320
+ result = ri .factorize (sort = sort )
321
+ tm .assert_numpy_array_equal (result [0 ], expected [0 ])
322
+ tm .assert_index_equal (result [1 ], expected [1 ], exact = True )
323
+
324
+ @pytest .mark .parametrize ("sort" , [True , False ])
325
+ def test_factorize_rangeindex_decreasing (self , sort ):
326
+ # decreasing -> sort matters
327
+ ri = pd .RangeIndex .from_range (range (10 ))
328
+ expected = np .arange (10 , dtype = np .intp ), ri
329
+
330
+ ri2 = ri [::- 1 ]
331
+ expected = expected [0 ], ri2
332
+ if sort :
333
+ expected = expected [0 ][::- 1 ], expected [1 ][::- 1 ]
334
+
335
+ result = algos .factorize (ri2 , sort = sort )
336
+ tm .assert_numpy_array_equal (result [0 ], expected [0 ])
337
+ tm .assert_index_equal (result [1 ], expected [1 ], exact = True )
338
+
339
+ result = ri2 .factorize (sort = sort )
340
+ tm .assert_numpy_array_equal (result [0 ], expected [0 ])
341
+ tm .assert_index_equal (result [1 ], expected [1 ], exact = True )
342
+
310
343
def test_deprecate_order (self ):
311
344
# gh 19727 - check warning is raised for deprecated keyword, order.
312
345
# Test not valid once order keyword is removed.
0 commit comments