@@ -588,6 +588,129 @@ public static void TestCompositeRangeWithValues()
588
588
AreEqual ( compositeRange4 , compositeRange . WithoutKeys ( ) ) ;
589
589
}
590
590
591
+ [ Test ]
592
+ public static void TestCompositeRangeExclusiveWithOrWithoutKeys ( )
593
+ {
594
+ var compositeRange = Enumerable
595
+ . Range ( 1 , 2 )
596
+ . ToCompositeRangeExclusive ( i => i - 1 , i => i + 1 ) ;
597
+ AreEqual ( compositeRange . ToString ( ) , "(0..3): { '1':(0..2); '2':(1..3) }" ) ;
598
+
599
+ var compositeRange2 = compositeRange . WithKeys ( i => "A" + i ) ;
600
+ AreEqual ( compositeRange2 . ToString ( ) , "(0..3): { 'A1':(0..2); 'A2':(1..3) }" ) ;
601
+
602
+ var compositeRange3 = compositeRange2 . WithoutKeys ( ) ;
603
+ AreEqual ( compositeRange3 . ToString ( ) , "(0..3): { (0..2); (1..3) }" ) ;
604
+
605
+ var compositeRange4 = compositeRange3 . WithKeys ( "A" ) ;
606
+ AreEqual ( compositeRange4 . ToString ( ) , "(0..3): { 'A':(0..2); 'A':(1..3) }" ) ;
607
+
608
+ var compositeRange5 = compositeRange4 . WithKeys ( "B" ) ;
609
+ AreEqual ( compositeRange5 . ToString ( ) , "(0..3): { 'B':(0..2); 'B':(1..3) }" ) ;
610
+ }
611
+
612
+ [ Test ]
613
+ public static void TestCompositeRangeExclusiveWithValues ( )
614
+ {
615
+ var compositeRange = Enumerable
616
+ . Range ( 1 , 2 )
617
+ . ToCompositeRangeExclusive ( i => i - 1 , i => i + 1 ) ;
618
+ AreEqual ( compositeRange . ToString ( ) , "(0..3): { '1':(0..2); '2':(1..3) }" ) ;
619
+
620
+ var compositeRange2 = compositeRange . WithValues ( i => "A" + i ) ;
621
+ AreEqual ( compositeRange2 . ToString ( ) , "(A0..A3): { '1':(A0..A2); '2':(A1..A3) }" ) ;
622
+
623
+ var compositeRange3 = compositeRange2 . WithValues ( i => i , i => "B" + i . Substring ( 1 ) ) ;
624
+ AreEqual ( compositeRange3 . ToString ( ) , "(A0..B3): { '1':(A0..B2); '2':(A1..B3) }" ) ;
625
+
626
+ var compositeRange4 = compositeRange3 . WithoutKeys ( ) . WithValues ( i => int . Parse ( i . Substring ( 1 ) ) ) ;
627
+ AreEqual ( compositeRange4 . ToString ( ) , "(0..3): { (0..2); (1..3) }" ) ;
628
+
629
+ AreEqual ( compositeRange4 , compositeRange . WithoutKeys ( ) ) ;
630
+ }
631
+
632
+ [ Test ]
633
+ public static void TestCompositeRangeExclusiveFromWithOrWithoutKeys ( )
634
+ {
635
+ var compositeRange = Enumerable
636
+ . Range ( 1 , 2 )
637
+ . ToCompositeRangeExclusiveFrom ( i => i - 1 , i => i + 1 ) ;
638
+ AreEqual ( compositeRange . ToString ( ) , "(0..3]: { '1':(0..2]; '2':(1..3] }" ) ;
639
+
640
+ var compositeRange2 = compositeRange . WithKeys ( i => "A" + i ) ;
641
+ AreEqual ( compositeRange2 . ToString ( ) , "(0..3]: { 'A1':(0..2]; 'A2':(1..3] }" ) ;
642
+
643
+ var compositeRange3 = compositeRange2 . WithoutKeys ( ) ;
644
+ AreEqual ( compositeRange3 . ToString ( ) , "(0..3]: { (0..2]; (1..3] }" ) ;
645
+
646
+ var compositeRange4 = compositeRange3 . WithKeys ( "A" ) ;
647
+ AreEqual ( compositeRange4 . ToString ( ) , "(0..3]: { 'A':(0..2]; 'A':(1..3] }" ) ;
648
+
649
+ var compositeRange5 = compositeRange4 . WithKeys ( "B" ) ;
650
+ AreEqual ( compositeRange5 . ToString ( ) , "(0..3]: { 'B':(0..2]; 'B':(1..3] }" ) ;
651
+ }
652
+
653
+ [ Test ]
654
+ public static void TestCompositeRangeExclusiveFromWithValues ( )
655
+ {
656
+ var compositeRange = Enumerable
657
+ . Range ( 1 , 2 )
658
+ . ToCompositeRangeExclusiveFrom ( i => i - 1 , i => i + 1 ) ;
659
+ AreEqual ( compositeRange . ToString ( ) , "(0..3]: { '1':(0..2]; '2':(1..3] }" ) ;
660
+
661
+ var compositeRange2 = compositeRange . WithValues ( i => "A" + i ) ;
662
+ AreEqual ( compositeRange2 . ToString ( ) , "(A0..A3]: { '1':(A0..A2]; '2':(A1..A3] }" ) ;
663
+
664
+ var compositeRange3 = compositeRange2 . WithValues ( i => i , i => "B" + i . Substring ( 1 ) ) ;
665
+ AreEqual ( compositeRange3 . ToString ( ) , "(A0..B3]: { '1':(A0..B2]; '2':(A1..B3] }" ) ;
666
+
667
+ var compositeRange4 = compositeRange3 . WithoutKeys ( ) . WithValues ( i => int . Parse ( i . Substring ( 1 ) ) ) ;
668
+ AreEqual ( compositeRange4 . ToString ( ) , "(0..3]: { (0..2]; (1..3] }" ) ;
669
+
670
+ AreEqual ( compositeRange4 , compositeRange . WithoutKeys ( ) ) ;
671
+ }
672
+
673
+ [ Test ]
674
+ public static void TestCompositeRangeExclusiveToWithOrWithoutKeys ( )
675
+ {
676
+ var compositeRange = Enumerable
677
+ . Range ( 1 , 2 )
678
+ . ToCompositeRangeExclusiveTo ( i => i - 1 , i => i + 1 ) ;
679
+ AreEqual ( compositeRange . ToString ( ) , "[0..3): { '1':[0..2); '2':[1..3) }" ) ;
680
+
681
+ var compositeRange2 = compositeRange . WithKeys ( i => "A" + i ) ;
682
+ AreEqual ( compositeRange2 . ToString ( ) , "[0..3): { 'A1':[0..2); 'A2':[1..3) }" ) ;
683
+
684
+ var compositeRange3 = compositeRange2 . WithoutKeys ( ) ;
685
+ AreEqual ( compositeRange3 . ToString ( ) , "[0..3): { [0..2); [1..3) }" ) ;
686
+
687
+ var compositeRange4 = compositeRange3 . WithKeys ( "A" ) ;
688
+ AreEqual ( compositeRange4 . ToString ( ) , "[0..3): { 'A':[0..2); 'A':[1..3) }" ) ;
689
+
690
+ var compositeRange5 = compositeRange4 . WithKeys ( "B" ) ;
691
+ AreEqual ( compositeRange5 . ToString ( ) , "[0..3): { 'B':[0..2); 'B':[1..3) }" ) ;
692
+ }
693
+
694
+ [ Test ]
695
+ public static void TestCompositeRangeExclusiveToWithValues ( )
696
+ {
697
+ var compositeRange = Enumerable
698
+ . Range ( 1 , 2 )
699
+ . ToCompositeRangeExclusiveTo ( i => i - 1 , i => i + 1 ) ;
700
+ AreEqual ( compositeRange . ToString ( ) , "[0..3): { '1':[0..2); '2':[1..3) }" ) ;
701
+
702
+ var compositeRange2 = compositeRange . WithValues ( i => "A" + i ) ;
703
+ AreEqual ( compositeRange2 . ToString ( ) , "[A0..A3): { '1':[A0..A2); '2':[A1..A3) }" ) ;
704
+
705
+ var compositeRange3 = compositeRange2 . WithValues ( i => i , i => "B" + i . Substring ( 1 ) ) ;
706
+ AreEqual ( compositeRange3 . ToString ( ) , "[A0..B3): { '1':[A0..B2); '2':[A1..B3) }" ) ;
707
+
708
+ var compositeRange4 = compositeRange3 . WithoutKeys ( ) . WithValues ( i => int . Parse ( i . Substring ( 1 ) ) ) ;
709
+ AreEqual ( compositeRange4 . ToString ( ) , "[0..3): { [0..2); [1..3) }" ) ;
710
+
711
+ AreEqual ( compositeRange4 , compositeRange . WithoutKeys ( ) ) ;
712
+ }
713
+
591
714
[ Test ]
592
715
[ TestCase (
593
716
"∅" ,
0 commit comments