The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 12;

use strict;
use warnings;

use Digest;
use Digest::Bcrypt;

my $secret = "Super Secret Squirrel";
my $salt   = "   known salt   ";
my $cost   = 1;


my $direct = Digest::Bcrypt->new;

can_ok($direct, qw/new clone add digest hexdigest b64digest bcrypt_b64digest salt reset/);

$direct->add($secret);
$direct->salt($salt);
$direct->cost($cost);

ok($direct->salt eq $salt, "Reads salt correctly");
ok($direct->cost == $cost, "Reads cost correctly");


my $direct_clone = $direct->clone;
$direct_clone->salt('  unknown salt  ');
$direct_clone->cost('2');

ok($direct->salt ne $direct_clone->salt, "Cloned object has different salt");
ok($direct->cost != $direct_clone->cost, "Cloned object has different cost");
ok($direct->hexdigest ne $direct_clone->hexdigest, "Cloned object produces different hash");



my $indirect = Digest->new('Bcrypt');
can_ok($indirect, qw/new clone add digest hexdigest b64digest bcrypt_b64digest salt reset/);

$indirect->add($secret);
$indirect->salt($salt);
$indirect->cost($cost);

ok($indirect->salt eq $salt, "Indirect object reads salt correctly");
ok($indirect->cost == $cost, "Indirect object reads cost correctly");



my $indirect_clone = $indirect->clone;
$indirect_clone->salt('  unknown salt  ');
$indirect_clone->cost('2');

ok($indirect->salt ne $indirect_clone->salt, "Indirect cloned object has different salt");
ok($indirect->cost != $indirect_clone->cost, "Indirect cloned object has different cost");
ok($indirect->hexdigest ne $indirect_clone->hexdigest, "Indirect cloned object produces different hash");