@@ -427,6 +427,103 @@ StdMapTestSuite.test("UnorderedMap.merge(map)") {
427
427
expectEqual ( m [ 3 ] , 3 )
428
428
}
429
429
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
+
430
527
// `merging` is implemented by calling `merge`, so we can skip this test
431
528
432
529
runAllTests ( )
0 commit comments