Data-Monad-CondVar
view release on metacpan or search on metacpan
lib/Data/Monad/CondVar.pm view on Meta::CPAN
our $VERSION = "0.06";
our @EXPORT = qw/as_cv cv_unit cv_zero cv_fail cv_flat_map_multi cv_map_multi
cv_sequence call_cc/;
sub _assert_cv($) {
$_[0]->ready and die "[BUG]It already has been ready";
$_[0];
}
sub as_cv(&) {
my $code = shift;
$code->(my $cv = AE::cv);
$cv;
}
sub cv_unit { AnyEvent::CondVar->unit(@_) }
sub cv_zero { AnyEvent::CondVar->zero(@_) }
sub cv_fail { AnyEvent::CondVar->fail(@_) }
sub cv_flat_map_multi(&@) { AnyEvent::CondVar->flat_map_multi(@_) }
sub cv_map_multi(&@) { AnyEvent::CondVar->map_multi(@_) }
sub cv_sequence { AnyEvent::CondVar->sequence(@_) }
sub call_cc(&) {
my $f = shift;
my $ret_cv = AE::cv;
my $skip = sub {
my @v = @_;
_assert_cv $ret_cv;
$ret_cv->send(@v);
return AE::cv; # nop
};
t/condvar/any.t view on Meta::CPAN
use strict;
use warnings;
use Data::Monad::CondVar;
use Test::More;
sub capture_warn(&) {
my $code = shift;
my @warns;
local $SIG{__WARN__} = sub { push @warns, @_ };
$code->();
return @warns;
}
{
t/condvar/cancel.t view on Meta::CPAN
use strict;
use warnings;
use Data::Monad::CondVar;
use Test::More;
sub _after_dot_4(&) {
my $code = shift;
return cv_unit->sleep(.04)->flat_map(sub {
cv_unit->sleep(.04)->map($code);
});
}
subtest 'flat_map_and_sleep' => sub {
{
my $shouldnt_reach;
my $cv = _after_dot_4 { $shouldnt_reach++ };
( run in 1.094 second using v1.01-cache-2.11-cpan-49f99fa48dc )