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 => 5;

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

# just making sure that we indeed *CAN* use suffix, infix, or whatever
# instead of just prefix

use Data::ModeMerge;
my $mm = Data::ModeMerge->new;
my ($mha, $mhc);
for ($mm->modes->{ADD}) {
    $mha = $_;
    $_->prefix_re(qr/-ADD$/);
    $_->add_prefix_sub(sub {$_[0]."-ADD"});
    $_->remove_prefix_sub(sub {$_[0] =~ s/-ADD$//; $_[0]});
}
for ($mm->modes->{CONCAT}) {
    $mhc = $_;
    $_->prefix_re(qr/-CONCAT$/);
    $_->add_prefix_sub(sub {$_[0]."-CONCAT"});
    $_->remove_prefix_sub(sub {$_[0] =~ s/-CONCAT$//; $_[0]});
}
is($mha->add_prefix("a"), "a-ADD", "add 1");
is($mhc->add_prefix("a"), "a-CONCAT", "concat 1");
merge_is({a=>1, c=>1}, {"a-ADD"=>2, "c-CONCAT"=>2, "+a"=>20, ".c"=>20}, {a=>3, c=>12, "+a"=>20, ".c"=>20}, "merge 1", $mm);
merge_is({}, {"a-ADD"=>2, "c-CONCAT"=>2}, {"a-ADD"=>2, "c-CONCAT"=>2}, "merge 2", $mm);
merge_is({a=>1,       h=>{a=>10,        ""=>{set_prefix=>{ADD=>"plus-"}}}},
         {"a-ADD"=>2, h=>{"plus-a"=>20}},
         {a=>3, h=>{a=>30}}, "merge+ok 1", $mm);