Alt-FFI-Raw-Platypus

 view release on metacpan or  search on metacpan

t/ffi_raw_memptr.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 'basic' => sub {

  my $greeting = "Hello\0World";

  my $buf = FFI::Raw::MemPtr->new_from_buf($greeting, length $greeting);

  my $got = $buf->to_perl_str;

  is $got, "Hello", "Without arguments, to_perl_str uses strlen() to determine the length";

  $got = $buf->to_perl_str(length $greeting);

  is $got, $greeting, "A length to to_perl_str() is honoured, and binary data is retrieved correctly";

  $got = $buf->to_perl_str(0);

  is $got, '', "A length of 0 to_perl_str() is handled correctly, returning an empty string";
};

subtest 'new' => sub {

  my $bar = FFI::Raw::MemPtr->new(20);
  isa_ok $bar, 'FFI::Raw::MemPtr';
  isa_ok $bar, 'FFI::Raw::Ptr';

};

subtest 'pointers' => sub {
  my $get_test_ptr_size = FFI::Raw->new(
    $shared, 'get_test_ptr_size', FFI::Raw::int
  );

  my $ptr1 = FFI::Raw::memptr($get_test_ptr_size->call);

  my $take_one_pointer = FFI::Raw->new(
    $shared, 'take_one_pointer',
    FFI::Raw::void, FFI::Raw::ptr
  );

  $take_one_pointer->call($ptr1);

  my $return_pointer = FFI::Raw->new($shared, 'return_pointer', FFI::Raw::ptr);
  my $ptr2 = $return_pointer->call;

  my $return_str_from_ptr = FFI::Raw->new(
    $shared, 'return_str_from_ptr',
    FFI::Raw::str, FFI::Raw::ptr
  );

  my $return_int_from_ptr = FFI::Raw->new(
    $shared, 'return_int_from_ptr',
    FFI::Raw::int, FFI::Raw::ptr
  );

  my $return_str_from_ptr_by_ref = FFI::Raw->new(
    $shared, 'return_str_from_ptr_by_ref',



( run in 0.898 second using v1.01-cache-2.11-cpan-ad19def0cd9 )