The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;
use Test::More tests => 4;

use lib './t';
do 'testlib.pm';

use Data::ModeMerge;

merge_is({'^a'=>1, '^b'=>2,     '^c'=>3, '^c2'=>3, '^d'=>4, '^e'=>5, '^f'=>6, g=>7},
         {  a =>9, '!b'=>undef, '+c'=>9, '.c2'=>9, '-d'=>9, '*e'=>9, '^f'=>9, g=>9},
         {'^a'=>1, '^b'=>2,     '^c'=>3, '^c2'=>3, '^d'=>4, '^e'=>5, '^f'=>6, g=>9}, 'hash 1');

merge_is({"^a"=>1}, {a=>2, "+a"=>3, ".a"=>4, "-a"=>5, "!a"=>6, "^a"=>7}, {"^a"=>1}, 'protect multiple');

my $dm;
$dm = Data::ModeMerge->new();
$dm->config->default_mode('KEEP');
merge_is({a=>1,       c=>{d=>1},   d =>1,   e =>1,   f =>[],      g =>1, },
         {a=>2, b=>2, c=>{d=>2}, '!d'=>0, '+e'=>2, '+f'=>[1,2], '^g'=>2, },
         {a=>1, b=>2, c=>{d=>1},   d =>1,   e =>1,   f =>[],      g =>1, },
         'default merge mode KEEP 1', $dm);
merge_is(1,
         [2],
         1,
         'default merge mode KEEP 2', $dm);