@@ -427,6 +427,103 @@ StdMapTestSuite.test("UnorderedMap.merge(map)") {
427427 expectEqual ( m [ 3 ] , 3 )
428428}
429429
430+ StdMapTestSuite . test ( " Map.merge(CxxDictionary) " ) {
431+ // Empty map merging with empty map.
432+ var emptyMap = initEmptyMap ( )
433+ emptyMap. merge ( initEmptyUnorderedMap ( ) ) { v0, _ in v0 }
434+ expectTrue ( emptyMap. empty ( ) )
435+
436+ emptyMap. merge ( initEmptyUnorderedMap ( ) ) { _, v1 in v1 }
437+ expectTrue ( emptyMap. empty ( ) )
438+
439+ // Empty map merging with non-empty map.
440+ emptyMap. merge ( initUnorderedMap ( ) ) { v0, _ in v0 }
441+ expectEqual ( emptyMap [ 1 ] , 3 )
442+ expectEqual ( emptyMap [ 2 ] , 2 )
443+ expectEqual ( emptyMap [ 3 ] , 3 )
444+
445+ emptyMap = initEmptyMap ( )
446+ emptyMap. merge ( initUnorderedMap ( ) ) { _, v1 in v1 }
447+ expectEqual ( emptyMap [ 1 ] , 3 )
448+ expectEqual ( emptyMap [ 2 ] , 2 )
449+ expectEqual ( emptyMap [ 3 ] , 3 )
450+
451+ // Non-empty map merging with empty map.
452+ var map = initMap ( )
453+ map. merge ( initUnorderedMap ( ) ) { v0, _ in v0 }
454+ expectEqual ( emptyMap [ 1 ] , 3 )
455+ expectEqual ( emptyMap [ 2 ] , 2 )
456+ expectEqual ( emptyMap [ 3 ] , 3 )
457+
458+ map. merge ( initEmptyUnorderedMap ( ) ) { _, v1 in v1 }
459+ expectEqual ( map [ 1 ] , 3 )
460+ expectEqual ( map [ 2 ] , 2 )
461+ expectEqual ( map [ 3 ] , 3 )
462+
463+ // Non-empty map merging with non-empty map.
464+ let noneEmptydMap = UnorderedMap ( [ 1 : 4 , 2 : 5 , 3 : 6 , 4 : 7 ] )
465+ map. merge ( noneEmptydMap) { v0, _ in v0 }
466+ expectEqual ( map [ 1 ] , 3 )
467+ expectEqual ( map [ 2 ] , 2 )
468+ expectEqual ( map [ 3 ] , 3 )
469+ expectEqual ( map [ 4 ] , 7 )
470+
471+ map. merge ( noneEmptydMap) { _, v1 in v1 }
472+ expectEqual ( map [ 1 ] , 4 )
473+ expectEqual ( map [ 2 ] , 5 )
474+ expectEqual ( map [ 3 ] , 6 )
475+ expectEqual ( map [ 4 ] , 7 )
476+ }
477+
478+ StdMapTestSuite . test ( " UnorderedMap.merge(CxxDictionary) " ) {
479+ // Empty map merging with empty map.
480+ var emptyMap = initEmptyUnorderedMap ( )
481+ emptyMap. merge ( initEmptyMap ( ) ) { v0, _ in v0 }
482+ expectTrue ( emptyMap. empty ( ) )
483+
484+ emptyMap. merge ( initEmptyMap ( ) ) { _, v1 in v1 }
485+ expectTrue ( emptyMap. empty ( ) )
486+
487+ // Empty map merging with non-empty map.
488+ emptyMap. merge ( initMap ( ) ) { v0, _ in v0 }
489+ expectEqual ( emptyMap [ 1 ] , 3 )
490+ expectEqual ( emptyMap [ 2 ] , 2 )
491+ expectEqual ( emptyMap [ 3 ] , 3 )
492+
493+ emptyMap = initEmptyUnorderedMap ( )
494+ emptyMap. merge ( initMap ( ) ) { _, v1 in v1 }
495+ expectEqual ( emptyMap [ 1 ] , 3 )
496+ expectEqual ( emptyMap [ 2 ] , 2 )
497+ expectEqual ( emptyMap [ 3 ] , 3 )
498+
499+ // Non-empty map merging with empty map.
500+ var map = initUnorderedMap ( )
501+ map. merge ( initEmptyMap ( ) ) { _, v1 in v1 }
502+ expectEqual ( map [ 1 ] , 3 )
503+ expectEqual ( map [ 2 ] , 2 )
504+ expectEqual ( map [ 3 ] , 3 )
505+
506+ map. merge ( initEmptyMap ( ) ) { v0, _ in v0 }
507+ expectEqual ( map [ 1 ] , 3 )
508+ expectEqual ( map [ 2 ] , 2 )
509+ expectEqual ( map [ 3 ] , 3 )
510+
511+ // Non-empty map merging with non-empty map.
512+ let noneEmptyMap = Map ( [ 1 : 4 , 2 : 5 , 3 : 6 , 4 : 7 ] )
513+
514+ map. merge ( noneEmptyMap) { v0, _ in v0 }
515+ expectEqual ( map [ 1 ] , 3 )
516+ expectEqual ( map [ 2 ] , 2 )
517+ expectEqual ( map [ 3 ] , 3 )
518+ expectEqual ( map [ 4 ] , 7 )
519+
520+ map. merge ( noneEmptyMap) { _, v1 in v1 }
521+ expectEqual ( map [ 1 ] , 4 )
522+ expectEqual ( map [ 2 ] , 5 )
523+ expectEqual ( map [ 3 ] , 6 )
524+ expectEqual ( map [ 4 ] , 7 )
525+ }
526+
430527// `merging` is implemented by calling `merge`, so we can skip this test
431528
432529runAllTests ( )
0 commit comments