use strict; use Test::More (tests => 32); BEGIN { use_ok("Data::Valve"); } { my $valve = Data::Valve->new( max_items => 5, interval => 3 ); # 5 items should succeed for( 1.. 5) { ok( $valve->try_push(), "try $_ should succeed" ); } ok( ! $valve->try_push(), "this try should fail" ); diag("sleeping for 3 seconds..."); sleep 3; ok( $valve->try_push(), "try after 3 seconds should work"); } { my $valve = Data::Valve->new( max_items => 5, interval => 3 ); # 5 items should succeed for( 1.. 5) { ok( $valve->try_push(), "try $_ should succeed" ); } ok( ! $valve->try_push(), "this try should fail" ); $valve->reset(); for( 1.. 5) { ok( $valve->try_push(), "try $_ should succeed" ); } } { my $valve = Data::Valve->new( max_items => 5, interval => 3 ); $valve->fill(); ok( ! $valve->try_push(), "this try should fail" ); } { my $valve = Data::Valve->new( max_items => 5, interval => 3 ); # 5 items should succeed for( 1.. 5) { ok( $valve->try_push(key => "foo"), "try $_ should succeed" ); } ok( ! $valve->try_push(key => "foo"), "this try should fail" ); ok( $valve->try_push(key => "bar"), "this try should succeed" ); diag("sleeping for 3 seconds..."); sleep 3; ok( $valve->try_push(key => "foo"), "try after 3 seconds should work"); } { my $valve = Data::Valve->new( max_items => 5, interval => 3, strict_interval => 1, ); ok( $valve->try_push(key => "foo"), "try 1 should succeed" ); ok(! $valve->try_push(key => "foo"), "try 2 should fail" ); diag("sleeping for 3 seconds..."); sleep 3; ok( $valve->try_push(key => "foo"), "try 3 should succeed" ); ok(! $valve->try_push(key => "foo"), "try 4 should fail" ); }