X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FSub-Nary.git;a=blobdiff_plain;f=t%2F15-misc-xs.t;h=7cc94042aea4da6ecb7147c10ea12504bf970f63;hp=80de3c5a02b9c198d7436964eecb4addf4ec3f1b;hb=HEAD;hpb=972e76e13b6f6e85c20493bddba2d1fd71fd57f8 diff --git a/t/15-misc-xs.t b/t/15-misc-xs.t index 80de3c5..7cc9404 100644 --- a/t/15-misc-xs.t +++ b/t/15-misc-xs.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 12; +use Test::More tests => 32; use Sub::Nary; @@ -14,12 +14,20 @@ is($nbr, scalar @scalops, 'scalops return values in list/scalar context are cons *normalize = *Sub::Nary::normalize{CODE}; -is_deeply(normalize(1), { 1 => 1 }, 'normalize const'); -is_deeply(normalize({}), { 0 => 1 }, 'normalize empty-ref'); +is_deeply(normalize('list'), { list => 1 }, 'normalize list'); +is_deeply(normalize(1), { 1 => 1 }, 'normalize const'); +is_deeply(normalize({}), { 0 => 1 }, 'normalize empty-ref'); +is_deeply(normalize({ list => 1, 2 => 2, 3 => 1 }), + { list => 0.25, 2 => 0.5, 3 => 0.25 }, + 'normalize list and consts'); *scale = *Sub::Nary::scale{CODE}; -is_deeply(scale(1, {}), { 0 => 1 }, 'scale const, empty-ref'); +is_deeply(scale(1, {}), undef, 'scale 1, empty-ref'); +is_deeply(scale(0.5, {}), undef, 'scale 0.5, empty-ref'); +is_deeply(scale(0.5, { list => 2 }), { list => 1 }, 'scale 0.5, list'); +is_deeply(scale(0.5, { list => 2, 1 => 2 }), { list => 1, 1 => 1 }, + 'scale 0.5, list/const'); *add = *Sub::Nary::add{CODE}; @@ -32,5 +40,33 @@ is_deeply(add({ 1 => 1 }, 1), { 1 => 2 }, 'add ref, prev-const'); *cumulate = *Sub::Nary::cumulate{CODE}; is_deeply(cumulate('list', 1, 1), 'list', 'cumulate const, non-zero, non-zero'); -is_deeply(cumulate({ 1 => 1 }, 1, 0), { 1 => 1 }, 'cumulate ref, non-zero, zero'); is_deeply(cumulate({ }, 1, 1), undef, 'cumulate empty-ref, non-zero, non-zero'); +is_deeply(cumulate({ 1 => 1 }, 1, 0), { 1 => 1 }, 'cumulate ref, non-zero, zero'); +is_deeply(cumulate({ 1 => 1 }, 2, 1), { 1 => 2 }, 'cumulate ref, 2, 1'); +is_deeply(cumulate({ 1 => 0.5, 2 => 0.5 }, 1, 0.5), { 1 => 0.5, 2 => 0.5 }, + 'cumulate ref, 1, frac'); +is_deeply(cumulate({ 1 => 0.5, 2 => 0.5 }, 2, 0.5), { 1 => 0.75, 2 => 0.75 }, + 'cumulate ref, 1, frac'); + +*combine = *Sub::Nary::combine{CODE}; + +is_deeply(combine(undef), undef, 'combine undef'); +is_deeply(combine({}), {}, 'combine empty-ref'); +is_deeply(combine({}, {}), {}, 'combine empty-ref, empty-ref'); +is_deeply(combine(1), { 1 => 1 }, 'combine const'); +is_deeply(combine(1, 2), { 3 => 1 }, 'combine const, const'); +is_deeply(combine(1, 'list'), { 'list' => 1 }, 'combine const, list'); +is_deeply(combine(1,{'list'=>1}), { 'list' => 1 }, 'combine const, list'); +is_deeply(combine(1, { 1 => 0.5, 2 => 0.5 }), { 2 => 0.5, 3 => 0.5 }, + 'combine const, hashref'); +is_deeply(combine(1, { 1 => 0.5, 'list' => 0.5 }), { 2 => 0.5, 'list' => 0.5 }, + 'combine const, hashref with list'); +my $x = { 1 => 0.5, 2 => 0.5 }; +is_deeply(combine($x, $x), { 2 => 0.25, 3 => 0.5, 4 => 0.25 }, + 'combine hashref, hashref'); +is_deeply(combine($x, 'list', $x), { list => 1 }, + 'combine hashref, list, hashref'); +$x = { 1 => 0.5, list => 0.5 }; +is_deeply(combine($x, $x), { 2 => 0.25, list => 0.75 }, + 'combine hashref with list, hashref with list'); +