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

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

use Data::ModeMerge;

mmerge_is(1         , 2        , {default_mode=>'ADD'     }, 3        , 'default_mode ADD (scalar)'     );
mmerge_is([1,2,3]   , [2]      , {default_mode=>'ADD'     }, [1,2,3,2], 'default_mode ADD (array)'      );
mmerge_is({a=>5}    , {a=>2}   , {default_mode=>'ADD'     }, {a=>7}   , 'default_mode ADD (hash)'       );
mmerge_is({a=>5}    , {"*a"=>2}, {default_mode=>'ADD'     }, {"*a"=>2}, 'default_mode ADD (hash) N'     );

mmerge_is(1         , 2        , {default_mode=>'CONCAT'  }, 12       , 'default_mode CONCAT (scalar)'  );
mmerge_is([1,2,3]   , [2]      , {default_mode=>'CONCAT'  }, [1,2,3,2], 'default_mode CONCAT (array)'   );
mmerge_is({a=>5}    , {a=>2}   , {default_mode=>'CONCAT'  }, {a=>52}  , 'default_mode CONCAT (hash)'    );
mmerge_is({a=>5}    , {"*a"=>2}, {default_mode=>'CONCAT'  }, {"*a"=>2}, 'default_mode CONCAT (hash) N'  );

mmerge_is(1         , 2        , {default_mode=>'DELETE'  }, undef    , 'default_mode DELETE (scalar)'  );
mmerge_is([1,2,3]   , [2]      , {default_mode=>'DELETE'  }, undef    , 'default_mode DELETE (array)'   );
mmerge_is({a=>5}    , {a=>2}   , {default_mode=>'DELETE'  }, undef    , 'default_mode DELETE (hash)'    );

mmerge_is(1         , 2        , {default_mode=>'KEEP'    }, 1        , 'default_mode KEEP (scalar)'    );
mmerge_is([1,2,3]   , [2]      , {default_mode=>'KEEP'    }, [1,2,3]  , 'default_mode KEEP (array)'     );
mmerge_is({a=>5}    , {a=>2}   , {default_mode=>'KEEP'    }, {a=>5}   , 'default_mode KEEP (hash)'      );
mmerge_is({"*a"=>5} , {a=>2}   , {default_mode=>'KEEP'    }, {a=>2}   , 'default_mode KEEP (hash) N'    );
mmerge_is({"*a"=>5} , {"+a"=>2}, {default_mode=>'KEEP'    }, {"*a"=>7}, 'default_mode KEEP (hash) N+A'  );

mmerge_is(1         , 2        , {default_mode=>'SUBTRACT'}, -1       , 'default_mode SUBTRACT (scalar)');
mmerge_is([1,2,3]   , [2]      , {default_mode=>'SUBTRACT'}, [1,3]    , 'default_mode SUBTRACT (array)' );
mmerge_is({a=>5}    , {a=>2}   , {default_mode=>'SUBTRACT'}, {}       , 'default_mode SUBTRACT (hash)'  );