Alt-FFI-Raw-Platypus
view release on metacpan or search on metacpan
t/ffi_raw_callback.t view on Meta::CPAN
use Test2::V0 -no_srand => 1;
use Test2::Tools::FFI;
use lib 't/lib';
use FFI::Raw;
my($shared) = ffi->test->lib;
subtest 'callbacks' => sub {
my $take_one_int_callback = FFI::Raw->new(
$shared, 'take_one_int_callback',
FFI::Raw::void, FFI::Raw::ptr
);
my $func1 = sub {
my $num = shift;
is($num, 42);
};
my $cb1 = FFI::Raw::callback($func1, FFI::Raw::void, FFI::Raw::int);
$take_one_int_callback->call($cb1);
$take_one_int_callback->($cb1);
ok(1, "survived the call");
my $return_int_callback = FFI::Raw->new(
$shared, 'return_int_callback',
FFI::Raw::int, FFI::Raw::ptr
);
my $func2 = sub {
my $num = shift;
return $num + 15;
};
my $cb2 = FFI::Raw::callback($func2, FFI::Raw::int, FFI::Raw::int);
my $check1 = $return_int_callback->call($cb2);
my $check2 = $return_int_callback->($cb2);
ok(1, "survived the call");
is($check1, (42 + 15), "returned @{[ (42+15) ]}");
is($check2, (42 + 15), "returned @{[ (42+15) ]}");
sub func3 {
my $num = shift;
return $num + 15;
};
my $cb3 = FFI::Raw::callback(\&func3, FFI::Raw::int, FFI::Raw::int);
$check1 = $return_int_callback->call($cb3);
$check2 = $return_int_callback->($cb3);
ok(1, "survived the call (anonymous subroutine)");
is($check1, (42 + 15), "returned @{[ (42+15) ]}");
is($check2, (42 + 15), "returned @{[ (42+15) ]}");
my $str_value = "foo";
my $cb4 = FFI::Raw::callback(sub { $str_value }, FFI::Raw::str);
ok(1, "survived the call");
( run in 1.217 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )