#!perl
use
5.14.0;
my
$h
= Algorithm::Toy::HashSC->new;
isa_ok(
$h
,
'Algorithm::Toy::HashSC'
);
is(
scalar
$h
->
keys
, 0,
'no keys... yet.'
);
is(
$h
->get(
"foo"
),
undef
);
is(
$h
->take(
"foo"
),
undef
);
like dies {
$h
->get },
qr/must provide key/
;
like dies {
$h
->hash },
qr/must provide key/
;
like dies {
$h
->keys_in },
qr/must provide index/
;
like dies {
$h
->keys_with },
qr/must provide key/
;
like dies {
$h
->put },
qr/must provide key/
;
like dies {
$h
->take },
qr/must provide key/
;
isa_ok(
$h
->put(
"key"
, 42 ),
'Algorithm::Toy::HashSC'
);
is(
scalar
$h
->
keys
, 1,
'one key'
);
is(
$h
->get(
"key"
), 42,
'get key'
);
is(
$h
->take(
"key"
), 42,
'take key'
);
is(
scalar
$h
->
keys
, 0,
'no keys'
);
$h
->put(
"key"
, 99 );
$h
->get(
"ked"
);
like dies {
$h
->modulus(1) },
qr/modulus must be/
;
like dies {
$h
->modulus(
"cat"
) },
qr/modulus must be/
;
$h
->put(
"key"
, 42 );
$h
->modulus(2);
is(
scalar
$h
->
keys
, 0,
'modulus results in no keys'
);
is( [
$h
->keys_with(
"winning lotto numbers"
) ], [] );
for
my
$k
(
qw/a b c d e/
) {
$h
->put(
$k
,
"meh"
);
}
is( [
$h
->keys_with(
"b"
) ], [
qw/b d/
] );
is( [
$h
->keys_in(0) ], [
qw/b d/
] );
is( [
$h
->keys_in(1) ], [
qw/a c e/
] );
is( [
$h
->
keys
], [
qw/b d a c e/
] );
$h
->take(
"b"
);
is( [
$h
->keys_with(
"d"
) ], [
qw/d/
] );
is( [
$h
->
keys
], [
qw/d a c e/
] );
$h
->take(
"c"
);
is( [
$h
->keys_with(
"cats"
) ], [] );
is( [
$h
->
keys
], [
qw/d a e/
] );
$h
->take(
"d"
);
is( [
$h
->
keys
], [
qw/a e/
] );
isa_ok(
$h
->clear_hash,
'Algorithm::Toy::HashSC'
);
is(
scalar
$h
->
keys
, 0,
'no keys again'
);
$h
->put(
"key"
, 42 );
$h
->unsafe(1);
$h
->modulus(13);
is( [
$h
->
keys
], [
"key"
] );
$h
->unsafe(0);
$h
->clear_hash;
is(
scalar
$h
->
keys
, 0,
'no keys yet again'
);
sub
hashcode { 0 }
}
my
$x
= FooCode->new;
my
$y
= FooCode->new;
my
$z
= FooCode->new;
$h
->put(
$x
, 1 );
$h
->put(
$y
, 2 );
$h
->put(
$z
, 3 );
is(
scalar
$h
->keys_with(
$x
), 3,
'all objects in same bucket'
);
plan 33