@@ -581,128 +581,96 @@ test "HAMT::union leaf to non-overlapping map" {
581
581
}
582
582
583
583
///|
584
- test "HAMT::union_with no overlap" {
585
- let m1 = @hashmap .of ([(1 , 10 ), (2 , 20 )])
586
- let m2 = @hashmap .of ([(3 , 30 ), (4 , 40 )])
587
- let u = m1 .union_with (m2 , fn (_k , v1 , v2 ) { v1 + v2 })
588
- assert_eq! (u .get (1 ), Some (10 ))
589
- assert_eq! (u .get (2 ), Some (20 ))
590
- assert_eq! (u .get (3 ), Some (30 ))
591
- assert_eq! (u .get (4 ), Some (40 ))
592
- assert_eq! (u .size (), 4 )
593
- }
594
-
595
- ///|
596
- test "HAMT::union_with overlap" {
597
- let m1 = @hashmap .of ([(1 , 10 ), (2 , 20 )])
598
- let m2 = @hashmap .of ([(2 , 200 ), (3 , 300 )])
599
- let u = m1 .union_with (m2 , fn (_k , v1 , v2 ) { v1 * v2 })
600
- assert_eq! (u .get (1 ), Some (10 ))
601
- assert_eq! (u .get (2 ), Some (4000 ))
602
- assert_eq! (u .get (3 ), Some (300 ))
603
- assert_eq! (u .size (), 3 )
604
- }
605
-
606
- ///|
607
- test "HAMT::union_with self" {
608
- let m = @hashmap .of ([(1 , 1 ), (2 , 2 ), (3 , 3 )])
609
- let u = m .union_with (m , fn (_k , v1 , v2 ) { v1 + v2 })
610
- assert_eq! (u .get (1 ), Some (2 ))
611
- assert_eq! (u .get (2 ), Some (4 ))
612
- assert_eq! (u .get (3 ), Some (6 ))
613
- assert_eq! (u .size (), 3 )
584
+ test "HAMT::intersection with empty" {
585
+ let m1 = @hashmap .of ([(1 , 1 )])
586
+ let m2 = @hashmap .new ()
587
+ assert_eq! (m1 .intersection (m2 ).size (), 0 )
588
+ assert_eq! (m2 .intersection (m1 ).size (), 0 )
614
589
}
615
590
616
591
///|
617
- test "HAMT::intersection both empty" {
618
- let m1 = @hashmap .of ([(1 , 10 ), (2 , 20 ), (3 , 30 )])
619
- let m2 = @hashmap .new ()
620
- let inter = m1 .intersection (m2 )
621
- assert_eq! (inter .size (), 0 )
592
+ test "HAMT::intersection with leaf" {
593
+ let m1 = @hashmap .of ([(1 , 1 ), (2 , 2 )])
594
+ let m2 = @hashmap .singleton (2 , 2 )
595
+ let m3 = @hashmap .singleton (3 , 3 )
596
+ assert_eq! (m1 .intersection (m2 ).get (2 ), Some (2 ))
597
+ assert_eq! (m1 .intersection (m3 ).get (3 ), None )
598
+ assert_eq! (m2 .intersection (m1 ).get (2 ), Some (2 ))
622
599
}
623
600
624
601
///|
625
- test "HAMT::intersection partial overlap " {
626
- let m1 = @hashmap .of ([(1 , 10 ), (2 , 20 ), (3 , 30 )])
627
- let m2 = @hashmap .of ([(2 , 200 ), (3 , 300 ), (4 , 400 )])
602
+ test "HAMT::intersection with branch " {
603
+ let m1 = @hashmap .of ([(1 , 1 ), (2 , 2 ), (3 , 3 )])
604
+ let m2 = @hashmap .of ([(2 , 2 ), (3 , 30 ), (4 , 4 )])
628
605
let inter = m1 .intersection (m2 )
629
606
assert_eq! (inter .get (1 ), None )
630
- assert_eq! (inter .get (2 ), Some (20 ))
631
- assert_eq! (inter .get (3 ), Some (30 ))
607
+ assert_eq! (inter .get (2 ), Some (2 ))
608
+ assert_eq! (inter .get (3 ), Some (3 ))
632
609
assert_eq! (inter .get (4 ), None )
633
- assert_eq! (inter .size (), 2 )
634
610
}
635
611
636
612
///|
637
- test "HAMT::intersection full overlap" {
638
- let m1 = @hashmap .of ([(1 , 10 ), (2 , 20 )])
639
- let m2 = @hashmap .of ([(1 , 100 ), (2 , 200 )])
640
- let inter = m1 .intersection (m2 )
641
- assert_eq! (inter .get (1 ), Some (10 ))
642
- assert_eq! (inter .get (2 ), Some (20 ))
643
- assert_eq! (inter .size (), 2 )
613
+ test "HAMT::intersection_with with empty" {
614
+ let m1 = @hashmap .of ([(1 , 1 )])
615
+ let m2 = @hashmap .new ()
616
+ assert_eq! (m1 .intersection_with (m2 , fn (_k , v1 , v2 ) { v1 + v2 }).size (), 0 )
617
+ assert_eq! (m2 .intersection_with (m1 , fn (_k , v1 , v2 ) { v1 + v2 }).size (), 0 )
644
618
}
645
619
646
620
///|
647
- test "HAMT::intersection_with no overlap" {
648
- let m1 = @hashmap .of ([(1 , 10 )])
649
- let m2 = @hashmap .of ([(2 , 20 )])
650
- let inter = m1 .intersection_with (m2 , fn (_k , v1 , v2 ) { v1 + v2 })
651
- assert_eq! (inter .size (), 0 )
621
+ test "HAMT::intersection_with with leaf" {
622
+ let m1 = @hashmap .of ([(1 , 1 ), (2 , 2 )])
623
+ let m2 = @hashmap .singleton (2 , 20 )
624
+ let m3 = @hashmap .singleton (3 , 30 )
625
+ assert_eq! (
626
+ m1 .intersection_with (m2 , fn (_k , v1 , v2 ) { v1 + v2 }).get (2 ),
627
+ Some (22 ),
628
+ )
629
+ assert_eq! (m1 .intersection_with (m3 , fn (_k , v1 , v2 ) { v1 + v2 }).get (3 ), None )
630
+ assert_eq! (
631
+ m2 .intersection_with (m1 , fn (_k , v1 , v2 ) { v1 + v2 }).get (2 ),
632
+ Some (22 ),
633
+ )
652
634
}
653
635
654
636
///|
655
- test "HAMT::intersection_with has overlap " {
656
- let m1 = @hashmap .of ([(1 , 10 ), (2 , 20 )])
657
- let m2 = @hashmap .of ([(2 , 200 ), (3 , 300 )])
658
- let inter = m1 .intersection_with (m2 , fn (_k , v1 , v2 ) { v1 + v2 })
637
+ test "HAMT::intersection_with with branch " {
638
+ let m1 = @hashmap .of ([(1 , 1 ), (2 , 2 ), ( 3 , 3 )])
639
+ let m2 = @hashmap .of ([(2 , 20 ), (3 , 30 ), ( 4 , 4 )])
640
+ let inter = m1 .intersection_with (m2 , fn (_k , v1 , v2 ) { v1 * v2 })
659
641
assert_eq! (inter .get (1 ), None )
660
- assert_eq! (inter .get (2 ), Some (220 ))
661
- assert_eq! (inter .get (3 ), None )
662
- assert_eq! (inter .size ( ), 1 )
642
+ assert_eq! (inter .get (2 ), Some (40 ))
643
+ assert_eq! (inter .get (3 ), Some ( 90 ) )
644
+ assert_eq! (inter .get ( 4 ), None )
663
645
}
664
646
665
647
///|
666
- test "HAMT::intersection_with string values" {
667
- let m1 = @hashmap .of ([(1 , "foo" ), (2 , "bar" )])
668
- let m2 = @hashmap .of ([(2 , "baz" ), (3 , "qux" )])
669
- let inter = m1 .intersection_with (m2 , fn (_k , v1 , v2 ) { v1 + v2 })
670
- assert_eq! (inter .get (1 ), None )
671
- assert_eq! (inter .get (2 ), Some ("barbaz" ))
672
- assert_eq! (inter .get (3 ), None )
673
- assert_eq! (inter .size (), 1 )
648
+ test "HAMT::difference with empty" {
649
+ let m1 = @hashmap .of ([(1 , 1 )])
650
+ let m2 = @hashmap .new ()
651
+ assert_eq! (m1 .difference (m2 ), m1 )
652
+ assert_eq! (m2 .difference (m1 ).size (), 0 )
674
653
}
675
654
676
655
///|
677
- test "HAMT::difference no overlap" {
678
- let m1 = @hashmap .of ([(1 , 10 ), (2 , 20 )])
679
- let m2 = @hashmap .of ([(3 , 30 ), (4 , 40 )])
680
- let diff = m1 .difference (m2 )
681
- assert_eq! (diff .get (1 ), Some (10 ))
682
- assert_eq! (diff .get (2 ), Some (20 ))
683
- assert_eq! (diff .get (3 ), None )
684
- assert_eq! (diff .get (4 ), None )
685
- assert_eq! (diff .size (), 2 )
656
+ test "HAMT::difference with leaf" {
657
+ let m1 = @hashmap .of ([(1 , 1 ), (2 , 2 )])
658
+ let m2 = @hashmap .singleton (2 , 2 )
659
+ let m3 = @hashmap .singleton (3 , 3 )
660
+ assert_eq! (m1 .difference (m2 ).get (2 ), None )
661
+ assert_eq! (m1 .difference (m3 ).get (1 ), Some (1 ))
662
+ assert_eq! (m2 .difference (m1 ).size (), 0 )
686
663
}
687
664
688
665
///|
689
- test "HAMT::difference partial overlap " {
690
- let m1 = @hashmap .of ([(1 , 10 ), (2 , 20 ), (3 , 30 )])
691
- let m2 = @hashmap .of ([(2 , 200 ), (4 , 400 )])
666
+ test "HAMT::difference with branch " {
667
+ let m1 = @hashmap .of ([(1 , 1 ), (2 , 2 ), (3 , 3 )])
668
+ let m2 = @hashmap .of ([(2 , 2 ), (3 , 30 ), ( 4 , 4 )])
692
669
let diff = m1 .difference (m2 )
693
- assert_eq! (diff .get (1 ), Some (10 ))
670
+ assert_eq! (diff .get (1 ), Some (1 ))
694
671
assert_eq! (diff .get (2 ), None )
695
- assert_eq! (diff .get (3 ), Some ( 30 ) )
672
+ assert_eq! (diff .get (3 ), None )
696
673
assert_eq! (diff .get (4 ), None )
697
- assert_eq! (diff .size (), 2 )
698
- }
699
-
700
- ///|
701
- test "HAMT::difference full overlap" {
702
- let m1 = @hashmap .of ([(1 , 10 ), (2 , 20 )])
703
- let m2 = @hashmap .of ([(1 , 100 ), (2 , 200 )])
704
- let diff = m1 .difference (m2 )
705
- assert_eq! (diff .size (), 0 )
706
674
}
707
675
708
676
///|
0 commit comments