use strict; use warnings; use Test::More; use AnyEvent; use AnyEvent::Debounce; { my $sent = 0; my $done = AnyEvent->condvar; my $d = AnyEvent::Debounce->new( front_triggered => 0, always_reset_timer => 0, delay => 2, cb => sub { $done->send([@_]) }, ); my $sender; $sender = AnyEvent->timer( after => 0, interval => 0.1, cb => sub { $d->send($sent); undef $sender if ++$sent > 9; }); my $result = $done->recv; is $sent, 10, 'got 10 events before cb was called'; is_deeply $result, [map { [$_] } 0..9], 'got the events we expected'; } { my $sent = 0; my $done = AnyEvent->condvar; my $d = AnyEvent::Debounce->new( front_triggered => 0, always_reset_timer => 1, delay => 0.15, cb => sub { $done->send([@_]) }, ); my $sender; $sender = AnyEvent->timer( after => 0, interval => 0.1, cb => sub { $d->send($sent); undef $sender if ++$sent > 9; }); my $result = $done->recv; is $sent, 10, 'got 10 events before cb was called'; is_deeply $result, [map { [$_] } 0..9], 'got the events we expected'; } { my $sent = 0; my $got = 0; my $done = AnyEvent->condvar; my $d = AnyEvent::Debounce->new( front_triggered => 1, always_reset_timer => 0, delay => 1.5, cb => sub { $got++ }, ); $done->begin; my $waiter = AnyEvent->timer( after => 2, cb => sub { $done->end } ); $done->begin; my $sender; $sender = AnyEvent->timer( after => 0, interval => 0.1, cb => sub { $d->send($sent); if(++$sent > 9){ undef $sender; $done->end; } }); $done->recv; is $sent, 10, 'sent 10 events'; is $got, 1, 'got 1 event'; } { my $sent = 0; my $got = 0; my $done = AnyEvent->condvar; my $d = AnyEvent::Debounce->new( front_triggered => 1, always_reset_timer => 1, delay => 0.15, cb => sub { $got++ }, ); $done->begin; my $waiter = AnyEvent->timer( after => 2, cb => sub { $done->end } ); $done->begin; my $sender; $sender = AnyEvent->timer( after => 0, interval => 0.1, cb => sub { $d->send($sent); if(++$sent > 9){ undef $sender; $done->end; } }); $done->recv; is $sent, 10, 'sent 10 events'; is $got, 1, 'got 1 event'; } done_testing;