1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
use strict; use warnings; use Test::More;
sub merge_items {
my %idsum;
$idsum{ $$_[0] } += $$_[1] for map @$_, @_;
[ map [ $_, $idsum{$_} ], sort {$a<=>$b} keys %idsum ]
}
my @tests = (
{
items1 => [ [1,1], [2,1], [3,2] ],
items2 => [ [2,2], [1,3] ],
want => [ [1,4], [2,3], [3,2] ]
},
{
items1 => [ [1,2], [2,3], [1,3], [3,2] ],
items2 => [ [3,1], [1,3] ],
want => [ [1,8], [2,3], [3,3] ]
},
{
items1 => [ [1,1], [2,2], [3,3] ],
items2 => [ [2,3], [2,4] ],
want => [ [1,1], [2,9], [3,3] ]
}
);
for my $test (@tests) {
my $got = merge_items( @$test{'items1', 'items2'} );
is_deeply( $got, $$test{want} );
}
done_testing;
|