@@ -586,36 +586,88 @@ def test_union_noncomparable(self):
586
586
def test_union (self ):
587
587
RI = RangeIndex
588
588
I64 = Int64Index
589
- cases = [(RI (0 , 10 , 1 ), RI (0 , 10 , 1 ), RI (0 , 10 , 1 )),
590
- (RI (0 , 10 , 1 ), RI (5 , 20 , 1 ), RI (0 , 20 , 1 )),
591
- (RI (0 , 10 , 1 ), RI (10 , 20 , 1 ), RI (0 , 20 , 1 )),
592
- (RI (0 , - 10 , - 1 ), RI (0 , - 10 , - 1 ), RI (0 , - 10 , - 1 )),
593
- (RI (0 , - 10 , - 1 ), RI (- 10 , - 20 , - 1 ), RI (- 19 , 1 , 1 )),
594
- (RI (0 , 10 , 2 ), RI (1 , 10 , 2 ), RI (0 , 10 , 1 )),
595
- (RI (0 , 11 , 2 ), RI (1 , 12 , 2 ), RI (0 , 12 , 1 )),
596
- (RI (0 , 21 , 4 ), RI (- 2 , 24 , 4 ), RI (- 2 , 24 , 2 )),
597
- (RI (0 , - 20 , - 2 ), RI (- 1 , - 21 , - 2 ), RI (- 19 , 1 , 1 )),
598
- (RI (0 , 100 , 5 ), RI (0 , 100 , 20 ), RI (0 , 100 , 5 )),
599
- (RI (0 , - 100 , - 5 ), RI (5 , - 100 , - 20 ), RI (- 95 , 10 , 5 )),
600
- (RI (0 , - 11 , - 1 ), RI (1 , - 12 , - 4 ), RI (- 11 , 2 , 1 )),
601
- (RI (0 ), RI (0 ), RI (0 )),
602
- (RI (0 , - 10 , - 2 ), RI (0 ), RI (0 , - 10 , - 2 )),
603
- (RI (0 , 100 , 2 ), RI (100 , 150 , 200 ), RI (0 , 102 , 2 )),
604
- (RI (0 , - 100 , - 2 ), RI (- 100 , 50 , 102 ), RI (- 100 , 4 , 2 )),
605
- (RI (0 , - 100 , - 1 ), RI (0 , - 50 , - 3 ), RI (- 99 , 1 , 1 )),
606
- (RI (0 , 1 , 1 ), RI (5 , 6 , 10 ), RI (0 , 6 , 5 )),
607
- (RI (0 , 10 , 5 ), RI (- 5 , - 6 , - 20 ), RI (- 5 , 10 , 5 )),
608
- (RI (0 , 3 , 1 ), RI (4 , 5 , 1 ), I64 ([0 , 1 , 2 , 4 ])),
609
- (RI (0 , 10 , 1 ), I64 ([]), RI (0 , 10 , 1 )),
610
- (RI (0 ), I64 ([1 , 5 , 6 ]), I64 ([1 , 5 , 6 ]))]
611
- for idx1 , idx2 , expected in cases :
589
+
590
+ inputs = [(RI (0 , 10 , 1 ), RI (0 , 10 , 1 )),
591
+ (RI (0 , 10 , 1 ), RI (5 , 20 , 1 )),
592
+ (RI (0 , 10 , 1 ), RI (10 , 20 , 1 )),
593
+ (RI (0 , - 10 , - 1 ), RI (0 , - 10 , - 1 )),
594
+ (RI (0 , - 10 , - 1 ), RI (- 10 , - 20 , - 1 )),
595
+ (RI (0 , 10 , 2 ), RI (1 , 10 , 2 )),
596
+ (RI (0 , 11 , 2 ), RI (1 , 12 , 2 )),
597
+ (RI (0 , 21 , 4 ), RI (- 2 , 24 , 4 )),
598
+ (RI (0 , - 20 , - 2 ), RI (- 1 , - 21 , - 2 )),
599
+ (RI (0 , 100 , 5 ), RI (0 , 100 , 20 )),
600
+ (RI (0 , - 100 , - 5 ), RI (5 , - 100 , - 20 )),
601
+ (RI (0 , - 11 , - 1 ), RI (1 , - 12 , - 4 )),
602
+ (RI (0 ), RI (0 )),
603
+ (RI (0 , - 10 , - 2 ), RI (0 )),
604
+ (RI (0 , 100 , 2 ), RI (100 , 150 , 200 )),
605
+ (RI (0 , - 100 , - 2 ), RI (- 100 , 50 , 102 )),
606
+ (RI (0 , - 100 , - 1 ), RI (0 , - 50 , - 3 )),
607
+ (RI (0 , 1 , 1 ), RI (5 , 6 , 10 )),
608
+ (RI (0 , 10 , 5 ), RI (- 5 , - 6 , - 20 )),
609
+ (RI (0 , 3 , 1 ), RI (4 , 5 , 1 )),
610
+ (RI (0 , 10 , 1 ), I64 ([])),
611
+ (RI (0 ), I64 ([1 , 5 , 6 ]))]
612
+
613
+ expected_sorted = [RI (0 , 10 , 1 ),
614
+ RI (0 , 20 , 1 ),
615
+ RI (0 , 20 , 1 ),
616
+ RI (0 , - 10 , - 1 ),
617
+ RI (- 19 , 1 , 1 ),
618
+ RI (0 , 10 , 1 ),
619
+ RI (0 , 12 , 1 ),
620
+ RI (- 2 , 24 , 2 ),
621
+ RI (- 19 , 1 , 1 ),
622
+ RI (0 , 100 , 5 ),
623
+ RI (- 95 , 10 , 5 ),
624
+ RI (- 11 , 2 , 1 ),
625
+ RI (0 ),
626
+ RI (0 , - 10 , - 2 ),
627
+ RI (0 , 102 , 2 ),
628
+ RI (- 100 , 4 , 2 ),
629
+ RI (- 99 , 1 , 1 ),
630
+ RI (0 , 6 , 5 ),
631
+ RI (- 5 , 10 , 5 ),
632
+ I64 ([0 , 1 , 2 , 4 ]),
633
+ RI (0 , 10 , 1 ),
634
+ I64 ([1 , 5 , 6 ])]
635
+
636
+ for ((idx1 , idx2 ), expected ) in zip (inputs , expected_sorted ):
612
637
res1 = idx1 .union (idx2 )
613
638
res2 = idx2 .union (idx1 )
614
639
res3 = idx1 ._int64index .union (idx2 )
615
640
tm .assert_index_equal (res1 , expected , exact = True )
616
641
tm .assert_index_equal (res2 , expected , exact = True )
617
642
tm .assert_index_equal (res3 , expected )
618
643
644
+ expected_notsorted = [RI (0 , 10 , 1 ),
645
+ I64 (range (20 )),
646
+ I64 (range (20 )),
647
+ RI (0 , - 10 , - 1 ),
648
+ I64 (range (0 , - 20 , - 1 )),
649
+ I64 (list (range (0 , 10 , 2 )) + list (range (1 , 10 , 2 ))),
650
+ I64 (list (range (0 , 11 , 2 )) + list (range (1 , 12 , 2 ))),
651
+ I64 (list (range (0 , 21 , 4 )) + list (range (- 2 , 24 , 4 ))),
652
+ I64 (list (range (0 , - 20 , - 2 )) + list (range (- 1 , - 21 , - 2 ))),
653
+ I64 (range (0 , 100 , 5 )),
654
+ I64 (list (range (0 , - 100 , - 5 )) + [5 ]),
655
+ I64 (list (range (0 , - 11 , - 1 )) + [1 , - 11 ]),
656
+ RI (0 ),
657
+ RI (0 , - 10 , - 2 ),
658
+ I64 (range (0 , 102 , 2 )),
659
+ I64 (list (range (0 , - 100 , - 2 )) + [- 100 , 2 ]),
660
+ I64 (list (range (0 , - 100 , - 1 ))),
661
+ I64 ([0 , 5 ]),
662
+ I64 ([0 , 5 , - 5 ]),
663
+ I64 ([0 , 1 , 2 , 4 ]),
664
+ RI (0 , 10 , 1 ),
665
+ I64 ([1 , 5 , 6 ])]
666
+
667
+ for ((idx1 , idx2 ), expected ) in zip (inputs , expected_notsorted ):
668
+ res1 = idx1 .union (idx2 , sort = False )
669
+ tm .assert_index_equal (res1 , expected , exact = True )
670
+
619
671
def test_nbytes (self ):
620
672
621
673
# memory savings vs int index
0 commit comments