The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

use Test::More;

BEGIN{
	eval "use Time::HiRes qw/time sleep/";

# TODO: It is theoretically possible, though unlikely, that you can get
#	Time::HiRes::time() without getting Time::HiRes::sleep(), and in
#	order to use the HiRes functionality you only need time(), so 
#	this is a little sloppy.  OTOH, I don't really see a good way to 
#	test without a finer grain sleep.  (I know you can get finer grain
#	sleep with a three-argument select, but Time::HiRes knows this and
#	will provide you with sleep() if you have select().  Presumably, 
#	it knows the tricks better than I do.)  So... if you can think of
#	a good way to test without getting sleep, testing patches are
#	welcome.

	if($@){
		plan skip_all	=>	"Time::HiRes isn't available on this system.";
	} else {
		plan tests	=>	3;
	}
}

use_ok('Tie::Hash::Expire');

my %res;
tie %res, 'Tie::Hash::Expire', {'expire_seconds' => 1.5};

$res{foo} = 'bar';
sleep 1.2;
is($res{foo},	'bar',	'fractional sleep lower than expiration');

sleep 0.4;
ok(!defined $res{foo},	'fractional sleep higher than expiration');