+use Test::More tests => 52;
+
+use strict;
+
+use lib 't';
+
+use_ok 'SL::Util';
+
+sub numtest {
+ my @result = SL::Util::_hashify(@_);
+ return scalar(@result);
+}
+
+sub memtest {
+ my $key = shift;
+ my $keep = $_[0];
+ my @result = SL::Util::_hashify(@_);
+ splice @result, 0, $keep;
+
+ return '<empty>' if !@result;
+ return '<odd-sized>' if scalar(@result) % 2;
+
+ my %hash = @result;
+ return $hash{$key};
+}
+
+my $href = { 42 => 54, unicorn => 'charlie' };
+my %hash = ( 23 => 13, chunky => 'bacon' );
+
+is(numtest(0, $href), 4, 'case A1');
+is(numtest(0, %hash), 4, 'case A2');
+is(numtest(1, $href), 1, 'case A3');
+is(numtest(1, %hash), 4, 'case A4');
+is(numtest(2, $href), 1, 'case A5');
+is(numtest(2, %hash), 4, 'case A6');
+is(numtest(3, $href), 1, 'case A7');
+is(numtest(3, %hash), 4, 'case A8');
+is(numtest(4, $href), 1, 'case A9');
+is(numtest(4, %hash), 4, 'case A10');
+is(numtest(5, $href), 1, 'case A11');
+is(numtest(5, %hash), 4, 'case A12');
+
+is(numtest(0, 'dummy1', $href), 2, 'case B1');
+is(numtest(0, 'dummy1', %hash), 5, 'case B2');
+is(numtest(1, 'dummy1', $href), 5, 'case B3');
+is(numtest(1, 'dummy1', %hash), 5, 'case B4');
+is(numtest(2, 'dummy1', $href), 2, 'case B5');
+is(numtest(2, 'dummy1', %hash), 5, 'case B6');
+is(numtest(3, 'dummy1', $href), 2, 'case B7');
+is(numtest(3, 'dummy1', %hash), 5, 'case B8');
+is(numtest(4, 'dummy1', $href), 2, 'case B9');
+is(numtest(4, 'dummy1', %hash), 5, 'case B10');
+is(numtest(5, 'dummy1', $href), 2, 'case B11');
+is(numtest(5, 'dummy1', %hash), 5, 'case B12');
+
+is(numtest(0, 'dummy1', 'dummy2', $href), 3, 'case C1');
+is(numtest(0, 'dummy1', 'dummy2', %hash), 6, 'case C2');
+is(numtest(1, 'dummy1', 'dummy2', $href), 3, 'case C3');
+is(numtest(1, 'dummy1', 'dummy2', %hash), 6, 'case C4');
+is(numtest(2, 'dummy1', 'dummy2', $href), 6, 'case C5');
+is(numtest(2, 'dummy1', 'dummy2', %hash), 6, 'case C6');
+is(numtest(3, 'dummy1', 'dummy2', $href), 3, 'case C7');
+is(numtest(3, 'dummy1', 'dummy2', %hash), 6, 'case C8');
+is(numtest(4, 'dummy1', 'dummy2', $href), 3, 'case C9');
+is(numtest(4, 'dummy1', 'dummy2', %hash), 6, 'case C10');
+is(numtest(5, 'dummy1', 'dummy2', $href), 3, 'case C11');
+is(numtest(5, 'dummy1', 'dummy2', %hash), 6, 'case C12');
+
+is(memtest(42, 0, $href), '54', 'case D1');
+is(memtest(23, 0, %hash), '13', 'case D2');
+is(memtest('unicorn', 0, $href), 'charlie', 'case D3');
+is(memtest('chunky', 0, %hash), 'bacon', 'case D4');
+is(memtest(42, 1, $href), '<empty>', 'case D5');
+is(memtest(23, 1, %hash), '<odd-sized>', 'case D6');
+
+is(memtest(42, 0, 'dummy1', $href), undef, 'case E1');
+is(memtest(23, 0, 'dummy1', %hash), '<odd-sized>', 'case E2');
+is(memtest('unicorn', 0, 'dummy1', $href), undef, 'case E3');
+is(memtest(42, 1, 'dummy1', $href), '54', 'case E4');
+is(memtest(23, 1, 'dummy1', %hash), '13', 'case E5');
+is(memtest('unicorn', 1, 'dymmy1', $href), 'charlie', 'case E6');
+is(memtest('chunky', 1, 'dummy1', %hash), 'bacon', 'case E7');
+is(memtest(42, 2, 'dummy1', $href), '<empty>', 'case E8');
+is(memtest(23, 2, 'dummy1', %hash), '<odd-sized>', 'case E9');