PATH=/usr/bin:/bin:/data/fly2400/cpanfly-5.24/var/megalib/bin Start 2019-06-21T02:09:33 ActivePerl-2400 CPAN-2.10 Reading '/data/fly2400/cpanfly-5.24/var/cpan/Metadata' Database was generated on Thu, 20 Jun 2019 04:55:17 GMT Checksum for /data/fly2400/cpanfly-5.24/var/cpan/sources/authors/id/P/PL/PLICEASE/FFI-Platypus-0.88.tar.gz ok FFI-Platypus-0.88 FFI-Platypus-0.88/README FFI-Platypus-0.88/Changes FFI-Platypus-0.88/SUPPORT FFI-Platypus-0.88/LICENSE FFI-Platypus-0.88/INSTALL FFI-Platypus-0.88/dist.ini FFI-Platypus-0.88/xs FFI-Platypus-0.88/xs/DL.xs FFI-Platypus-0.88/META.yml FFI-Platypus-0.88/MANIFEST FFI-Platypus-0.88/t FFI-Platypus-0.88/t/forks.t FFI-Platypus-0.88/t/gh117.t FFI-Platypus-0.88/xs/ABI.xs FFI-Platypus-0.88/xs/meta.c FFI-Platypus-0.88/xs/API.xs FFI-Platypus-0.88/META.json FFI-Platypus-0.88/author.yml FFI-Platypus-0.88/t/01_use.t FFI-Platypus-0.88/xs/windl.c FFI-Platypus-0.88/xs/names.c FFI-Platypus-0.88/xs/Type.xs FFI-Platypus-0.88/t/00_diag.t FFI-Platypus-0.88/t/app_fbx.t FFI-Platypus-0.88/t/threads.t FFI-Platypus-0.88/xs/custom.c FFI-Platypus-0.88/xs/havepm.c FFI-Platypus-0.88/inc FFI-Platypus-0.88/inc/mymm.pl FFI-Platypus-0.88/Makefile.PL FFI-Platypus-0.88/CONTRIBUTING FFI-Platypus-0.88/ffi FFI-Platypus-0.88/ffi/memory.c FFI-Platypus-0.88/t/ffi FFI-Platypus-0.88/t/ffi/meta.c FFI-Platypus-0.88/xs/closure.c FFI-Platypus-0.88/xs/complex.c FFI-Platypus-0.88/xs/Record.xs FFI-Platypus-0.88/t/ffi_probe.t FFI-Platypus-0.88/t/ffi_build.t FFI-Platypus-0.88/t/ffi/sint8.c FFI-Platypus-0.88/t/ffi/color.c FFI-Platypus-0.88/t/ffi/uint8.c FFI-Platypus-0.88/t/ffi/gh117.c FFI-Platypus-0.88/t/ffi/align.c FFI-Platypus-0.88/t/ffi/float.c FFI-Platypus-0.88/t/ffi/basic.c FFI-Platypus-0.88/xs/Closure.xs FFI-Platypus-0.88/t/type_uint8.t FFI-Platypus-0.88/t/type_sint8.t FFI-Platypus-0.88/t/type_float.t FFI-Platypus-0.88/t/ffi/string.c FFI-Platypus-0.88/t/ffi/uint64.c FFI-Platypus-0.88/t/ffi/uint32.c FFI-Platypus-0.88/t/ffi/record.c FFI-Platypus-0.88/t/ffi/sint32.c FFI-Platypus-0.88/t/ffi/uint16.c FFI-Platypus-0.88/t/ffi/sint64.c FFI-Platypus-0.88/t/ffi/sint16.c FFI-Platypus-0.88/t/ffi/double.c FFI-Platypus-0.88/xs/Internal.xs FFI-Platypus-0.88/xs/Function.xs FFI-Platypus-0.88/inc/mm-test.pl FFI-Platypus-0.88/maint FFI-Platypus-0.88/maint/cip-test FFI-Platypus-0.88/lib/FFI FFI-Platypus-0.88/lib/FFI/typemap FFI-Platypus-0.88/t/type_uint64.t FFI-Platypus-0.88/t/type_opaque.t FFI-Platypus-0.88/t/type_string.t FFI-Platypus-0.88/t/type_double.t FFI-Platypus-0.88/t/type_uint16.t FFI-Platypus-0.88/t/type_sint32.t FFI-Platypus-0.88/t/type_sint16.t FFI-Platypus-0.88/t/type_record.t FFI-Platypus-0.88/t/type_sint64.t FFI-Platypus-0.88/t/type_uint32.t FFI-Platypus-0.88/t/ffi/pointer.c FFI-Platypus-0.88/t/ffi/closure.c FFI-Platypus-0.88/t/ffi/memcmp4.c FFI-Platypus-0.88/inc/mm-build.pl FFI-Platypus-0.88/inc/mm-clean.pl FFI-Platypus-0.88/inc/probe FFI-Platypus-0.88/inc/probe/abi.c FFI-Platypus-0.88/xt/author FFI-Platypus-0.88/xt/author/eol.t FFI-Platypus-0.88/xt/author/pod.t FFI-Platypus-0.88/lib/FFI/Build.pm FFI-Platypus-0.88/lib/FFI/Probe.pm FFI-Platypus-0.88/examples FFI-Platypus-0.88/examples/pipe.pl FFI-Platypus-0.88/examples/char.pl FFI-Platypus-0.88/examples/zmq3.pl FFI-Platypus-0.88/examples/uuid.pl FFI-Platypus-0.88/examples/math.pl FFI-Platypus-0.88/examples/time.pl FFI-Platypus-0.88/t/ffi_platypus.t FFI-Platypus-0.88/t/ffi_build_mm.t FFI-Platypus-0.88/inc/mm-config.pl FFI-Platypus-0.88/inc/My FFI-Platypus-0.88/inc/My/Config.pm FFI-Platypus-0.88/include FFI-Platypus-0.88/include/ppport.h FFI-Platypus-0.88/Changes.FFI-Build FFI-Platypus-0.88/examples/bzip2.pl FFI-Platypus-0.88/xs/ClosureData.xs FFI-Platypus-0.88/inc/My/ConfigH.pm FFI-Platypus-0.88/include/libtest.h FFI-Platypus-0.88/examples/getpid.pl FFI-Platypus-0.88/examples/malloc.pl FFI-Platypus-0.88/examples/string.pl FFI-Platypus-0.88/examples/closure.c FFI-Platypus-0.88/examples/notify.pl FFI-Platypus-0.88/t/ffi/longdouble.c FFI-Platypus-0.88/xs/record_opaque.c FFI-Platypus-0.88/xs/record_string.c FFI-Platypus-0.88/xs/record_simple.c FFI-Platypus-0.88/inc/probe/alloca.c FFI-Platypus-0.88/inc/Alien FFI-Platypus-0.88/inc/Alien/psapi.pm FFI-Platypus-0.88/maint/generate-abw FFI-Platypus-0.88/xt/author/strict.t FFI-Platypus-0.88/xt/release FFI-Platypus-0.88/xt/release/fixme.t FFI-Platypus-0.88/lib/FFI/Platypus.pm FFI-Platypus-0.88/lib/FFI/Platypus.xs FFI-Platypus-0.88/lib/FFI/Build FFI-Platypus-0.88/lib/FFI/Build/MM.pm FFI-Platypus-0.88/examples/integer.pl FFI-Platypus-0.88/examples/archive.pl FFI-Platypus-0.88/examples/time_oo.pl FFI-Platypus-0.88/examples/closure.pl FFI-Platypus-0.88/t/type_longdouble.t FFI-Platypus-0.88/t/ffi_platypus_dl.t FFI-Platypus-0.88/t/ffi/align_fixed.c FFI-Platypus-0.88/t/ffi/align_array.c FFI-Platypus-0.88/inc/mm-config-pb.pl FFI-Platypus-0.88/inc/probe/complex.c FFI-Platypus-0.88/maint/cip-test-cpan FFI-Platypus-0.88/xt/author/no_tabs.t FFI-Platypus-0.88/xt/author/version.t FFI-Platypus-0.88/examples/var_array.c FFI-Platypus-0.88/t/ffi_probe_runner.t FFI-Platypus-0.88/t/ffi_build_file_c.t FFI-Platypus-0.88/t/ffi_platypus_api.t FFI-Platypus-0.88/t/ffi/string_array.c FFI-Platypus-0.88/t/ffi/align_string.c FFI-Platypus-0.88/xs/perl_math_int64.c FFI-Platypus-0.88/inc/mm-config-set.pl FFI-Platypus-0.88/maint/tt FFI-Platypus-0.88/maint/tt/accessor.tt FFI-Platypus-0.88/xt/release/changes.t FFI-Platypus-0.88/examples/var_array.pl FFI-Platypus-0.88/t/ffi_platypus_lang.t FFI-Platypus-0.88/t/ffi/complex_float.c FFI-Platypus-0.88/t/lib/Test FFI-Platypus-0.88/t/lib/Test/Cleanup.pm FFI-Platypus-0.88/inc/probe/bigendian.c FFI-Platypus-0.88/inc/My/ShareConfig.pm FFI-Platypus-0.88/maint/generate-readme FFI-Platypus-0.88/lib/FFI/Platypus FFI-Platypus-0.88/lib/FFI/Platypus/DL.pm FFI-Platypus-0.88/examples/win32_beep.pl FFI-Platypus-0.88/examples/get_uptime.pl FFI-Platypus-0.88/t/ffi_build_file_cxx.t FFI-Platypus-0.88/t/ffi_build_platform.t FFI-Platypus-0.88/t/type_complex_float.t FFI-Platypus-0.88/t/ffi/complex_double.c FFI-Platypus-0.88/t/lib/Test/Platypus.pm FFI-Platypus-0.88/inc/probe/longdouble.c FFI-Platypus-0.88/include/ffi_platypus.h FFI-Platypus-0.88/lib/FFI/Platypus/API.pm FFI-Platypus-0.88/lib/FFI/Build/File FFI-Platypus-0.88/lib/FFI/Build/File/C.pm FFI-Platypus-0.88/lib/FFI/Probe FFI-Platypus-0.88/lib/FFI/Probe/Runner.pm FFI-Platypus-0.88/examples/time_record.pl FFI-Platypus-0.88/t/ffi_platypus_buffer.t FFI-Platypus-0.88/t/ffi_platypus_record.t FFI-Platypus-0.88/t/ffi_platypus_lang_c.t FFI-Platypus-0.88/t/ffi_platypus_memory.t FFI-Platypus-0.88/t/type_complex_double.t FFI-Platypus-0.88/t/ffi_build_file_base.t FFI-Platypus-0.88/inc/probe/bigendian64.c FFI-Platypus-0.88/maint/cip-test-examples FFI-Platypus-0.88/lib/FFI/Platypus/Lang.pm FFI-Platypus-0.88/t/ffi_platypus_declare.t FFI-Platypus-0.88/t/ffi_platypus_closure.t FFI-Platypus-0.88/maint/cip-before-install FFI-Platypus-0.88/maint/run-after_build.pl FFI-Platypus-0.88/xt/author/pod_coverage.t FFI-Platypus-0.88/lib/FFI/Platypus/Type.pod FFI-Platypus-0.88/lib/FFI/Build/Platform.pm FFI-Platypus-0.88/lib/FFI/Build/File/CXX.pm FFI-Platypus-0.88/t/ffi_platypus_function.t FFI-Platypus-0.88/t/ffi_build_file_object.t FFI-Platypus-0.88/t/ffi_platypus_internal.t FFI-Platypus-0.88/t/ffi_platypus_lang_asm.t FFI-Platypus-0.88/inc/Alien/Base FFI-Platypus-0.88/inc/Alien/Base/Wrapper.pm FFI-Platypus-0.88/include/perl_math_int64.h FFI-Platypus-0.88/maint/run-before_build.pl FFI-Platypus-0.88/lib/FFI/Platypus/Record.pm FFI-Platypus-0.88/lib/FFI/Platypus/Memory.pm FFI-Platypus-0.88/lib/FFI/Platypus/Buffer.pm FFI-Platypus-0.88/lib/FFI/Platypus/Lang FFI-Platypus-0.88/lib/FFI/Platypus/Lang/C.pm FFI-Platypus-0.88/lib/FFI/Build/File/Base.pm FFI-Platypus-0.88/examples/closure-opaque.pl FFI-Platypus-0.88/t/ffi_build_file_library.t FFI-Platypus-0.88/inc/Alien/FFI FFI-Platypus-0.88/inc/Alien/FFI/pkgconfig.pm FFI-Platypus-0.88/lib/FFI/Platypus/Declare.pm FFI-Platypus-0.88/lib/FFI/Platypus/Closure.pm FFI-Platypus-0.88/t/ffi_probe_runner_result.t FFI-Platypus-0.88/t/ffi_platypus_lang_win32.t FFI-Platypus-0.88/include/ffi_platypus_guts.h FFI-Platypus-0.88/include/ffi_platypus_call.h FFI-Platypus-0.88/lib/FFI/Platypus/Function.pm FFI-Platypus-0.88/lib/FFI/Platypus/Internal.pm FFI-Platypus-0.88/lib/FFI/Platypus/Lang/ASM.pm FFI-Platypus-0.88/lib/FFI/Build/File/Object.pm FFI-Platypus-0.88/t/ffi_platypus_shareconfig.t FFI-Platypus-0.88/t/ffi_probe_runner_builder.t FFI-Platypus-0.88/inc/Alien/FFI/PkgConfigPP.pm FFI-Platypus-0.88/maint/tt/accessor_wrapper.tt FFI-Platypus-0.88/lib/FFI/Build/File/Library.pm FFI-Platypus-0.88/corpus/ffi_probe_runner FFI-Platypus-0.88/corpus/ffi_probe_runner/bar.c FFI-Platypus-0.88/corpus/ffi_probe_runner/foo.c FFI-Platypus-0.88/corpus/ffi_build/source FFI-Platypus-0.88/corpus/ffi_build/source/foo.c FFI-Platypus-0.88/lib/FFI/Platypus/Lang/Win32.pm FFI-Platypus-0.88/lib/FFI/Probe/Runner FFI-Platypus-0.88/lib/FFI/Probe/Runner/Result.pm FFI-Platypus-0.88/examples/list_integer_types.pl FFI-Platypus-0.88/corpus/ffi_build_file_c FFI-Platypus-0.88/corpus/ffi_build_file_c/foo2.c FFI-Platypus-0.88/corpus/ffi_build_file_c/foo1.c FFI-Platypus-0.88/maint/generate-record-accessor FFI-Platypus-0.88/lib/FFI/Platypus/ShareConfig.pm FFI-Platypus-0.88/lib/FFI/Probe/Runner/Builder.pm FFI-Platypus-0.88/examples/attach_from_pointer.pl FFI-Platypus-0.88/examples/win32_getSystemTime.pl FFI-Platypus-0.88/corpus/ffi_build/project2 FFI-Platypus-0.88/corpus/ffi_build/project2/bar.c FFI-Platypus-0.88/corpus/ffi_build_file_c/basic.c FFI-Platypus-0.88/xt/author/pod_spelling_common.t FFI-Platypus-0.88/xt/author/pod_spelling_system.t FFI-Platypus-0.88/t/ffi_platypus_record_tiearray.t FFI-Platypus-0.88/corpus/ffi_build_mm/lb2 FFI-Platypus-0.88/corpus/ffi_build_mm/lb2/hello2.c FFI-Platypus-0.88/corpus/ffi_build_mm/lb2/hello1.c FFI-Platypus-0.88/corpus/ffi_build_mm/lb1 FFI-Platypus-0.88/corpus/ffi_build_mm/lb1/hello2.c FFI-Platypus-0.88/corpus/ffi_build_mm/lb1/hello1.c FFI-Platypus-0.88/corpus/ffi_build/project1 FFI-Platypus-0.88/corpus/ffi_build/project1/foo2.c FFI-Platypus-0.88/corpus/ffi_build/project1/foo1.c FFI-Platypus-0.88/t/ffi_platypus_function_wrapper.t FFI-Platypus-0.88/t/ffi_platypus_type_stringarray.t FFI-Platypus-0.88/corpus/ffi_build_mm/lb1/hello.fbx FFI-Platypus-0.88/corpus/ffi_build_file_cxx FFI-Platypus-0.88/corpus/ffi_build_file_cxx/foo2.cpp FFI-Platypus-0.88/corpus/ffi_build_file_cxx/foo1.cxx FFI-Platypus-0.88/lib/FFI/Platypus/Record FFI-Platypus-0.88/lib/FFI/Platypus/Record/TieArray.pm FFI-Platypus-0.88/t/ffi_platypus_type_stringpointer.t FFI-Platypus-0.88/corpus/ffi_build_file_cxx/basic.cxx FFI-Platypus-0.88/lib/FFI/Platypus/Type FFI-Platypus-0.88/lib/FFI/Platypus/Type/StringArray.pm FFI-Platypus-0.88/corpus/ffi_build_file_base FFI-Platypus-0.88/corpus/ffi_build_file_base/basic.foo FFI-Platypus-0.88/corpus/ffi_build_mm/project1/ffi FFI-Platypus-0.88/corpus/ffi_build_mm/project1/ffi/x.c FFI-Platypus-0.88/corpus/ffi_build_mm/project1/ffi/z.c FFI-Platypus-0.88/corpus/ffi_build_mm/project1/ffi/y.c FFI-Platypus-0.88/Changes.FFI-Platypus-Type-StringArray FFI-Platypus-0.88/corpus/ffi_build/project-cxx FFI-Platypus-0.88/corpus/ffi_build/project-cxx/foo2.cpp FFI-Platypus-0.88/corpus/ffi_build/project-cxx/foo1.cxx FFI-Platypus-0.88/lib/FFI/Platypus/Type/StringPointer.pm FFI-Platypus-0.88/corpus/ffi_build_mm/project1/t/ffi FFI-Platypus-0.88/corpus/ffi_build_mm/project1/t/ffi/c.c FFI-Platypus-0.88/corpus/ffi_build_mm/project1/t/ffi/a.c FFI-Platypus-0.88/corpus/ffi_build_mm/project1/t/ffi/b.c FFI-Platypus-0.88/t/ffi_platypus_type_pointersizebuffer.t FFI-Platypus-0.88/corpus/ffi_build_file_c/include FFI-Platypus-0.88/corpus/ffi_build_file_c/include/myfoo.h FFI-Platypus-0.88/corpus/ffi_build_file_cxx/include FFI-Platypus-0.88/corpus/ffi_build_file_cxx/include/myfoo.h FFI-Platypus-0.88/lib/FFI/Platypus/Type/PointerSizeBuffer.pm Configuring P/PL/PLICEASE/FFI-Platypus-0.88.tar.gz with Makefile.PL >>> /data/fly2400/ap2400-300558/bin/perl-static Makefile.PL using already installed Alien::FFI (version 0.23) Checking if your kit is complete... Looks good Have /data/fly2400/cpanfly-5.24/var/megalib Want /home/fly2400/ap2400-300558/lib Your perl and your Config.pm seem to have different ideas about the architecture they are running on. Perl thinks: [megalib] Config says: [x86_64-linux-thread-multi] This may or may not cause problems. Please check your installation of perl if you have problems building this extension. Generating a Unix-style Makefile Writing Makefile for FFI::Platypus Writing MYMETA.yml and MYMETA.json PLICEASE/FFI-Platypus-0.88.tar.gz /data/fly2400/ap2400-300558/bin/perl-static Makefile.PL -- OK Running make for P/PL/PLICEASE/FFI-Platypus-0.88.tar.gz >>> make PR alien.ffi.class=Alien::FFI PR alien.ffi.version=3.2.1 PR alien.ffi.cflags=-I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include PR alien.ffi.libs=-L/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/../lib -lffi PR eumm.cc=['gcc'] PR eumm.inc=['-Iinclude','-I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include'] PR eumm.ccflags=['-D_REENTRANT','-D_GNU_SOURCE','-DUSE_SITECUSTOMIZE','-DPERL_RELOCATABLE_INCPUSH','-fno-merge-constants','-fwrapv','-fno-strict-aliasing','-pipe','-fstack-protector','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64'] PR eumm.cccdlflags=['-fPIC'] PR eumm.optimize=['-O2'] PR eumm.ld=['gcc'] PR eumm.ldflags=['-L/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/../lib','-fstack-protector'] PR eumm.lddlflags=['-L/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/../lib','-shared','-O2','-fstack-protector'] XX src/dlrun.c XX bin/ CC src/dlrun.c LD src/dlrun.o VV bin/dlrun UN src/dlrun.o PR header."stdlib.h"=1 PR header."stdint.h"=1 PR header."sys/types.h"=1 PR header."sys/stat.h"=1 PR header."unistd.h"=1 PR header."alloca.h"=1 PR header."dlfcn.h"=1 PR header."limits.h"=1 PR header."stddef.h"=1 PR header."wchar.h"=1 PR header."signal.h"=1 PR header."inttypes.h"=1 PR header."windows.h"=0 PR header."sys/cygwin.h"=0 PR header."string.h"=1 PR header."psapi.h"=0 PR header."stdio.h"=1 PR header."stdbool.h"=1 PR header."complex.h"=1 PR type.char.align=1 PR type.char.sign=signed PR type.char.size=1 PR type.signed char.align=1 PR type.signed char.sign=signed PR type.signed char.size=1 PR type.unsigned char.align=1 PR type.unsigned char.sign=unsigned PR type.unsigned char.size=1 PR type.short.align=2 PR type.short.sign=signed PR type.short.size=2 PR type.signed short.align=2 PR type.signed short.sign=signed PR type.signed short.size=2 PR type.unsigned short.align=2 PR type.unsigned short.sign=unsigned PR type.unsigned short.size=2 PR type.int.align=4 PR type.int.sign=signed PR type.int.size=4 PR type.signed int.align=4 PR type.signed int.sign=signed PR type.signed int.size=4 PR type.unsigned int.align=4 PR type.unsigned int.sign=unsigned PR type.unsigned int.size=4 PR type.long.align=8 PR type.long.sign=signed PR type.long.size=8 PR type.signed long.align=8 PR type.signed long.sign=signed PR type.signed long.size=8 PR type.unsigned long.align=8 PR type.unsigned long.sign=unsigned PR type.unsigned long.size=8 PR type.uint8_t.align=1 PR type.uint8_t.sign=unsigned PR type.uint8_t.size=1 PR type.int8_t.align=1 PR type.int8_t.sign=signed PR type.int8_t.size=1 PR type.uint16_t.align=2 PR type.uint16_t.sign=unsigned PR type.uint16_t.size=2 PR type.int16_t.align=2 PR type.int16_t.sign=signed PR type.int16_t.size=2 PR type.uint32_t.align=4 PR type.uint32_t.sign=unsigned PR type.uint32_t.size=4 PR type.int32_t.align=4 PR type.int32_t.sign=signed PR type.int32_t.size=4 PR type.uint64_t.align=8 PR type.uint64_t.sign=unsigned PR type.uint64_t.size=8 PR type.int64_t.align=8 PR type.int64_t.sign=signed PR type.int64_t.size=8 PR type.size_t.align=8 PR type.size_t.sign=unsigned PR type.size_t.size=8 PR type.ssize_t.align=8 PR type.ssize_t.sign=signed PR type.ssize_t.size=8 PR type.float.align=4 PR type.float.size=4 PR type.double.align=8 PR type.double.size=8 PR type.long double.align=16 PR type.long double.size=16 PR type.float complex.align=4 PR type.float complex.size=8 PR type.double complex.align=8 PR type.double complex.size=16 PR type.long double complex.align=16 PR type.long double complex.size=32 PR type.bool.align=1 PR type.bool.sign=unsigned PR type.bool.size=1 PR type._Bool.align=1 PR type._Bool.sign=unsigned PR type._Bool.size=1 PR type.pointer.align=8 PR type.pointer.size=8 PR type.uintptr_t.align=8 PR type.uintptr_t.sign=unsigned PR type.uintptr_t.size=8 PR type.intptr_t.align=8 PR type.intptr_t.sign=signed PR type.intptr_t.size=8 PR type.long long.align=8 PR type.long long.sign=signed PR type.long long.size=8 PR type.signed long long.align=8 PR type.signed long long.sign=signed PR type.signed long long.size=8 PR type.unsigned long long.align=8 PR type.unsigned long long.sign=unsigned PR type.unsigned long long.size=8 PR type.dev_t.align=8 PR type.dev_t.sign=unsigned PR type.dev_t.size=8 PR type.ino_t.align=8 PR type.ino_t.sign=unsigned PR type.ino_t.size=8 PR type.mode_t.align=4 PR type.mode_t.sign=unsigned PR type.mode_t.size=4 PR type.nlink_t.align=8 PR type.nlink_t.sign=unsigned PR type.nlink_t.size=8 PR type.uid_t.align=4 PR type.uid_t.sign=unsigned PR type.uid_t.size=4 PR type.gid_t.align=4 PR type.gid_t.sign=unsigned PR type.gid_t.size=4 PR type.off_t.align=8 PR type.off_t.sign=signed PR type.off_t.size=8 PR type.blksize_t.align=8 PR type.blksize_t.sign=signed PR type.blksize_t.size=8 PR type.blkcnt_t.align=8 PR type.blkcnt_t.sign=signed PR type.blkcnt_t.size=8 PR type.time_t.align=8 PR type.time_t.sign=signed PR type.time_t.size=8 PR type.ptrdiff_t.align=8 PR type.ptrdiff_t.sign=signed PR type.ptrdiff_t.size=8 PR type.wchar_t.align=4 PR type.wchar_t.sign=signed PR type.wchar_t.size=4 PR type.wint_t.align=4 PR type.wint_t.sign=unsigned PR type.wint_t.size=4 PR probe.abi=1 PR probe.alloca=1 PR probe.complex=0 PR probe.longdouble=1 PR abi.sysv=1 PR abi.unix64=2 PR abi.thiscall=3 PR abi.fastcall=4 PR abi.stdcall=5 PR abi.pascal=6 PR abi.register=7 PR abi.default_abi=2 PR abi.unix64=2 cp lib/FFI/typemap blib/lib/FFI/typemap cp lib/FFI/Platypus/Type.pod blib/lib/FFI/Platypus/Type.pod cp lib/FFI/Platypus/ShareConfig.pm blib/lib/FFI/Platypus/ShareConfig.pm cp lib/FFI/Platypus/Type/StringPointer.pm blib/lib/FFI/Platypus/Type/StringPointer.pm cp lib/FFI/Build/File/Library.pm blib/lib/FFI/Build/File/Library.pm cp lib/FFI/Platypus/DL.pm blib/lib/FFI/Platypus/DL.pm cp lib/FFI/Build/File/Object.pm blib/lib/FFI/Build/File/Object.pm cp lib/FFI/Build/Platform.pm blib/lib/FFI/Build/Platform.pm cp lib/FFI/Platypus.pm blib/lib/FFI/Platypus.pm cp lib/FFI/Platypus/Closure.pm blib/lib/FFI/Platypus/Closure.pm cp lib/FFI/Platypus/Type/PointerSizeBuffer.pm blib/lib/FFI/Platypus/Type/PointerSizeBuffer.pm cp lib/FFI/Platypus/Declare.pm blib/lib/FFI/Platypus/Declare.pm cp lib/FFI/Platypus/API.pm blib/lib/FFI/Platypus/API.pm cp lib/FFI/Build/MM.pm blib/lib/FFI/Build/MM.pm cp lib/FFI/Build/File/C.pm blib/lib/FFI/Build/File/C.pm cp lib/FFI/Platypus/Buffer.pm blib/lib/FFI/Platypus/Buffer.pm cp lib/FFI/Build/File/Base.pm blib/lib/FFI/Build/File/Base.pm cp lib/FFI/Platypus/Lang/Win32.pm blib/lib/FFI/Platypus/Lang/Win32.pm cp lib/FFI/Platypus/Lang/C.pm blib/lib/FFI/Platypus/Lang/C.pm cp lib/FFI/Platypus/Record/TieArray.pm blib/lib/FFI/Platypus/Record/TieArray.pm cp lib/FFI/Platypus/Lang/ASM.pm blib/lib/FFI/Platypus/Lang/ASM.pm cp lib/FFI/Platypus/Function.pm blib/lib/FFI/Platypus/Function.pm cp lib/FFI/Probe/Runner/Result.pm blib/lib/FFI/Probe/Runner/Result.pm cp lib/FFI/Build.pm blib/lib/FFI/Build.pm cp lib/FFI/Probe.pm blib/lib/FFI/Probe.pm cp lib/FFI/Probe/Runner/Builder.pm blib/lib/FFI/Probe/Runner/Builder.pm cp lib/FFI/Platypus/Memory.pm blib/lib/FFI/Platypus/Memory.pm cp lib/FFI/Platypus/Internal.pm blib/lib/FFI/Platypus/Internal.pm cp lib/FFI/Build/File/CXX.pm blib/lib/FFI/Build/File/CXX.pm cp lib/FFI/Platypus/Record.pm blib/lib/FFI/Platypus/Record.pm cp lib/FFI/Platypus/Type/StringArray.pm blib/lib/FFI/Platypus/Type/StringArray.pm cp lib/FFI/Probe/Runner.pm blib/lib/FFI/Probe/Runner.pm cp lib/FFI/Platypus/Lang.pm blib/lib/FFI/Platypus/Lang.pm Running Mkbootstrap for lib/FFI/Platypus () chmod 644 "lib/FFI/Platypus.bs" "/data/fly2400/ap2400-300558/bin/perl-static" -MExtUtils::Command::MM -e 'cp_nonempty' -- lib/FFI/Platypus.bs blib/arch/auto/FFI/Platypus/Platypus.bs 644 "/data/fly2400/ap2400-300558/bin/perl-static" "/data/fly2400/cpanfly-5.24/var/megalib/ExtUtils/xsubpp" -typemap '/home/fly2400/ap2400-300558/lib/ExtUtils/typemap' lib/FFI/Platypus.xs > lib/FFI/Platypus.xsc mv lib/FFI/Platypus.xsc lib/FFI/Platypus.c "/data/fly2400/ap2400-300558/bin/perl-static" "/data/fly2400/cpanfly-5.24/var/megalib/ExtUtils/xsubpp" -typemap '/home/fly2400/ap2400-300558/lib/ExtUtils/typemap' lib/FFI/Platypus.xs > lib/FFI/Platypus.xsc mv lib/FFI/Platypus.xsc lib/FFI/Platypus.c gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include \ -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 \ -DVERSION=\"0.88\" \ -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" lib/FFI/Platypus.c -o lib/FFI/Platypus.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/closure.c -o xs/closure.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/complex.c -o xs/complex.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/custom.c -o xs/custom.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/havepm.c -o xs/havepm.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/meta.c -o xs/meta.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/names.c -o xs/names.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/perl_math_int64.c -o xs/perl_math_int64.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/record_opaque.c -o xs/record_opaque.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/record_simple.c -o xs/record_simple.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/record_string.c -o xs/record_string.o gcc -c -Iinclude -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.88\" -DXS_VERSION=\"0.88\" -fPIC "-I/home/fly2400/ap2400-300558/lib/CORE" xs/windl.c -o xs/windl.o rm -f blib/arch/auto/FFI/Platypus/Platypus.so gcc -L/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/../lib -shared -O2 -fstack-protector -o blib/arch/auto/FFI/Platypus/Platypus.so lib/FFI/Platypus.o xs/closure.o xs/complex.o xs/custom.o xs/havepm.o xs/meta.o xs/names.o xs/perl_math_int64.o xs/record_opaque.o xs/record_simple.o xs/record_string.o xs/windl.o \ -L/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/../lib -lffi \ chmod 755 blib/arch/auto/FFI/Platypus/Platypus.so CC ffi/memory.c LD blib/lib/auto/share/dist/FFI-Platypus/lib/libplfill.so Manifying 32 pod documents PLICEASE/FFI-Platypus-0.88.tar.gz make -- OK Running make test >>> make test TEST_VERBOSE=1 "/data/fly2400/ap2400-300558/bin/perl-static" -MExtUtils::Command::MM -e 'cp_nonempty' -- lib/FFI/Platypus.bs blib/arch/auto/FFI/Platypus/Platypus.bs 644 CC t/ffi/align.c CC t/ffi/align_array.c CC t/ffi/align_fixed.c CC t/ffi/align_string.c CC t/ffi/basic.c CC t/ffi/closure.c CC t/ffi/color.c CC t/ffi/complex_double.c CC t/ffi/complex_float.c CC t/ffi/double.c CC t/ffi/float.c CC t/ffi/gh117.c CC t/ffi/longdouble.c CC t/ffi/memcmp4.c CC t/ffi/meta.c CC t/ffi/pointer.c CC t/ffi/record.c CC t/ffi/sint16.c CC t/ffi/sint32.c CC t/ffi/sint64.c CC t/ffi/sint8.c CC t/ffi/string.c CC t/ffi/string_array.c CC t/ffi/uint16.c CC t/ffi/uint32.c CC t/ffi/uint64.c CC t/ffi/uint8.c LD t/ffi/libtest.so PERL_DL_NONLAZY=1 "/data/fly2400/ap2400-300558/bin/perl-static" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(1, 'blib/lib', 'blib/arch')" t/*.t # # # # ACTIVEPERL_CONFIG_DISABLE=1 # HARNESS_ACTIVE=1 # HARNESS_IS_VERBOSE=1 # HARNESS_VERSION=3.36 # LANG=en_US.UTF-8 # PERL5LIB=/data/fly2400/cpanfly-5.24/var/tmp/cpan_build/FFI-Platypus-0.88-Aem0xf/blib/lib:/data/fly2400/cpanfly-5.24/var/tmp/cpan_build/FFI-Platypus-0.88-Aem0xf/blib/arch:/data/fly2400/cpanfly-5.24/var/megalib:/data/fly2400/cpanfly-5.24/var/megalib # PERL5OPT= # PERL5_CPANPLUS_IS_RUNNING=10281 # PERL5_CPAN_IS_RUNNING=10281 # PERL5_CPAN_IS_RUNNING_IN_RECURSION=7275,10281 # PERL_DL_NONLAZY=1 # PERL_MM_USE_DEFAULT=1 # SHELL=/bin/sh # # # # PERL5LIB path # /data/fly2400/cpanfly-5.24/var/tmp/cpan_build/FFI-Platypus-0.88-Aem0xf/blib/lib # /data/fly2400/cpanfly-5.24/var/tmp/cpan_build/FFI-Platypus-0.88-Aem0xf/blib/arch # /data/fly2400/cpanfly-5.24/var/megalib # /data/fly2400/cpanfly-5.24/var/megalib # # # # perl 5.024000 # Alien::Base 0.042 # Capture::Tiny 0.48 # ExtUtils::CBuilder 0.280225 # ExtUtils::MakeMaker 7.16 # ExtUtils::ParseXS 3.35 # FFI::CheckLib 0.24 # IPC::Cmd 1.02 # JSON::PP 4.03 # List::Util 1.5 # PkgConfig 0.23026 # Test::More 1.302164 # constant 1.33 # # # # mode : already-installed # Alien::FFI->VERSION = 0.23 # Alien::FFI->install_type = share # Alien::FFI->cflags = -I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include # Alien::FFI->libs = -L/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/../lib -lffi # Alien::FFI->version = 3.2.1 # my_configure = %{configure} --disable-shared --enable-static --disable-builddir # # # # ffi.platypus.memory.strdup_impl =libc # ffi.platypus.memory.strndup_impl=libc # # # # Types: # double : double, float complex # float : float # longdouble : double complex, long double, long double complex # sint16 : int16_t, short, signed short # sint32 : int, int32_t, signed int, wchar_t # sint64 : blkcnt_t, blksize_t, int64_t, intptr_t, long, long long, off_t, ptrdiff_t, signed long, signed long long, ssize_t, time_t # sint8 : char, int8_t, signed char # uint16 : uint16_t, unsigned short, ushort # uint32 : gid_t, mode_t, uid_t, uint, uint32_t, unsigned int, wint_t # uint64 : dev_t, ino_t, nlink_t, size_t, uint64_t, uintptr_t, ulong, unsigned long, unsigned long long # uint8 : bool, uchar, uint8_t, unsigned char # # # # ABIs: # default_abi 2 # fastcall 4 # pascal 6 # register 7 # stdcall 5 # sysv 1 # thiscall 3 # unix64 2 # # # # Probes: # alloca 1 # longdouble 1 # bigendian 0 # abi 1 # bigendian64 0 # # # # CPU Info: # model name : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz # flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc up rep_good nopl xtopology nonstop_tsc pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx lahf_lm # address sizes : 46 bits physical, 48 bits virtual # # # # No LSB modules are available. # Distributor ID: Ubuntu # Description: Ubuntu 12.04 LTS # Release: 12.04 # Codename: precise # # # # [PLATFORM] # osname : linux # cc : gcc # cxx : g++ # for : --- # ld : gcc # ccflags : -fPIC -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 # ldflags : -shared -O2 -fstack-protector # object suffix : .o # library prefix : lib # library suffix : .so # cc mm works : -MM # # # t/00_diag.t .............................. 1..1 ok 1 - okay ok t/01_use.t ............................... ok 1 - require FFI::Build; ok 2 - require FFI::Build::File::Base; ok 3 - require FFI::Build::File::C; ok 4 - require FFI::Build::File::CXX; ok 5 - require FFI::Build::File::Library; ok 6 - require FFI::Build::File::Object; ok 7 - require FFI::Build::MM; ok 8 - require FFI::Build::Platform; ok 9 - require FFI::Platypus; ok 10 - require FFI::Platypus::API; ok 11 - require FFI::Platypus::Buffer; ok 12 - require FFI::Platypus::Closure; ok 13 - require FFI::Platypus::DL; ok 14 - require FFI::Platypus::Declare; ok 15 - require FFI::Platypus::Function; ok 16 - require FFI::Platypus::Internal; ok 17 - require FFI::Platypus::Lang; ok 18 - require FFI::Platypus::Lang::ASM; ok 19 - require FFI::Platypus::Lang::C; ok 20 - require FFI::Platypus::Lang::Win32; ok 21 - require FFI::Platypus::Memory; ok 22 - require FFI::Platypus::Record; ok 23 - require FFI::Platypus::Record::TieArray; ok 24 - require FFI::Platypus::ShareConfig; ok 25 - require FFI::Platypus::Type::PointerSizeBuffer; ok 26 - require FFI::Platypus::Type::StringArray; ok 27 - require FFI::Platypus::Type::StringPointer; ok 28 - require FFI::Probe; ok 29 - require FFI::Probe::Runner; ok 30 - require FFI::Probe::Runner::Builder; ok 31 - require FFI::Probe::Runner::Result; ok 32 - test for FFI::Build ok 33 - test for FFI::Build::File::Base ok 34 - test for FFI::Build::File::C ok 35 - test for FFI::Build::File::CXX ok 36 - test for FFI::Build::File::Library ok 37 - test for FFI::Build::File::Object ok 38 - test for FFI::Build::MM ok 39 - test for FFI::Build::Platform ok 40 - test for FFI::Platypus ok 41 - test for FFI::Platypus::API ok 42 - test for FFI::Platypus::Buffer ok 43 - test for FFI::Platypus::Closure ok 44 - test for FFI::Platypus::DL ok 45 - test for FFI::Platypus::Declare ok 46 - test for FFI::Platypus::Function ok 47 - test for FFI::Platypus::Internal ok 48 - test for FFI::Platypus::Lang ok 49 - test for FFI::Platypus::Lang::ASM ok 50 - test for FFI::Platypus::Lang::C ok 51 - test for FFI::Platypus::Lang::Win32 ok 52 - test for FFI::Platypus::Memory ok 53 - test for FFI::Platypus::Record ok 54 - test for FFI::Platypus::Record::TieArray ok 55 - test for FFI::Platypus::ShareConfig ok 56 - test for FFI::Platypus::Type::PointerSizeBuffer ok 57 - test for FFI::Platypus::Type::StringArray ok 58 - test for FFI::Platypus::Type::StringPointer ok 59 - test for FFI::Probe ok 60 - test for FFI::Probe::Runner ok 61 - test for FFI::Probe::Runner::Builder ok 62 - test for FFI::Probe::Runner::Result 1..62 ok t/app_fbx.t .............................. ok 1 1..1 ok t/ffi_build.t ............................ # Subtest: basic ok 1 - An object of class 'FFI::Build' isa 'FFI::Build' ok 2 - foo is somewhere in the native name for the lib # lib.file.path = ./libfoo.so ok 3 - dir is a dir ok 4 - An object of class 'FFI::Build::Platform' isa 'FFI::Build::Platform' ok 5 - An object of class 'FFI::Build::File::C' isa 'FFI::Build::File::C' 1..5 ok 1 - basic # Subtest: file classes ok 1 - at least one # class = FFI::Build::File::C # class = FFI::Build::File::CXX # class = FFI::Build::File::Library # class = FFI::Build::File::Object # class = FFI::Build::File::Foo1 # class = FFI::Build::File::Foo2 1..1 ok 2 - file classes # Subtest: build # Subtest: name # corpus/ffi_build/project1/foo1.c # corpus/ffi_build/project1/foo2.c ok 1 - no error # +gcc -fPIC -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -c corpus/ffi_build/project1/foo1.c -o corpus/ffi_build/project1/tmpbuild.tmpbuild.11095.1561108199/foo1.c.o # +gcc -fPIC -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -c corpus/ffi_build/project1/foo2.c -o corpus/ffi_build/project1/tmpbuild.tmpbuild.11095.1561108199/foo2.c.o # +gcc -shared -O2 -fstack-protector corpus/ffi_build/project1/tmpbuild.tmpbuild.11095.1561108199/foo1.c.o corpus/ffi_build/project1/tmpbuild.tmpbuild.11095.1561108199/foo2.c.o -o corpus/ffi_build/project1/tmpbuild.UKCswn/libfoo.so ok 2 ok 3 1..3 ok 1 - name # Subtest: object # corpus/ffi_build/project1/foo1.c # corpus/ffi_build/project1/foo2.c ok 1 - no error # +gcc -shared -O2 -fstack-protector corpus/ffi_build/project1/_build/foo1.c.o corpus/ffi_build/project1/_build/foo2.c.o -o corpus/ffi_build/project1/tmpbuild.IYVdtA/libfoo.so ok 2 ok 3 1..3 ok 2 - object # Subtest: array # corpus/ffi_build/project1/foo1.c # corpus/ffi_build/project1/foo2.c ok 1 - no error # +gcc -fPIC -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -c corpus/ffi_build/project1/foo1.c -o corpus/ffi_build/project1/tmpbuild.tmpbuild.11095.1561108199/foo1.c.o # +gcc -fPIC -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -c corpus/ffi_build/project1/foo2.c -o corpus/ffi_build/project1/tmpbuild.tmpbuild.11095.1561108199/foo2.c.o # +gcc -shared -O2 -fstack-protector corpus/ffi_build/project1/tmpbuild.tmpbuild.11095.1561108199/foo1.c.o corpus/ffi_build/project1/tmpbuild.tmpbuild.11095.1561108199/foo2.c.o -o corpus/ffi_build/project1/tmpbuild.R8ob31/libfoo.so ok 2 ok 3 1..3 ok 3 - array 1..3 ok 3 - build # Subtest: build c++ # corpus/ffi_build/project-cxx/foo1.cxx # corpus/ffi_build/project-cxx/foo2.cpp ok 1 - no error # +g++ -fPIC -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -c corpus/ffi_build/project-cxx/foo1.cxx -o corpus/ffi_build/project-cxx/tmpbuild.11095.1561108199/foo1.o # +g++ -fPIC -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -c corpus/ffi_build/project-cxx/foo2.cpp -o corpus/ffi_build/project-cxx/tmpbuild.11095.1561108199/foo2.o # +g++ -shared -O2 -fstack-protector corpus/ffi_build/project-cxx/tmpbuild.11095.1561108199/foo1.o corpus/ffi_build/project-cxx/tmpbuild.11095.1561108199/foo2.o -o corpus/ffi_build/project-cxx/tmpbuild.DLbmZ1/libfoo.so ok 2 - foo1 found ok 3 - foo2 found ok 4 ok 5 1..5 ok 4 - build c++ # Subtest: alien 1..0 # SKIP Test requires Acme::Alien::DontPanic 1.03 ok 5 # skip Test requires Acme::Alien::DontPanic 1.03 1..5 ok t/ffi_build_file_base.t .................. # Subtest: basic # Subtest: basic usage ok 1 # error = content is required at t/ffi_build_file_base.t line 18. 1..1 ok 1 - basic usage # Subtest: array filename ok 1 - An object of class 'FFI::Build::File::Foo' isa 'FFI::Build::File::Base' ok 2 - An object of class 'FFI::Build::File::Foo' isa 'FFI::Build::File::Foo' ok 3 - stringifies to path ok 4 ok 5 - is_temp ok 6 - basename ok 7 - dirname # dirname = corpus/ffi_build_file_base ok 8 - No forward slashes! ok 9 - native name # native = corpus/ffi_build_file_base/basic.foo 1..9 ok 2 - array filename # Subtest: string filename ok 1 - An object of class 'FFI::Build::File::Foo' isa 'FFI::Build::File::Base' ok 2 - An object of class 'FFI::Build::File::Foo' isa 'FFI::Build::File::Foo' ok 3 ok 4 - is_temp ok 5 - No forward slashes! 1..5 ok 3 - string filename # Subtest: string ref ok 1 - An object of class 'FFI::Build::File::Foo' isa 'FFI::Build::File::Base' ok 2 - An object of class 'FFI::Build::File::Foo' isa 'FFI::Build::File::Foo' ok 3 - has the correct extension ok 4 - is_temp ok 5 # path: ffi_build_f92Dh_.foo ok 6 - No forward slashes! ok 7 - file exists ok 8 - file is removed after destroy 1..8 ok 4 - string ref # Subtest: string ref keep ok 1 ok 2 - file exists ok 3 - No forward slashes! ok 4 - file exists after undef 1..4 ok 5 - string ref keep 1..5 ok 1 - basic 1..1 ok t/ffi_build_file_c.t ..................... # Subtest: basic ok 1 - An object of class 'FFI::Build::File::C' isa 'FFI::Build::File::C' ok 2 - An object of class 'FFI::Build::File::C' isa 'FFI::Build::File::Base' ok 3 ok 4 1..4 ok 1 - basic # Subtest: compile ok 1 - An object of class 'FFI::Build::File::Object' isa 'FFI::Build::File::Object' ok 2 1..2 ok 2 - compile # Subtest: headers ok 1 - no die ok 2 - dep is afile: corpus/ffi_build_file_c/foo2.c ok 3 - dep is afile: corpus/ffi_build_file_c/include/myfoo.h 1..3 ok 3 - headers 1..3 ok t/ffi_build_file_cxx.t ................... # Subtest: basic ok 1 - An object of class 'FFI::Build::File::CXX' isa 'FFI::Build::File::CXX' ok 2 - An object of class 'FFI::Build::File::CXX' isa 'FFI::Build::File::C' ok 3 - An object of class 'FFI::Build::File::CXX' isa 'FFI::Build::File::Base' ok 4 ok 5 1..5 ok 1 - basic # Subtest: compile ok 1 - An object of class 'FFI::Build::File::Object' isa 'FFI::Build::File::Object' ok 2 1..2 ok 2 - compile # Subtest: headers ok 1 - no die ok 2 - dep is afile: corpus/ffi_build_file_cxx/foo2.cpp ok 3 - dep is afile: corpus/ffi_build_file_cxx/include/myfoo.h 1..3 ok 3 - headers 1..3 ok t/ffi_build_file_library.t ............... # Subtest: basic ok 1 ok 2 # path = corpus/basic.so 1..2 ok 1 - basic 1..1 ok t/ffi_build_file_object.t ................ # Subtest: basic ok 1 ok 2 # path = corpus/basic.o 1..2 ok 1 - basic 1..1 ok t/ffi_build_mm.t ......................... # Subtest: basic ok 1 - An object of class 'FFI::Build::MM' isa 'FFI::Build::MM' ok 2 ok 3 ok 4 # Subtest: build with fbx file ok 1 - An object of class 'FFI::Build' isa 'FFI::Build' ok 2 1..2 ok 5 - build with fbx file # Subtest: build with default ok 1 - An object of class 'FFI::Build' isa 'FFI::Build' ok 2 1..2 ok 6 - build with default ok 7 # [postamble] # .PHONY: fbx_build ffi fbx_test ffi-test fbc_clean ffi-clean # # realclean :: fbx_clean # # fbx_clean ffi-clean: # $(FULLPERL) -MFFI::Build::MM=cmd -e fbx_clean # # pure_all :: fbx_build # # fbx_build ffi: # $(FULLPERL) -MFFI::Build::MM=cmd -e fbx_build # # subdirs-test_dynamic subdirs-test_static subdirs-test :: fbx_test # # fbx_test ffi-test: # $(FULLPERL) -MFFI::Build::MM=cmd -e fbx_test # # ok 8 ok 9 1..9 ok 1 - basic # Subtest: with a build! # Subtest: namespace is clean ok 1 - fbx_build not imported yet ok 2 - fbx_test not imported yet ok 3 - fbx_clean not imported yet 1..3 ok 1 - namespace is clean # Subtest: perl Makefile.PL ok 1 1..1 ok 2 - perl Makefile.PL # Subtest: import ok 1 - fbx_build not imported yet ok 2 - fbx_test not imported yet ok 3 - fbx_clean not imported yet 1..3 ok 3 - import # Subtest: make # CC ffi/x.c # CC ffi/y.c # CC ffi/z.c # LD blib/lib/auto/share/dist/Crock-O-Stimpy/lib/libCrock-O-Stimpy.so ok 1 ok 2 ok 3 1..3 ok 4 - make # Subtest: make test # CC t/ffi/a.c # CC t/ffi/b.c # CC t/ffi/c.c # LD t/ffi/_build/libtest.so ok 1 1..1 ok 5 - make test # Subtest: make clean ok 1 1..1 ok 6 - make clean 1..6 ok 2 - with a build! # Subtest: alien 1..0 # SKIP todo ok 3 # skip todo 1..3 ok t/ffi_build_platform.t ................... # Subtest: basic ok 1 - An object of class 'FFI::Build::Platform' isa 'FFI::Build::Platform' # osname : linux # cc : gcc # cxx : g++ # for : --- # ld : gcc # ccflags : -fPIC -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 # ldflags : -shared -O2 -fstack-protector # object suffix : .o # library prefix : lib # library suffix : .so # cc mm works : -MM 1..1 ok 1 - basic # Subtest: cc mm works # CC (checkfor -MM) ok 1 # cc_mm_works = -MM 1..1 ok 2 - cc mm works 1..2 ok t/ffi_platypus.t ......................... # Subtest: constructor # Subtest: basic ok 1 - An object of class 'FFI::Platypus' isa 'FFI::Platypus' 1..1 ok 1 - basic # Subtest: no arguments ok 1 - 'FFI::Platypus.new' isa 'FFI::Platypus' ok 2 - ffi.lib 1..2 ok 2 - no arguments # Subtest: with single lib ok 1 - 'FFI::Platypus.new' isa 'FFI::Platypus' ok 2 - ffi.lib 1..2 ok 3 - with single lib # Subtest: with multiple lib ok 1 - 'FFI::Platypus.new' isa 'FFI::Platypus' ok 2 - ffi.lib 1..2 ok 4 - with multiple lib 1..4 ok 1 - constructor # Subtest: abi ok 1 - has a default ABI # Subtest: pascal ok 1 - string ok 2 - integer 1..2 ok 2 - pascal # Subtest: sysv ok 1 - string ok 2 - integer 1..2 ok 3 - sysv # Subtest: thiscall ok 1 - string ok 2 - integer 1..2 ok 4 - thiscall # Subtest: default_abi ok 1 - string ok 2 - integer 1..2 ok 5 - default_abi # Subtest: register ok 1 - string ok 2 - integer 1..2 ok 6 - register # Subtest: fastcall ok 1 - string ok 2 - integer 1..2 ok 7 - fastcall # Subtest: stdcall ok 1 - string ok 2 - integer 1..2 ok 8 - stdcall # Subtest: unix64 ok 1 - string ok 2 - integer 1..2 ok 9 - unix64 # Subtest: bogus ok 1 - string ok 2 - integer 1..2 ok 10 - bogus 1..10 ok 2 - abi # Subtest: alignof # Subtest: ffi types ok 1 - alignof sint8 = 1 ok 2 - alignof sint8 [2] = 1 ok 3 - alignof sint8 * = 8 ok 4 - alignof custom_sint8 = 1 ok 5 - alignof uint8 = 1 ok 6 - alignof uint8 [2] = 1 ok 7 - alignof uint8 * = 8 ok 8 - alignof custom_uint8 = 1 ok 9 - alignof sint16 = 2 ok 10 - alignof sint16 [2] = 2 ok 11 - alignof sint16 * = 8 ok 12 - alignof custom_sint16 = 2 ok 13 - alignof uint16 = 2 ok 14 - alignof uint16 [2] = 2 ok 15 - alignof uint16 * = 8 ok 16 - alignof custom_uint16 = 2 ok 17 - alignof sint32 = 4 ok 18 - alignof sint32 [2] = 4 ok 19 - alignof sint32 * = 8 ok 20 - alignof custom_sint32 = 4 ok 21 - alignof uint32 = 4 ok 22 - alignof uint32 [2] = 4 ok 23 - alignof uint32 * = 8 ok 24 - alignof custom_uint32 = 4 ok 25 - alignof sint64 = 8 ok 26 - alignof sint64 [2] = 8 ok 27 - alignof sint64 * = 8 ok 28 - alignof custom_sint64 = 8 ok 29 - alignof uint64 = 8 ok 30 - alignof uint64 [2] = 8 ok 31 - alignof uint64 * = 8 ok 32 - alignof custom_uint64 = 8 ok 33 - alignof float = 4 ok 34 - alignof float [2] = 4 ok 35 - alignof float * = 8 ok 36 - alignof custom_float = 4 ok 37 - alignof double = 8 ok 38 - alignof double [2] = 8 ok 39 - alignof double * = 8 ok 40 - alignof custom_double = 8 ok 41 - alignof opaque = 8 ok 42 - alignof opaque [2] = 8 ok 43 - alignof opaque * = 8 ok 44 - alignof custom_opaque = 8 ok 45 - alignof string = 8 1..45 ok 1 - ffi types # Subtest: aliases ok 1 - alignof ushort = 2 ok 2 - alignof foo = 2 1..2 ok 2 - aliases # Subtest: closure ok 1 - sizeof closure_t = 8 1..1 ok 3 - closure # Subtest: record ok 1 # {'ffi_type' => 'pointer','ref' => 0,'size' => 22,'type' => 'record','type_code' => 2308} 1..1 ok 4 - record 1..4 ok 3 - alignof # Subtest: custom type # Subtest: float ok 1 - ffi.custom_type 1 # {'float_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'float','size' => 4,'type' => 'custom_perl','type_code' => 16451}} ok 2 - ffi.custom_type 1 # {'float_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'float','size' => 4,'type' => 'custom_perl','type_code' => 16451}} ok 3 - ffi.custom_type 1 # {'float_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'float','size' => 4,'type' => 'custom_perl','type_code' => 16451}} ok 4 - ffi.custom_type 1 # {'float_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'float','size' => 4,'type' => 'custom_perl','type_code' => 16451}} ok 5 - ffi.custom_type 1 # {'float_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'float','size' => 4,'type' => 'custom_perl','type_code' => 16451}} ok 6 - ffi.custom_type 1 # {'float_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'float','size' => 4,'type' => 'custom_perl','type_code' => 16451}} 1..6 ok 1 - float # Subtest: double ok 1 - ffi.custom_type 1 # {'double_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'double','size' => 8,'type' => 'custom_perl','type_code' => 16452}} ok 2 - ffi.custom_type 1 # {'double_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'double','size' => 8,'type' => 'custom_perl','type_code' => 16452}} ok 3 - ffi.custom_type 1 # {'double_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'double','size' => 8,'type' => 'custom_perl','type_code' => 16452}} ok 4 - ffi.custom_type 1 # {'double_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'double','size' => 8,'type' => 'custom_perl','type_code' => 16452}} ok 5 - ffi.custom_type 1 # {'double_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'double','size' => 8,'type' => 'custom_perl','type_code' => 16452}} ok 6 - ffi.custom_type 1 # {'double_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'float','ffi_type' => 'double','size' => 8,'type' => 'custom_perl','type_code' => 16452}} 1..6 ok 2 - double # Subtest: opaque ok 1 - ffi.custom_type 1 # {'opaque_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'opaque','ffi_type' => 'pointer','size' => 8,'type' => 'custom_perl','type_code' => 16644}} ok 2 - ffi.custom_type 1 # {'opaque_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'opaque','ffi_type' => 'pointer','size' => 8,'type' => 'custom_perl','type_code' => 16644}} ok 3 - ffi.custom_type 1 # {'opaque_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'opaque','ffi_type' => 'pointer','size' => 8,'type' => 'custom_perl','type_code' => 16644}} ok 4 - ffi.custom_type 1 # {'opaque_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'opaque','ffi_type' => 'pointer','size' => 8,'type' => 'custom_perl','type_code' => 16644}} ok 5 - ffi.custom_type 1 # {'opaque_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'opaque','ffi_type' => 'pointer','size' => 8,'type' => 'custom_perl','type_code' => 16644}} ok 6 - ffi.custom_type 1 # {'opaque_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'opaque','ffi_type' => 'pointer','size' => 8,'type' => 'custom_perl','type_code' => 16644}} 1..6 ok 3 - opaque # Subtest: uint8 ok 1 - ffi.custom_type 1 # {'uint8_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint8','sign' => 0,'size' => 1,'type' => 'custom_perl','type_code' => 16417}} ok 2 - ffi.custom_type 1 # {'uint8_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint8','sign' => 0,'size' => 1,'type' => 'custom_perl','type_code' => 16417}} ok 3 - ffi.custom_type 1 # {'uint8_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint8','sign' => 0,'size' => 1,'type' => 'custom_perl','type_code' => 16417}} ok 4 - ffi.custom_type 1 # {'uint8_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint8','sign' => 0,'size' => 1,'type' => 'custom_perl','type_code' => 16417}} ok 5 - ffi.custom_type 1 # {'uint8_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint8','sign' => 0,'size' => 1,'type' => 'custom_perl','type_code' => 16417}} ok 6 - ffi.custom_type 1 # {'uint8_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint8','sign' => 0,'size' => 1,'type' => 'custom_perl','type_code' => 16417}} 1..6 ok 4 - uint8 # Subtest: sint8 ok 1 - ffi.custom_type 1 # {'sint8_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 1,'type' => 'custom_perl','type_code' => 16401}} ok 2 - ffi.custom_type 1 # {'sint8_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 1,'type' => 'custom_perl','type_code' => 16401}} ok 3 - ffi.custom_type 1 # {'sint8_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 1,'type' => 'custom_perl','type_code' => 16401}} ok 4 - ffi.custom_type 1 # {'sint8_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 1,'type' => 'custom_perl','type_code' => 16401}} ok 5 - ffi.custom_type 1 # {'sint8_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 1,'type' => 'custom_perl','type_code' => 16401}} ok 6 - ffi.custom_type 1 # {'sint8_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 1,'type' => 'custom_perl','type_code' => 16401}} 1..6 ok 5 - sint8 # Subtest: uint16 ok 1 - ffi.custom_type 1 # {'uint16_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint16','sign' => 0,'size' => 2,'type' => 'custom_perl','type_code' => 16418}} ok 2 - ffi.custom_type 1 # {'uint16_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint16','sign' => 0,'size' => 2,'type' => 'custom_perl','type_code' => 16418}} ok 3 - ffi.custom_type 1 # {'uint16_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint16','sign' => 0,'size' => 2,'type' => 'custom_perl','type_code' => 16418}} ok 4 - ffi.custom_type 1 # {'uint16_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint16','sign' => 0,'size' => 2,'type' => 'custom_perl','type_code' => 16418}} ok 5 - ffi.custom_type 1 # {'uint16_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint16','sign' => 0,'size' => 2,'type' => 'custom_perl','type_code' => 16418}} ok 6 - ffi.custom_type 1 # {'uint16_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint16','sign' => 0,'size' => 2,'type' => 'custom_perl','type_code' => 16418}} 1..6 ok 6 - uint16 # Subtest: sint16 ok 1 - ffi.custom_type 1 # {'sint16_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint16','sign' => 1,'size' => 2,'type' => 'custom_perl','type_code' => 16402}} ok 2 - ffi.custom_type 1 # {'sint16_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint16','sign' => 1,'size' => 2,'type' => 'custom_perl','type_code' => 16402}} ok 3 - ffi.custom_type 1 # {'sint16_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint16','sign' => 1,'size' => 2,'type' => 'custom_perl','type_code' => 16402}} ok 4 - ffi.custom_type 1 # {'sint16_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint16','sign' => 1,'size' => 2,'type' => 'custom_perl','type_code' => 16402}} ok 5 - ffi.custom_type 1 # {'sint16_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint16','sign' => 1,'size' => 2,'type' => 'custom_perl','type_code' => 16402}} ok 6 - ffi.custom_type 1 # {'sint16_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint16','sign' => 1,'size' => 2,'type' => 'custom_perl','type_code' => 16402}} 1..6 ok 7 - sint16 # Subtest: uint32 ok 1 - ffi.custom_type 1 # {'uint32_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint32','sign' => 0,'size' => 4,'type' => 'custom_perl','type_code' => 16419}} ok 2 - ffi.custom_type 1 # {'uint32_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint32','sign' => 0,'size' => 4,'type' => 'custom_perl','type_code' => 16419}} ok 3 - ffi.custom_type 1 # {'uint32_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint32','sign' => 0,'size' => 4,'type' => 'custom_perl','type_code' => 16419}} ok 4 - ffi.custom_type 1 # {'uint32_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint32','sign' => 0,'size' => 4,'type' => 'custom_perl','type_code' => 16419}} ok 5 - ffi.custom_type 1 # {'uint32_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint32','sign' => 0,'size' => 4,'type' => 'custom_perl','type_code' => 16419}} ok 6 - ffi.custom_type 1 # {'uint32_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint32','sign' => 0,'size' => 4,'type' => 'custom_perl','type_code' => 16419}} 1..6 ok 8 - uint32 # Subtest: sint32 ok 1 - ffi.custom_type 1 # {'sint32_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'custom_perl','type_code' => 16403}} ok 2 - ffi.custom_type 1 # {'sint32_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'custom_perl','type_code' => 16403}} ok 3 - ffi.custom_type 1 # {'sint32_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'custom_perl','type_code' => 16403}} ok 4 - ffi.custom_type 1 # {'sint32_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'custom_perl','type_code' => 16403}} ok 5 - ffi.custom_type 1 # {'sint32_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'custom_perl','type_code' => 16403}} ok 6 - ffi.custom_type 1 # {'sint32_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'custom_perl','type_code' => 16403}} 1..6 ok 9 - sint32 # Subtest: uint64 ok 1 - ffi.custom_type 1 # {'uint64_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint64','sign' => 0,'size' => 8,'type' => 'custom_perl','type_code' => 16420}} ok 2 - ffi.custom_type 1 # {'uint64_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint64','sign' => 0,'size' => 8,'type' => 'custom_perl','type_code' => 16420}} ok 3 - ffi.custom_type 1 # {'uint64_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint64','sign' => 0,'size' => 8,'type' => 'custom_perl','type_code' => 16420}} ok 4 - ffi.custom_type 1 # {'uint64_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint64','sign' => 0,'size' => 8,'type' => 'custom_perl','type_code' => 16420}} ok 5 - ffi.custom_type 1 # {'uint64_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint64','sign' => 0,'size' => 8,'type' => 'custom_perl','type_code' => 16420}} ok 6 - ffi.custom_type 1 # {'uint64_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'uint64','sign' => 0,'size' => 8,'type' => 'custom_perl','type_code' => 16420}} 1..6 ok 10 - uint64 # Subtest: sint64 ok 1 - ffi.custom_type 1 # {'sint64_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint64','sign' => 1,'size' => 8,'type' => 'custom_perl','type_code' => 16404}} ok 2 - ffi.custom_type 1 # {'sint64_1' => {'custom_native_to_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint64','sign' => 1,'size' => 8,'type' => 'custom_perl','type_code' => 16404}} ok 3 - ffi.custom_type 1 # {'sint64_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint64','sign' => 1,'size' => 8,'type' => 'custom_perl','type_code' => 16404}} ok 4 - ffi.custom_type 1 # {'sint64_1' => {'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint64','sign' => 1,'size' => 8,'type' => 'custom_perl','type_code' => 16404}} ok 5 - ffi.custom_type 1 # {'sint64_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint64','sign' => 1,'size' => 8,'type' => 'custom_perl','type_code' => 16404}} ok 6 - ffi.custom_type 1 # {'sint64_1' => {'custom_native_to_p' => \sub { "DUMMY" },'custom_perl_to_nat' => \sub { "DUMMY" },'custom_perl_to_native_p' => \sub { "DUMMY" },'element_type' => 'int','ffi_type' => 'sint64','sign' => 1,'size' => 8,'type' => 'custom_perl','type_code' => 16404}} 1..6 ok 11 - sint64 1..11 ok 4 - custom type # Subtest: find lib # Subtest: find_lib ok 1 - found f0 = 47341210484976 1..1 ok 1 - find_lib # Subtest: external ok 1 - ffi.find_symbol(f0) = 47341210484976 ok 2 - ffi.find_symbol(bogus) = undef 1..2 ok 2 - external # Subtest: internal ok 1 - ffi.find_symbol(printf) = 47341175051792 ok 2 - ffi.find_symbol(bogus) = undef 1..2 ok 3 - internal 1..3 ok 5 - find lib # Subtest: find symbol # Subtest: external ok 1 - ffi.find_symbol(f0) = 47341210484976 ok 2 - ffi.find_symbol(bogus) = undef 1..2 ok 1 - external # Subtest: internal ok 1 - ffi.find_symbol(printf) = 47341175051792 ok 2 - ffi.find_symbol(bogus) = undef 1..2 ok 2 - internal 1..2 ok 6 - find symbol # Subtest: lib # Subtest: basic ok 1 - exists t/ffi/libtest.so ok 2 - ffi.lib (set) ok 3 - ffi.lib (get) 1..3 ok 1 - basic # Subtest: undef # Subtest: baseline ok 1 1..1 ok 1 - baseline # Subtest: lib => [undef] ok 1 1..1 ok 2 - lib => [undef] # Subtest: lib => undef ok 1 1..1 ok 3 - lib => undef 1..3 ok 2 - undef # Subtest: coderef ok 1 - exists t/ffi/libtest.so ok 2 - ffi.lib (set) ok 3 - ffi.lib (get) 1..3 ok 3 - coderef 1..3 ok 7 - lib # Subtest: sizeof # Subtest: integers ok 1 - sizeof uint8 = 1 ok 2 - sizeof uint16 = 2 ok 3 - sizeof uint32 = 4 ok 4 - sizeof uint64 = 8 ok 5 - sizeof sint8 = 1 ok 6 - sizeof sint16 = 2 ok 7 - sizeof sint32 = 4 ok 8 - sizeof sint64 = 8 1..8 ok 1 - integers # Subtest: floats ok 1 - sizeof float = 4 ok 2 - sizeof double = 8 1..2 ok 2 - floats # Subtest: pointers ok 1 - sizeof opaque = 8 ok 2 - sizeof uint8* = 8 ok 3 - sizeof uint16* = 8 ok 4 - sizeof uint32* = 8 ok 5 - sizeof uint64* = 8 ok 6 - sizeof sint8* = 8 ok 7 - sizeof sint16* = 8 ok 8 - sizeof sint32* = 8 ok 9 - sizeof sint64* = 8 ok 10 - sizeof float* = 8 ok 11 - sizeof double* = 8 ok 12 - sizeof opaque* = 8 ok 13 - sizeof string = 8 ok 14 - sizeof (int)->int = 8 1..14 ok 3 - pointers # Subtest: arrays ok 1 - sizeof uint8 [32] = 1 ok 2 - sizeof uint8 [32] = 2 ok 3 - sizeof uint8 [32] = 3 ok 4 - sizeof uint8 [32] = 4 ok 5 - sizeof uint8 [32] = 5 ok 6 - sizeof uint8 [32] = 6 ok 7 - sizeof uint8 [32] = 7 ok 8 - sizeof uint8 [32] = 8 ok 9 - sizeof uint8 [32] = 9 ok 10 - sizeof uint8 [32] = 10 ok 11 - sizeof uint16 [32] = 2 ok 12 - sizeof uint16 [32] = 4 ok 13 - sizeof uint16 [32] = 6 ok 14 - sizeof uint16 [32] = 8 ok 15 - sizeof uint16 [32] = 10 ok 16 - sizeof uint16 [32] = 12 ok 17 - sizeof uint16 [32] = 14 ok 18 - sizeof uint16 [32] = 16 ok 19 - sizeof uint16 [32] = 18 ok 20 - sizeof uint16 [32] = 20 ok 21 - sizeof uint32 [32] = 4 ok 22 - sizeof uint32 [32] = 8 ok 23 - sizeof uint32 [32] = 12 ok 24 - sizeof uint32 [32] = 16 ok 25 - sizeof uint32 [32] = 20 ok 26 - sizeof uint32 [32] = 24 ok 27 - sizeof uint32 [32] = 28 ok 28 - sizeof uint32 [32] = 32 ok 29 - sizeof uint32 [32] = 36 ok 30 - sizeof uint32 [32] = 40 ok 31 - sizeof uint64 [32] = 8 ok 32 - sizeof uint64 [32] = 16 ok 33 - sizeof uint64 [32] = 24 ok 34 - sizeof uint64 [32] = 32 ok 35 - sizeof uint64 [32] = 40 ok 36 - sizeof uint64 [32] = 48 ok 37 - sizeof uint64 [32] = 56 ok 38 - sizeof uint64 [32] = 64 ok 39 - sizeof uint64 [32] = 72 ok 40 - sizeof uint64 [32] = 80 ok 41 - sizeof sint8 [32] = 1 ok 42 - sizeof sint8 [32] = 2 ok 43 - sizeof sint8 [32] = 3 ok 44 - sizeof sint8 [32] = 4 ok 45 - sizeof sint8 [32] = 5 ok 46 - sizeof sint8 [32] = 6 ok 47 - sizeof sint8 [32] = 7 ok 48 - sizeof sint8 [32] = 8 ok 49 - sizeof sint8 [32] = 9 ok 50 - sizeof sint8 [32] = 10 ok 51 - sizeof sint16 [32] = 2 ok 52 - sizeof sint16 [32] = 4 ok 53 - sizeof sint16 [32] = 6 ok 54 - sizeof sint16 [32] = 8 ok 55 - sizeof sint16 [32] = 10 ok 56 - sizeof sint16 [32] = 12 ok 57 - sizeof sint16 [32] = 14 ok 58 - sizeof sint16 [32] = 16 ok 59 - sizeof sint16 [32] = 18 ok 60 - sizeof sint16 [32] = 20 ok 61 - sizeof sint32 [32] = 4 ok 62 - sizeof sint32 [32] = 8 ok 63 - sizeof sint32 [32] = 12 ok 64 - sizeof sint32 [32] = 16 ok 65 - sizeof sint32 [32] = 20 ok 66 - sizeof sint32 [32] = 24 ok 67 - sizeof sint32 [32] = 28 ok 68 - sizeof sint32 [32] = 32 ok 69 - sizeof sint32 [32] = 36 ok 70 - sizeof sint32 [32] = 40 ok 71 - sizeof sint64 [32] = 8 ok 72 - sizeof sint64 [32] = 16 ok 73 - sizeof sint64 [32] = 24 ok 74 - sizeof sint64 [32] = 32 ok 75 - sizeof sint64 [32] = 40 ok 76 - sizeof sint64 [32] = 48 ok 77 - sizeof sint64 [32] = 56 ok 78 - sizeof sint64 [32] = 64 ok 79 - sizeof sint64 [32] = 72 ok 80 - sizeof sint64 [32] = 80 ok 81 - sizeof float [32] = 4 ok 82 - sizeof float [32] = 8 ok 83 - sizeof float [32] = 12 ok 84 - sizeof float [32] = 16 ok 85 - sizeof float [32] = 20 ok 86 - sizeof float [32] = 24 ok 87 - sizeof float [32] = 28 ok 88 - sizeof float [32] = 32 ok 89 - sizeof float [32] = 36 ok 90 - sizeof float [32] = 40 ok 91 - sizeof double [32] = 8 ok 92 - sizeof double [32] = 16 ok 93 - sizeof double [32] = 24 ok 94 - sizeof double [32] = 32 ok 95 - sizeof double [32] = 40 ok 96 - sizeof double [32] = 48 ok 97 - sizeof double [32] = 56 ok 98 - sizeof double [32] = 64 ok 99 - sizeof double [32] = 72 ok 100 - sizeof double [32] = 80 ok 101 - sizeof opaque [32] = 8 ok 102 - sizeof opaque [32] = 16 ok 103 - sizeof opaque [32] = 24 ok 104 - sizeof opaque [32] = 32 ok 105 - sizeof opaque [32] = 40 ok 106 - sizeof opaque [32] = 48 ok 107 - sizeof opaque [32] = 56 ok 108 - sizeof opaque [32] = 64 ok 109 - sizeof opaque [32] = 72 ok 110 - sizeof opaque [32] = 80 1..110 ok 4 - arrays # Subtest: custom_type ok 1 - sizeof my_uint8 = 1 ok 2 - sizeof my_uint16 = 2 ok 3 - sizeof my_uint32 = 4 ok 4 - sizeof my_uint64 = 8 ok 5 - sizeof my_sint8 = 1 ok 6 - sizeof my_sint16 = 2 ok 7 - sizeof my_sint32 = 4 ok 8 - sizeof my_sint64 = 8 ok 9 - sizeof my_float = 4 ok 10 - sizeof my_double = 8 ok 11 - sizeof my_opaque = 8 1..11 ok 5 - custom_type 1..5 ok 8 - sizeof # Subtest: type # Subtest: simple type ok 1 - ffi.type(sint8) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' 1..2 ok 1 - simple type # Subtest: aliased type ok 1 - ffi.type(sint8 => my_integer_8) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 4 - ffi.types returns my_integer_8 1..4 ok 2 - aliased type # Subtest: ffi basic types # Subtest: sint8 ok 1 - ffi.type(sint8) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 1,'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 1,'type' => 'scalar','type_code' => 17} # 0 ok 3 - size = 1 1..3 ok 1 - sint8 # Subtest: uint8 ok 1 - ffi.type(uint8) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 1,'element_type' => 'int','ffi_type' => 'uint8','sign' => 0,'size' => 1,'type' => 'scalar','type_code' => 33} # 0 ok 3 - size = 1 1..3 ok 2 - uint8 # Subtest: sint16 ok 1 - ffi.type(sint16) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 2,'element_type' => 'int','ffi_type' => 'sint16','sign' => 1,'size' => 2,'type' => 'scalar','type_code' => 18} # 0 ok 3 - size = 2 1..3 ok 3 - sint16 # Subtest: uint16 ok 1 - ffi.type(uint16) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 2,'element_type' => 'int','ffi_type' => 'uint16','sign' => 0,'size' => 2,'type' => 'scalar','type_code' => 34} # 0 ok 3 - size = 2 1..3 ok 4 - uint16 # Subtest: sint32 ok 1 - ffi.type(sint32) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 4,'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'scalar','type_code' => 19} # 0 ok 3 - size = 4 1..3 ok 5 - sint32 # Subtest: uint32 ok 1 - ffi.type(uint32) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 4,'element_type' => 'int','ffi_type' => 'uint32','sign' => 0,'size' => 4,'type' => 'scalar','type_code' => 35} # 0 ok 3 - size = 4 1..3 ok 6 - uint32 # Subtest: sint64 ok 1 - ffi.type(sint64) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 8,'element_type' => 'int','ffi_type' => 'sint64','sign' => 1,'size' => 8,'type' => 'scalar','type_code' => 20} # 0 ok 3 - size = 8 1..3 ok 7 - sint64 # Subtest: uint64 ok 1 - ffi.type(uint64) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 8,'element_type' => 'int','ffi_type' => 'uint64','sign' => 0,'size' => 8,'type' => 'scalar','type_code' => 36} # 0 ok 3 - size = 8 1..3 ok 8 - uint64 # Subtest: float ok 1 - ffi.type(float) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 4,'element_type' => 'float','ffi_type' => 'float','size' => 4,'type' => 'scalar','type_code' => 67} # 0 ok 3 - size = 4 1..3 ok 9 - float # Subtest: double ok 1 - ffi.type(double) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 8,'element_type' => 'float','ffi_type' => 'double','size' => 8,'type' => 'scalar','type_code' => 68} # 0 ok 3 - size = 8 1..3 ok 10 - double # Subtest: opaque ok 1 - ffi.type(opaque) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 8,'element_type' => 'opaque','ffi_type' => 'pointer','size' => 8,'type' => 'scalar','type_code' => 260} # 0 ok 3 - size = 8 1..3 ok 11 - opaque # Subtest: string ok 1 - ffi.type(string) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'access' => 'ro','element_size' => 8,'ffi_type' => 'pointer','size' => 8,'type' => 'string','type_code' => 772} # 0 ok 3 - size = 8 1..3 ok 12 - string # Subtest: longdouble ok 1 - ffi.type(longdouble) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 16,'element_type' => 'float','ffi_type' => 'longdouble','size' => 16,'type' => 'scalar','type_code' => 69} # 0 ok 3 - size = 16 1..3 ok 13 - longdouble 1..13 ok 3 - ffi basic types # Subtest: ffi pointer types # Subtest: sint8 * ok 1 - ffi.type(sint8 *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 1,'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 8,'type' => 'pointer','type_code' => 4113} # 0 ok 3 - size = 8 1..3 ok 1 - sint8 * # Subtest: uint8 * ok 1 - ffi.type(uint8 *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 1,'element_type' => 'int','ffi_type' => 'uint8','sign' => 0,'size' => 8,'type' => 'pointer','type_code' => 4129} # 0 ok 3 - size = 8 1..3 ok 2 - uint8 * # Subtest: sint16 * ok 1 - ffi.type(sint16 *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 2,'element_type' => 'int','ffi_type' => 'sint16','sign' => 1,'size' => 8,'type' => 'pointer','type_code' => 4114} # 0 ok 3 - size = 8 1..3 ok 3 - sint16 * # Subtest: uint16 * ok 1 - ffi.type(uint16 *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 2,'element_type' => 'int','ffi_type' => 'uint16','sign' => 0,'size' => 8,'type' => 'pointer','type_code' => 4130} # 0 ok 3 - size = 8 1..3 ok 4 - uint16 * # Subtest: sint32 * ok 1 - ffi.type(sint32 *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 4,'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 8,'type' => 'pointer','type_code' => 4115} # 0 ok 3 - size = 8 1..3 ok 5 - sint32 * # Subtest: uint32 * ok 1 - ffi.type(uint32 *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 4,'element_type' => 'int','ffi_type' => 'uint32','sign' => 0,'size' => 8,'type' => 'pointer','type_code' => 4131} # 0 ok 3 - size = 8 1..3 ok 6 - uint32 * # Subtest: sint64 * ok 1 - ffi.type(sint64 *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 8,'element_type' => 'int','ffi_type' => 'sint64','sign' => 1,'size' => 8,'type' => 'pointer','type_code' => 4116} # 0 ok 3 - size = 8 1..3 ok 7 - sint64 * # Subtest: uint64 * ok 1 - ffi.type(uint64 *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 8,'element_type' => 'int','ffi_type' => 'uint64','sign' => 0,'size' => 8,'type' => 'pointer','type_code' => 4132} # 0 ok 3 - size = 8 1..3 ok 8 - uint64 * # Subtest: float * ok 1 - ffi.type(float *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 4,'element_type' => 'float','ffi_type' => 'float','size' => 8,'type' => 'pointer','type_code' => 4163} # 0 ok 3 - size = 8 1..3 ok 9 - float * # Subtest: double * ok 1 - ffi.type(double *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 8,'element_type' => 'float','ffi_type' => 'double','size' => 8,'type' => 'pointer','type_code' => 4164} # 0 ok 3 - size = 8 1..3 ok 10 - double * # Subtest: opaque * ok 1 - ffi.type(opaque *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 8,'element_type' => 'opaque','ffi_type' => 'pointer','size' => 8,'type' => 'pointer','type_code' => 4356} # 0 ok 3 - size = 8 1..3 ok 11 - opaque * # Subtest: string * 1..0 # SKIP ME GRIMLOCK SAY STRING CAN NO BE POINTER ok 12 # skip ME GRIMLOCK SAY STRING CAN NO BE POINTER # Subtest: longdouble * ok 1 - ffi.type(longdouble *) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_size' => 16,'element_type' => 'float','ffi_type' => 'longdouble','size' => 8,'type' => 'pointer','type_code' => 4165} # 0 ok 3 - size = 8 1..3 ok 13 - longdouble * 1..13 ok 4 - ffi pointer types # Subtest: ffi array types # Subtest: sint8 [5] ok 1 - ffi.type(sint8 [5]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 5,'element_size' => 1,'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 5,'type' => 'array','type_code' => 8209} # 0 ok 3 - size = 5 ok 4 - size = 5 1..4 ok 1 - sint8 [5] # Subtest: uint8 [7] ok 1 - ffi.type(uint8 [7]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 7,'element_size' => 1,'element_type' => 'int','ffi_type' => 'uint8','sign' => 0,'size' => 7,'type' => 'array','type_code' => 8225} # 0 ok 3 - size = 7 ok 4 - size = 7 1..4 ok 2 - uint8 [7] # Subtest: sint16 [9] ok 1 - ffi.type(sint16 [9]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 9,'element_size' => 2,'element_type' => 'int','ffi_type' => 'sint16','sign' => 1,'size' => 18,'type' => 'array','type_code' => 8210} # 0 ok 3 - size = 18 ok 4 - size = 9 1..4 ok 3 - sint16 [9] # Subtest: uint16 [11] ok 1 - ffi.type(uint16 [11]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 11,'element_size' => 2,'element_type' => 'int','ffi_type' => 'uint16','sign' => 0,'size' => 22,'type' => 'array','type_code' => 8226} # 0 ok 3 - size = 22 ok 4 - size = 11 1..4 ok 4 - uint16 [11] # Subtest: sint32 [13] ok 1 - ffi.type(sint32 [13]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 13,'element_size' => 4,'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 52,'type' => 'array','type_code' => 8211} # 0 ok 3 - size = 52 ok 4 - size = 13 1..4 ok 5 - sint32 [13] # Subtest: uint32 [15] ok 1 - ffi.type(uint32 [15]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 15,'element_size' => 4,'element_type' => 'int','ffi_type' => 'uint32','sign' => 0,'size' => 60,'type' => 'array','type_code' => 8227} # 0 ok 3 - size = 60 ok 4 - size = 15 1..4 ok 6 - uint32 [15] # Subtest: sint64 [17] ok 1 - ffi.type(sint64 [17]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 17,'element_size' => 8,'element_type' => 'int','ffi_type' => 'sint64','sign' => 1,'size' => 136,'type' => 'array','type_code' => 8212} # 0 ok 3 - size = 136 ok 4 - size = 17 1..4 ok 7 - sint64 [17] # Subtest: uint64 [19] ok 1 - ffi.type(uint64 [19]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 19,'element_size' => 8,'element_type' => 'int','ffi_type' => 'uint64','sign' => 0,'size' => 152,'type' => 'array','type_code' => 8228} # 0 ok 3 - size = 152 ok 4 - size = 19 1..4 ok 8 - uint64 [19] # Subtest: float [21] ok 1 - ffi.type(float [21]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 21,'element_size' => 4,'element_type' => 'float','ffi_type' => 'float','size' => 84,'type' => 'array','type_code' => 8259} # 0 ok 3 - size = 84 ok 4 - size = 21 1..4 ok 9 - float [21] # Subtest: double [23] ok 1 - ffi.type(double [23]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 23,'element_size' => 8,'element_type' => 'float','ffi_type' => 'double','size' => 184,'type' => 'array','type_code' => 8260} # 0 ok 3 - size = 184 ok 4 - size = 23 1..4 ok 10 - double [23] # Subtest: opaque [25] ok 1 - ffi.type(opaque [25]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 25,'element_size' => 8,'element_type' => 'opaque','ffi_type' => 'pointer','size' => 200,'type' => 'array','type_code' => 8452} # 0 ok 3 - size = 200 ok 4 - size = 25 1..4 ok 11 - opaque [25] # Subtest: string [27] 1..0 # SKIP ME GRIMLOCK SAY STRING CAN NO BE ARRAY ok 12 # skip ME GRIMLOCK SAY STRING CAN NO BE ARRAY # Subtest: longdouble [29] ok 1 - ffi.type(longdouble [29]) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' # {'element_count' => 29,'element_size' => 16,'element_type' => 'float','ffi_type' => 'longdouble','size' => 464,'type' => 'array','type_code' => 8261} # 0 ok 3 - size = 464 ok 4 - size = 29 1..4 ok 13 - longdouble [29] 1..13 ok 5 - ffi array types # Subtest: closure types ok 1 - (int)->int is a legal closure type # {'element_size' => 8,'ffi_type' => 'pointer','signature' => [[{'element_size' => 4,'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'scalar','type_code' => 19}],{'element_size' => 4,'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'scalar','type_code' => 19}],'size' => 8,'type' => 'closure','type_code' => 1284} # 0 ok 2 # skip arrays not currently supported as closure argument types ok 3 - inline closure illegal ok 4 - argument type closure illegal ok 5 - return type closure illegal ok 6 - a more complicated closure # {'element_size' => 8,'ffi_type' => 'pointer','signature' => [[{'element_size' => 4,'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'scalar','type_code' => 19},{'element_size' => 4,'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'scalar','type_code' => 19},{'element_size' => 4,'element_type' => 'int','ffi_type' => 'sint32','sign' => 1,'size' => 4,'type' => 'scalar','type_code' => 19},{'element_size' => 1,'element_type' => 'int','ffi_type' => 'sint8','sign' => 1,'size' => 1,'type' => 'scalar','type_code' => 17},{'access' => 'ro','element_size' => 8,'ffi_type' => 'pointer','size' => 8,'type' => 'string','type_code' => 772},{'element_size' => 8,'element_type' => 'opaque','ffi_type' => 'pointer','size' => 8,'type' => 'scalar','type_code' => 260}],{'element_size' => 0,'element_type' => 'void','ffi_type' => 'void','size' => 0,'type' => 'scalar','type_code' => 8}],'size' => 8,'type' => 'closure','type_code' => 1284} # 0 1..6 ok 6 - closure types # Subtest: record # {'ffi_type' => 'pointer','ref' => 0,'size' => 1,'type' => 'record','type_code' => 2308} # 0 # {'ffi_type' => 'pointer','ref' => 0,'size' => 32,'type' => 'record','type_code' => 2308} # 0 ok 1 - sizeof my_record_1 = 1 ok 2 - sizeof my_record_32 = 32 # {'ffi_type' => 'pointer','ref' => 1,'size' => 22,'type' => 'record','type_code' => 2308} # 0 # {'ffi_type' => 'pointer','ref' => 1,'size' => 44,'type' => 'record','type_code' => 2308} # 0 ok 3 - sizeof my_record_22 = 22 ok 4 - sizeof my_record_44 = 44 1..4 ok 7 - record # Subtest: string # Subtest: string ok 1 - sizeof string = 8 ok 2 - access = ro # {'access' => 'ro','element_size' => 8,'ffi_type' => 'pointer','size' => 8,'type' => 'string','type_code' => 772} # 0 1..2 ok 1 - string # Subtest: string_rw ok 1 - sizeof string_rw = 8 ok 2 - access = rw # {'access' => 'rw','element_size' => 8,'ffi_type' => 'pointer','size' => 8,'type' => 'string','type_code' => 772} # 0 1..2 ok 2 - string_rw # Subtest: string_ro ok 1 - sizeof string_ro = 8 ok 2 - access = ro # {'access' => 'ro','element_size' => 8,'ffi_type' => 'pointer','size' => 8,'type' => 'string','type_code' => 772} # 0 1..2 ok 3 - string_ro # Subtest: string rw ok 1 - sizeof string rw = 8 ok 2 - access = rw # {'access' => 'rw','element_size' => 8,'ffi_type' => 'pointer','size' => 8,'type' => 'string','type_code' => 772} # 0 1..2 ok 4 - string rw # Subtest: string ro ok 1 - sizeof string ro = 8 ok 2 - access = ro # {'access' => 'ro','element_size' => 8,'ffi_type' => 'pointer','size' => 8,'type' => 'string','type_code' => 772} # 0 1..2 ok 5 - string ro # Subtest: string (10) ok 1 - is actually a record type ok 2 - sizeof string (10) = 10 # {'ffi_type' => 'pointer','ref' => 0,'size' => 10,'type' => 'record','type_code' => 2308} # 0 1..2 ok 6 - string (10) # Subtest: string(10) ok 1 - is actually a record type ok 2 - sizeof string(10) = 10 # {'ffi_type' => 'pointer','ref' => 0,'size' => 10,'type' => 'record','type_code' => 2308} # 0 1..2 ok 7 - string(10) 1..7 ok 8 - string # Subtest: private # Subtest: void ok 1 - type = FFI::Platypus::Type->new(void) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = void 1..3 ok 1 - void # Subtest: uint8 ok 1 - type = FFI::Platypus::Type->new(uint8) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = uint8 1..3 ok 2 - uint8 # Subtest: sint8 ok 1 - type = FFI::Platypus::Type->new(sint8) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = sint8 1..3 ok 3 - sint8 # Subtest: uint16 ok 1 - type = FFI::Platypus::Type->new(uint16) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = uint16 1..3 ok 4 - uint16 # Subtest: sint16 ok 1 - type = FFI::Platypus::Type->new(sint16) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = sint16 1..3 ok 5 - sint16 # Subtest: uint32 ok 1 - type = FFI::Platypus::Type->new(uint32) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = uint32 1..3 ok 6 - uint32 # Subtest: sint32 ok 1 - type = FFI::Platypus::Type->new(sint32) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = sint32 1..3 ok 7 - sint32 # Subtest: uint64 ok 1 - type = FFI::Platypus::Type->new(uint64) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = uint64 1..3 ok 8 - uint64 # Subtest: sint64 ok 1 - type = FFI::Platypus::Type->new(sint64) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = sint64 1..3 ok 9 - sint64 # Subtest: float ok 1 - type = FFI::Platypus::Type->new(float) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = float 1..3 ok 10 - float # Subtest: double ok 1 - type = FFI::Platypus::Type->new(double) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = double 1..3 ok 11 - double # Subtest: longdouble ok 1 - type = FFI::Platypus::Type->new(longdouble) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = longdouble 1..3 ok 12 - longdouble # Subtest: opaque ok 1 - type = FFI::Platypus::Type->new(opaque) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = pointer 1..3 ok 13 - opaque # Subtest: pointer ok 1 - type = FFI::Platypus::Type->new(pointer) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = pointer 1..3 ok 14 - pointer # Subtest: string ok 1 - type = FFI::Platypus::Type->new(string) ok 2 - An object of class 'FFI::Platypus::Type' isa 'FFI::Platypus::Type' ok 3 - type.meta.ffi_type = pointer 1..3 ok 15 - string 1..15 ok 9 - private 1..9 ok 9 - type # Subtest: class or instance method ok 1 - class and instance methods are identical # type: blkcnt_t # type: blksize_t # type: bool # type: char # type: dev_t # type: double # type: double complex # type: float # type: float complex # type: gid_t # type: ino_t # type: int # type: int16_t # type: int32_t # type: int64_t # type: int8_t # type: intptr_t # type: long # type: long double # type: long double complex # type: long long # type: longdouble # type: mode_t # type: nlink_t # type: off_t # type: opaque # type: pointer # type: ptrdiff_t # type: short # type: signed char # type: signed int # type: signed long # type: signed long long # type: signed short # type: sint16 # type: sint32 # type: sint64 # type: sint8 # type: size_t # type: ssize_t # type: string # type: time_t # type: uchar # type: uid_t # type: uint # type: uint16 # type: uint16_t # type: uint32 # type: uint32_t # type: uint64 # type: uint64_t # type: uint8 # type: uint8_t # type: uintptr_t # type: ulong # type: unsigned char # type: unsigned int # type: unsigned long # type: unsigned long long # type: unsigned short # type: ushort # type: void # type: wchar_t # type: wint_t 1..1 ok 10 - class or instance method # Subtest: cast # Subtest: cast from string to pointer ok 1 - dynamic ok 2 - static 1..2 ok 1 - cast from string to pointer # Subtest: cast from pointer to string ok 1 - dynamic ok 2 - static 1..2 ok 2 - cast from pointer to string # Subtest: cast closure to opaque ok 1 - dynamic ok 2 - dynamic ok 3 - static ok 4 - static 1..4 ok 3 - cast closure to opaque 1..3 ok 11 - cast # Subtest: ignore_not_found # Subtest: ignore_not_found=undef ok 1 - no exception ok 2 - returned a function # f1 isa FFI::Platypus::Function::Function ok 3 - function exception # exception=unable to find bogus at t/ffi_platypus.t line 622. ok 4 - attach exception # exception=unable to find bogus at t/ffi_platypus.t line 626. 1..4 ok 1 - ignore_not_found=undef # Subtest: ignore_not_found=0 ok 1 - no exception ok 2 - returned a function # f1 isa FFI::Platypus::Function::Function ok 3 - function exception # exception=unable to find bogus at t/ffi_platypus.t line 642. ok 4 - attach exception # exception=unable to find bogus at t/ffi_platypus.t line 646. 1..4 ok 2 - ignore_not_found=0 # Subtest: ignore_not_found=0 (constructor) ok 1 - no exception ok 2 - returned a function # f1 isa FFI::Platypus::Function::Function ok 3 - function exception # exception=unable to find bogus at t/ffi_platypus.t line 660. ok 4 - attach exception # exception=unable to find bogus at t/ffi_platypus.t line 664. 1..4 ok 3 - ignore_not_found=0 (constructor) # Subtest: ignore_not_found=1 ok 1 - no exception ok 2 - returned a function # f1 isa FFI::Platypus::Function::Function ok 3 - function no exception ok 4 - f2 is undefined ok 5 - attach no exception 1..5 ok 4 - ignore_not_found=1 # Subtest: ignore_not_found=1 (constructor) ok 1 - no exception ok 2 - returned a function # f1 isa FFI::Platypus::Function::Function ok 3 - function no exception ok 4 - f2 is undefined ok 5 - attach no exception 1..5 ok 5 - ignore_not_found=1 (constructor) # Subtest: ignore_not_found bool context ok 1 - f1 exists and resolved to boolean true ok 2 - f2 does not exist and resolved to boolean false 1..2 ok 6 - ignore_not_found bool context 1..6 ok 12 - ignore_not_found # Subtest: attach basic ok 1 - f0(22) = 22 ok 2 - f1(22) = 22 ok 3 - Roger::f1(22) = 22 ok 4 - f0_wrap(22) = 25 ok 5 - f0_wrap(22) = 25 1..5 ok 13 - attach basic # Subtest: attach void ok 1 - $i_ptr = 43 after f2(\$i_ptr) ok 2 - $i_ptr = 44 after f2_implicit(\$i_ptr) 1..2 ok 14 - attach void # Subtest: customer mangler ok 1 1..1 ok 15 - customer mangler 1..15 ok t/ffi_platypus_api.t ..................... skipped: TODO t/ffi_platypus_buffer.t .................. # Subtest: simple ok 1 - ptr = 45117328 ok 2 - scalar to pointer matches ok 3 - size = 16 ok 4 - scalar = me grimlock king 1..4 ok 1 - simple # Subtest: unicode ok 1 - ptr = 45946336 ok 2 - size = 12 ok 3 - scalar = привет 1..3 ok 2 - unicode 1..2 ok t/ffi_platypus_closure.t ................. # Subtest: basic ok 1 - An object of class 'FFI::Platypus::Closure' isa 'FFI::Platypus::Closure' ok 2 - closure.(1) = 2 ok 3 - An object of class 'FFI::Platypus::Closure' isa 'FFI::Platypus::Closure' ok 4 - closure.(1) = 3 ok 5 - closure.call(1) = 3 ok 6 - An object of class 'FFI::Platypus::Closure' isa 'FFI::Platypus::Closure' ok 7 - closure.(1) = 3 ok 8 - closure.call(1) = 3 1..8 ok 1 - basic # Subtest: sticky ok 1 - An object of class 'FFI::Platypus::Closure' isa 'FFI::Platypus::Closure' # _svrefcnt = 1 ok 2 - called $closure->sticky ok 3 ok 4 - called $closure->sticky ok 5 ok 6 - called $closure->unstick ok 7 1..7 ok 2 - sticky # Subtest: private ok 1 - An object of class 'FFI::Platypus::Closure' isa 'FFI::Platypus::Closure' ok 2 - closure.(1) = 2 1..2 ok 3 - private # Subtest: space ok 1 - good without space ok 2 - good with space 1..2 ok 4 - space # Subtest: die ok 1 ok 2 - does not exit # warning = 'omg i don't want to die! at t/ffi_platypus_closure.t line 72. # ' 1..2 ok 5 - die # Subtest: reuse ok 1 ok 2 1..2 ok 6 - reuse # Subtest: immediate ok 1 1..1 ok 7 - immediate 1..7 ok t/ffi_platypus_declare.t ................. # Subtest: normal ok 1 - f0(22) = 22 ok 2 - f1(22) = 22 ok 3 - f0_wrap(22) = 25 ok 4 - f0_wrap2(22) = 25 1..4 ok 1 - normal # Subtest: prototype ok 1 - no compile error ok 2 - f(22) = 22 1..2 ok 2 - prototype # Subtest: with type aliases ok 1 - atoi("42") = 42 1..1 ok 3 - with type aliases # Subtest: simple closure test ok 1 - An object of class 'FFI::Platypus::Closure' isa 'FFI::Platypus::Closure' ok 2 - closure.(1) = 2 1..2 ok 4 - simple closure test # Subtest: abis ok 1 - has a default ABI # Subtest: stdcall ok 1 - string ok 2 - integer 1..2 ok 2 - stdcall # Subtest: unix64 ok 1 - string ok 2 - integer 1..2 ok 3 - unix64 # Subtest: register ok 1 - string ok 2 - integer 1..2 ok 4 - register # Subtest: thiscall ok 1 - string ok 2 - integer 1..2 ok 5 - thiscall # Subtest: default_abi ok 1 - string ok 2 - integer 1..2 ok 6 - default_abi # Subtest: sysv ok 1 - string ok 2 - integer 1..2 ok 7 - sysv # Subtest: fastcall ok 1 - string ok 2 - integer 1..2 ok 8 - fastcall # Subtest: pascal ok 1 - string ok 2 - integer 1..2 ok 9 - pascal # Subtest: bogus ok 1 - string ok 2 - integer 1..2 ok 10 - bogus 1..10 ok 5 - abis # Subtest: lang # Subtest: C ok 1 - int is an okay type ok 2 - foo_t is not an okay type # unknown type: foo_t at t/ffi_platypus_declare.t line 120. ok 3 - sint16 is an okay type 1..3 ok 1 - C # Subtest: Foo constructor ok 1 - int is not an okay type # unknown type: int at t/ffi_platypus_declare.t line 149. ok 2 - foo_t is an okay type ok 3 - sint16 is an okay type ok 4 - sizeof foo_t = 2 ok 5 - sizeof foo_t = 4 1..5 ok 2 - Foo constructor 1..2 ok 6 - lang # Subtest: sizeof ok 1 - sizeof uint32 = 4 ok 2 - sizeof uint32[2] = 8 1..2 ok 7 - sizeof # Subtest: sticky ok 1 - call_closure(2) = 4 1..1 ok 8 - sticky # Subtest: cast # Subtest: cast from string to pointer ok 1 - dynamic ok 2 - static 1..2 ok 1 - cast from string to pointer # Subtest: cast from pointer to string ok 1 - dynamic ok 2 - static 1..2 ok 2 - cast from pointer to string # Subtest: cast closure to opaque ok 1 - dynamic ok 2 - static 1..2 ok 3 - cast closure to opaque 1..3 ok 9 - cast 1..9 ok t/ffi_platypus_dl.t ...................... # Subtest: flags ok 1 - RTLD_PLATYPUS_DEFAULT is defined # RTLD_LOCAL 0000 0 # RTLD_LAZY 0001 1 # RTLD_PLATYPUS_DEFAULT 0001 1 # RTLD_NOW 0002 2 # RTLD_NOLOAD 0004 4 # RTLD_DEEPBIND 0008 8 # RTLD_GLOBAL 0100 256 # RTLD_NODELETE 1000 4096 1..1 ok 1 - flags # Subtest: dlopen # Subtest: bad library ok 1 - Returns undef on fail # dlerror = t/ffi/libbogus.so: cannot open shared object file: No such file or directory 1..1 ok 1 - bad library # Subtest: good library ok 1 - Returns handle on good # h = 30030352 1..1 ok 2 - good library 1..2 ok 2 - dlopen # Subtest: dlsym # Subtest: good symbol ok 1 - returns an address # address = 47310044094704 1..1 ok 1 - good symbol # Subtest: bad symbol ok 1 - bad symbol returns undef # dlerror = t/ffi/libtest.so: undefined symbol: bogus 1..1 ok 2 - bad symbol 1..2 ok 3 - dlsym 1..3 ok t/ffi_platypus_function.t ................ # Subtest: built in type ok 1 - ffi.function(f0, [uint8] => uint8) ok 2 - An object of class 'FFI::Platypus::Function::Function' isa 'FFI::Platypus::Function' ok 3 - An object of class 'FFI::Platypus::Function::Function' isa 'FFI::Platypus::Function::Function' ok 4 - function.call(22) = 22 ok 5 - function.(22) = 22 1..5 ok 1 - built in type # Subtest: custom type ok 1 - ffi.function(f0, [my_int_8] => my_int_8) ok 2 - An object of class 'FFI::Platypus::Function::Function' isa 'FFI::Platypus::Function' ok 3 - An object of class 'FFI::Platypus::Function::Function' isa 'FFI::Platypus::Function::Function' ok 4 - function.call(22) = 22 ok 5 - function.(22) = 22 1..5 ok 2 - custom type # Subtest: private ok 1 - FFI::Platypus::Function->new ok 2 - An object of class 'FFI::Platypus::Function::Function' isa 'FFI::Platypus::Function' ok 3 - An object of class 'FFI::Platypus::Function::Function' isa 'FFI::Platypus::Function::Function' ok 4 - function.call(22) = 22 ok 5 - fooble(22) = 22 1..5 ok 3 - private # Subtest: meta # Subtest: unattached ok 1 ok 2 1..2 ok 1 - unattached # Subtest: attached ok 1 ok 2 1..2 ok 2 - attached 1..2 ok 4 - meta 1..4 ok t/ffi_platypus_function_wrapper.t ........ # Subtest: built in type ok 1 - ffi.function(f0, [uint8] => uint8) ok 2 - An object of class 'FFI::Platypus::Function::Wrapper' isa 'FFI::Platypus::Function' ok 3 - An object of class 'FFI::Platypus::Function::Wrapper' isa 'FFI::Platypus::Function::Wrapper' ok 4 - function.call(22) = 44 ok 5 - function.(22) = 44 ok 6 - baboon(11) = 22 1..6 ok 1 - built in type 1..1 ok t/ffi_platypus_internal.t ................ # Subtest: basic # alpha order: ok 1 - FFI_PL_BASE_CLOSURE 0x0400 ok 2 - FFI_PL_BASE_COMPLEX 0x0080 ok 3 - FFI_PL_BASE_FLOAT 0x0040 ok 4 - FFI_PL_BASE_MASK 0x0ff8 ok 5 - FFI_PL_BASE_OPAQUE 0x0100 ok 6 - FFI_PL_BASE_RECORD 0x0800 ok 7 - FFI_PL_BASE_SINT 0x0010 ok 8 - FFI_PL_BASE_STRING 0x0200 ok 9 - FFI_PL_BASE_UINT 0x0020 ok 10 - FFI_PL_BASE_VOID 0x0008 ok 11 - FFI_PL_SHAPE_ARRAY 0x2000 ok 12 - FFI_PL_SHAPE_CUSTOM_MASK 0xf000 ok 13 - FFI_PL_SHAPE_CUSTOM_PERL 0x4000 ok 14 - FFI_PL_SHAPE_POINTER 0x1000 ok 15 - FFI_PL_SHAPE_SCALAR 0x0000 ok 16 - FFI_PL_SIZE_0 0x0000 ok 17 - FFI_PL_SIZE_128 0x0005 ok 18 - FFI_PL_SIZE_16 0x0002 ok 19 - FFI_PL_SIZE_256 0x0006 ok 20 - FFI_PL_SIZE_32 0x0003 ok 21 - FFI_PL_SIZE_512 0x0007 ok 22 - FFI_PL_SIZE_64 0x0004 ok 23 - FFI_PL_SIZE_8 0x0001 ok 24 - FFI_PL_SIZE_MASK 0x0007 ok 25 - FFI_PL_SIZE_PTR 0x0004 ok 26 - FFI_PL_TYPE_CLOSURE 0x0504 ok 27 - FFI_PL_TYPE_COMPLEX_DOUBLE 0x0085 ok 28 - FFI_PL_TYPE_COMPLEX_FLOAT 0x0084 ok 29 - FFI_PL_TYPE_DOUBLE 0x0044 ok 30 - FFI_PL_TYPE_FLOAT 0x0043 ok 31 - FFI_PL_TYPE_LONG_DOUBLE 0x0045 ok 32 - FFI_PL_TYPE_OPAQUE 0x0104 ok 33 - FFI_PL_TYPE_RECORD 0x0904 ok 34 - FFI_PL_TYPE_SINT16 0x0012 ok 35 - FFI_PL_TYPE_SINT32 0x0013 ok 36 - FFI_PL_TYPE_SINT64 0x0014 ok 37 - FFI_PL_TYPE_SINT8 0x0011 ok 38 - FFI_PL_TYPE_STRING 0x0304 ok 39 - FFI_PL_TYPE_UINT16 0x0022 ok 40 - FFI_PL_TYPE_UINT32 0x0023 ok 41 - FFI_PL_TYPE_UINT64 0x0024 ok 42 - FFI_PL_TYPE_UINT8 0x0021 ok 43 - FFI_PL_TYPE_VOID 0x0008 # value order: ok 44 - FFI_PL_SIZE_0 0x0000 ok 45 - FFI_PL_SHAPE_SCALAR 0x0000 ok 46 - FFI_PL_SIZE_8 0x0001 ok 47 - FFI_PL_SIZE_16 0x0002 ok 48 - FFI_PL_SIZE_32 0x0003 ok 49 - FFI_PL_SIZE_64 0x0004 ok 50 - FFI_PL_SIZE_PTR 0x0004 ok 51 - FFI_PL_SIZE_128 0x0005 ok 52 - FFI_PL_SIZE_256 0x0006 ok 53 - FFI_PL_SIZE_MASK 0x0007 ok 54 - FFI_PL_SIZE_512 0x0007 ok 55 - FFI_PL_BASE_VOID 0x0008 ok 56 - FFI_PL_TYPE_VOID 0x0008 ok 57 - FFI_PL_BASE_SINT 0x0010 ok 58 - FFI_PL_TYPE_SINT8 0x0011 ok 59 - FFI_PL_TYPE_SINT16 0x0012 ok 60 - FFI_PL_TYPE_SINT32 0x0013 ok 61 - FFI_PL_TYPE_SINT64 0x0014 ok 62 - FFI_PL_BASE_UINT 0x0020 ok 63 - FFI_PL_TYPE_UINT8 0x0021 ok 64 - FFI_PL_TYPE_UINT16 0x0022 ok 65 - FFI_PL_TYPE_UINT32 0x0023 ok 66 - FFI_PL_TYPE_UINT64 0x0024 ok 67 - FFI_PL_BASE_FLOAT 0x0040 ok 68 - FFI_PL_TYPE_FLOAT 0x0043 ok 69 - FFI_PL_TYPE_DOUBLE 0x0044 ok 70 - FFI_PL_TYPE_LONG_DOUBLE 0x0045 ok 71 - FFI_PL_BASE_COMPLEX 0x0080 ok 72 - FFI_PL_TYPE_COMPLEX_FLOAT 0x0084 ok 73 - FFI_PL_TYPE_COMPLEX_DOUBLE 0x0085 ok 74 - FFI_PL_BASE_OPAQUE 0x0100 ok 75 - FFI_PL_TYPE_OPAQUE 0x0104 ok 76 - FFI_PL_BASE_STRING 0x0200 ok 77 - FFI_PL_TYPE_STRING 0x0304 ok 78 - FFI_PL_BASE_CLOSURE 0x0400 ok 79 - FFI_PL_TYPE_CLOSURE 0x0504 ok 80 - FFI_PL_BASE_RECORD 0x0800 ok 81 - FFI_PL_TYPE_RECORD 0x0904 ok 82 - FFI_PL_BASE_MASK 0x0ff8 ok 83 - FFI_PL_SHAPE_POINTER 0x1000 ok 84 - FFI_PL_SHAPE_ARRAY 0x2000 ok 85 - FFI_PL_SHAPE_CUSTOM_PERL 0x4000 ok 86 - FFI_PL_SHAPE_CUSTOM_MASK 0xf000 1..86 ok 1 - basic 1..1 ok t/ffi_platypus_lang.t .................... # Subtest: Foo constructor ok 1 - int is not an okay type # unknown type: int at t/ffi_platypus_lang.t line 14. ok 2 - foo_t is an okay type ok 3 - sint16 is an okay type ok 4 - sizeof foo_t = 2 ok 5 - sizeof foo_t = 4 ok 6 1..6 ok 1 - Foo constructor # Subtest: Foo attribute ok 1 - int is not an okay type # unknown type: int at t/ffi_platypus_lang.t line 34. ok 2 - foo_t is an okay type ok 3 - sint16 is an okay type ok 4 - sizeof foo_t = 2 ok 5 - sizeof foo_t = 4 ok 6 1..6 ok 2 - Foo attribute # Subtest: MyLang::Roger ok 1 - int is not an okay type # unknown type: int at t/ffi_platypus_lang.t line 53. ok 2 - sizeof foo_t = 4 1..2 ok 3 - MyLang::Roger 1..3 ok t/ffi_platypus_lang_asm.t ................ # Subtest: ASM ok 1 - int is not an okay type # unknown type: int at t/ffi_platypus_lang_asm.t line 13. ok 2 - foo_t is not an okay type # unknown type: foo_t at t/ffi_platypus_lang_asm.t line 16. ok 3 - sint16 is an okay type ok 4 - unable to find unmangled name 1..4 ok 1 - ASM 1..1 ok t/ffi_platypus_lang_c.t .................. # Subtest: C ok 1 - int is an okay type ok 2 - foo_t is not an okay type # unknown type: foo_t at t/ffi_platypus_lang_c.t line 15. ok 3 - sint16 is an okay type ok 4 - unable to find unmangled name 1..4 ok 1 - C 1..1 ok t/ffi_platypus_lang_win32.t .............. # BOOL sint32 # BOOLEAN uint8 # BYTE uint8 # CCHAR sint8 # CHAR sint8 # COLORREF uint32 # DWORD uint32 # DWORD32 uint32 # DWORD64 uint64 # DWORDLONG uint64 # DWORD_PTR uint16 # FLOAT float # HACCEL opaque # HALF_PTR sint16 # HANDLE opaque # HBITMAP opaque # HBRUSH opaque # HCOLORSPACE opaque # HCONV opaque # HCONVLIST opaque # HCURSOR opaque # HDC opaque # HDDEDATA opaque # HDESK opaque # HDROP opaque # HDWP opaque # HENHMETAFILE opaque # HFILE sint32 # HFONT opaque # HGDIOBJ opaque # HGLOBAL opaque # HHOOK opaque # HICON opaque # HINSTANCE opaque # HKEY opaque # HKL opaque # HLOCAL opaque # HMENU opaque # HMETAFILE opaque # HMODULE opaque # HMONITOR opaque # HPALETTE opaque # HPEN opaque # HRESULT sint32 # HRGN opaque # HRSRC opaque # HSZ opaque # HWINSTA opaque # HWND opaque # INT sint32 # INT16 sint16 # INT32 sint32 # INT64 sint64 # INT8 sint8 # INT_PTR sint32 # LANGID uint16 # LCID uint32 # LCTYPE uint32 # LGRPID uint32 # LONG sint32 # LONG32 sint32 # LONG64 sint64 # LONGLONG sint64 # LONG_PTR sint16 # LPCSTR string # LPCVOID opaque # LPVOID opaque # LRESULT sint16 # PSTR string # PVOID opaque # QWORD uint64 # SC_HANDLE opaque # SC_LOCK opaque # SERVICE_STATUS_HANDLE opaque # SHORT sint16 # SIZE_T uint16 # SSIZE_T sint16 # UCHAR uint8 # UHALF_PTR uint16 # UINT16 uint16 # UINT32 uint32 # UINT64 uint64 # UINT8 uint8 # UINT_PTR uint32 # ULONG uint32 # ULONG32 uint32 # ULONG64 uint64 # ULONGLONG uint64 # ULONG_PTR uint16 # USHORT uint16 # USN sint64 # VOID void # WORD uint16 # WPARAM uint32 # blkcnt_t sint64 # blksize_t sint64 # bool uint8 # char sint8 # dev_t uint64 # double double # double complex longdouble # float float # float complex double # gid_t uint32 # ino_t uint64 # int sint32 # int16_t sint16 # int32_t sint32 # int64_t sint64 # int8_t sint8 # intptr_t sint64 # long sint64 # long double longdouble # long double complex longdouble # long long sint64 # mode_t uint32 # nlink_t uint64 # off_t sint64 # ptrdiff_t sint64 # short sint16 # signed char sint8 # signed int sint32 # signed long sint64 # signed long long sint64 # signed short sint16 # size_t uint64 # ssize_t sint64 # time_t sint64 # uchar uint8 # uid_t uint32 # uint uint32 # uint16_t uint16 # uint32_t uint32 # uint64_t uint64 # uint8_t uint8 # uintptr_t uint64 # ulong uint64 # unsigned char uint8 # unsigned int uint32 # unsigned long uint64 # unsigned long long uint64 # unsigned short uint16 # ushort uint16 # wchar_t sint32 # wint_t uint32 ok 1 - good 1..1 ok t/ffi_platypus_memory.t .................. # lib=undef # lib=/data/fly2400/cpanfly-5.24/var/tmp/cpan_build/FFI-Platypus-0.88-Aem0xf/blib/lib/auto/share/dist/FFI-Platypus/lib/libplfill.so # Subtest: malloc calloc memset free ok 1 - malloc returns 43735808 ok 2 - calloc returns 41845376 ok 3 - string = yyyyxxxx ok 4 - free $ptr1 ok 5 - free $ptr2 1..5 ok 1 - malloc calloc memset free # Subtest: memcpy ok 1 - initial data copied ok 2 - copy of copy ok 3 - memcpy returns a pointer ok 4 - free $ptr1 ok 5 - free $ptr2 1..5 ok 2 - memcpy # Subtest: realloc ok 1 - realloc call ptr = 46345616 ok 2 - initial data copied ok 3 - realloc call ptr = 46928928 (2) ok 4 - after realloc data there ok 5 - final free 1..5 ok 3 - realloc # Subtest: strdup # strdup implementation = libc ok 1 - string = this and ok 2 - free $ptr1 1..2 ok 4 - strdup # Subtest: strndup # strndup implementation = libc # Subtest: full string ok 1 1..1 ok 1 - full string # Subtest: partial string ok 1 1..1 ok 2 - partial string 1..2 ok 5 - strndup 1..5 ok t/ffi_platypus_record.t .................. # Subtest: integer accessor ok 1 - An object of class 'Foo1' isa 'Foo1' ok 2 - foo._record_size = 8 ok 3 - foo.first = 1 ok 4 - foo.second = 2 ok 5 - foo.first = 22 ok 6 - foo.second = 42 ok 7 - foo.first = 3 ok 8 - foo.second = 4 # {'ffi_type' => 'pointer','ref' => 1,'size' => 8,'type' => 'record','type_code' => 2308} # {'ffi_type' => 'pointer','ref' => 0,'size' => 8,'type' => 'record','type_code' => 2308} 1..8 ok 1 - integer accessor # Subtest: values match in C ok 1 - An object of class 'Color' isa 'Color' ok 2 - color.get_red = 50 ok 3 - color.get_green = 100 ok 4 - color.get_blue = 150 1..4 ok 2 - values match in C # Subtest: complex alignment ok 1 - An object of class 'Foo2' isa 'Foo2' ok 2 - uint64 = 512 ok 3 - sint64 = -512 ok 4 - uint32 = 1024 ok 5 - sint32 = -1024 ok 6 - uint16 = 2048 ok 7 - sint16 = -2048 ok 8 - uint8 = 48 ok 9 - sint8 = -48 ok 10 - float = 1.5 ok 11 - double = -1.5 ok 12 - get_opaque = 45599344 ok 13 - opaque = 45599344 ok 14 - get_opaque = undef ok 15 - opaque = undef 1..15 ok 3 - complex alignment # Subtest: same name ok 1 - two members of the same name not allowed # accessor/method foo already exists at t/ffi_platypus_record.t line 187. 1..1 ok 4 - same name # Subtest: array alignment ok 1 - An object of class 'Foo4' isa 'Foo4' # Subtest: unsigned 8 integer ok 1 - uint8 = 1,2,3 ok 2 - get_uint8 = 1,2,3 ok 3 - uint8(1) = 2 ok 4 - uint8 = 1,20,3 1..4 ok 2 - unsigned 8 integer # Subtest: signed 8 integer ok 1 - sint8 = -1,2,-3 ok 2 - get_sint8 = -1,2,-3 ok 3 - sint8(2) = -3 ok 4 - sint8 = -1,-20,-3 1..4 ok 3 - signed 8 integer # Subtest: unsigned 16 integer ok 1 - uint16 = 1,2,3 ok 2 - get_uint16 = 1,2,3 ok 3 - uint16(1) = 2 ok 4 - uint16 = 1,20,3 1..4 ok 4 - unsigned 16 integer # Subtest: signed 16 integer ok 1 - sint16 = -1,2,-3 ok 2 - get_sint16 = -1,2,-3 ok 3 - sint16(2) = -3 ok 4 - sint16 = -1,-20,-3 1..4 ok 5 - signed 16 integer # Subtest: unsigned 32 integer ok 1 - uint32 = 1,2,3 ok 2 - get_uint32 = 1,2,3 ok 3 - uint32(1) = 2 ok 4 - uint32 = 1,20,3 1..4 ok 6 - unsigned 32 integer # Subtest: signed 32 integer ok 1 - sint32 = -1,2,-3 ok 2 - get_sint32 = -1,2,-3 ok 3 - sint32(2) = -3 ok 4 - sint32 = -1,-20,-3 1..4 ok 7 - signed 32 integer # Subtest: unsigned 64 integer ok 1 - uint64 = 1,2,3 ok 2 - get_uint64 = 1,2,3 ok 3 - uint64(1) = 2 ok 4 - uint64 = 1,20,3 1..4 ok 8 - unsigned 64 integer # Subtest: signed 64 integer ok 1 - sint64 = -1,2,-3 ok 2 - get_sint64 = -1,2,-3 ok 3 - sint64(2) = -3 ok 4 - sint64 = -1,-20,-3 1..4 ok 9 - signed 64 integer # Subtest: float ok 1 - float = 1.5,0,-1.5 ok 2 ok 3 ok 4 ok 5 - float = 1.5,20,-1.5 1..5 ok 10 - float # Subtest: double ok 1 - double = 1.5,0,-1.5 ok 2 ok 3 ok 4 ok 5 - double = 1.5,20,-1.5 1..5 ok 11 - double # Subtest: opaque ok 1 - opaque = 43251040,undef,43250576 ok 2 - opaque = 43251040,43251040,43250576 ok 3 - opaque = undef,43251040,43250576 ok 4 ok 5 ok 6 1..6 ok 12 - opaque ok 13 - align = 8 ok 14 - align is positive 1..14 ok 5 - array alignment # Subtest: string ro ok 1 - An object of class 'Foo5' isa 'Foo5' ok 2 - foo.value = undef ok 3 - foo.get_value = undef ok 4 - foo.value = my value ok 5 - foo.get_value = my value ok 6 - value is ro # member is read only at t/ffi_platypus_record.t line 341. ok 7 - foo.value = undef ok 8 - foo.get_value = undef 1..8 ok 6 - string ro # Subtest: fixed string ok 1 - An object of class 'Foo6' isa 'Foo6' ok 2 - foo.value = "\0\0\0\0\0\0\0\0\0\0" ok 3 - foo.get_value = "" ok 4 - foo.value = "one two th" ok 5 - foo.value = 123456789\0 ok 6 - foo.get_value = 123456789 1..6 ok 7 - fixed string # Subtest: string rw ok 1 - An object of class 'Foo7' isa 'Foo7' ok 2 - foo.value = hi there ok 3 - foo.get_value = hi there ok 4 - foo.value = undef ok 5 - foo.get_value = undef ok 6 - foo.value = starscream!!! ok 7 - foo.get_value = starscream!!! 1..7 ok 8 - string rw 1..8 ok t/ffi_platypus_record_tiearray.t ......... ok 1 - An object of class 'Foo' isa 'Foo' ok 2 ok 3 ok 4 ok 5 ok 6 ok 7 ok 8 ok 9 ok 10 ok 11 ok 12 ok 13 ok 14 ok 15 ok 16 ok 17 ok 18 ok 19 ok 20 ok 21 ok 22 ok 23 ok 24 ok 25 ok 26 ok 27 ok 28 ok 29 ok 30 ok 31 ok 32 ok 33 ok 34 ok 35 ok 36 ok 37 ok 38 ok 39 ok 40 ok 41 ok 42 ok 43 ok 44 ok 45 1..45 ok t/ffi_platypus_shareconfig.t ............. # { # 'abi' => { # 'default_abi' => '2', # 'fastcall' => '4', # 'pascal' => '6', # 'register' => '7', # 'stdcall' => '5', # 'sysv' => '1', # 'thiscall' => '3', # 'unix64' => '2' # }, # 'alien' => { # 'class' => 'Alien::FFI', # 'mode' => 'already-installed' # }, # 'align' => { # 'double' => '8', # 'double complex' => '8', # 'float' => '4', # 'float complex' => '4', # 'long double' => '16', # 'long double complex' => '16', # 'pointer' => '8', # 'sint16' => '2', # 'sint32' => '4', # 'sint64' => '8', # 'sint8' => '1', # 'uint16' => '2', # 'uint32' => '4', # 'uint64' => '8', # 'uint8' => '1' # }, # 'ccflags' => '-I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include', # 'config_dlext' => [ # 'so' # ], # 'diag' => {}, # 'extra_compiler_flags' => [ # '-I/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/libffi-3.2.1/include' # ], # 'extra_linker_flags' => [ # '-L/data/fly2400/cpanfly-5.24/var/megalib/auto/share/dist/Alien-FFI/lib/../lib', # '-lffi' # ], # 'probe' => { # 'abi' => 1, # 'alloca' => 1, # 'bigendian' => 0, # 'bigendian64' => 0, # 'longdouble' => 1 # }, # 'test-key' => 'test-value', # 'type_map' => { # 'blkcnt_t' => 'sint64', # 'blksize_t' => 'sint64', # 'bool' => 'uint8', # 'char' => 'sint8', # 'dev_t' => 'uint64', # 'double' => 'double', # 'double complex' => 'longdouble', # 'float' => 'float', # 'float complex' => 'double', # 'gid_t' => 'uint32', # 'ino_t' => 'uint64', # 'int' => 'sint32', # 'int16_t' => 'sint16', # 'int32_t' => 'sint32', # 'int64_t' => 'sint64', # 'int8_t' => 'sint8', # 'intptr_t' => 'sint64', # 'long' => 'sint64', # 'long double' => 'longdouble', # 'long double complex' => 'longdouble', # 'long long' => 'sint64', # 'mode_t' => 'uint32', # 'nlink_t' => 'uint64', # 'off_t' => 'sint64', # 'ptrdiff_t' => 'sint64', # 'short' => 'sint16', # 'signed char' => 'sint8', # 'signed int' => 'sint32', # 'signed long' => 'sint64', # 'signed long long' => 'sint64', # 'signed short' => 'sint16', # 'size_t' => 'uint64', # 'ssize_t' => 'sint64', # 'time_t' => 'sint64', # 'uchar' => 'uint8', # 'uid_t' => 'uint32', # 'uint' => 'uint32', # 'uint16_t' => 'uint16', # 'uint32_t' => 'uint32', # 'uint64_t' => 'uint64', # 'uint8_t' => 'uint8', # 'uintptr_t' => 'uint64', # 'ulong' => 'uint64', # 'unsigned char' => 'uint8', # 'unsigned int' => 'uint32', # 'unsigned long' => 'uint64', # 'unsigned long long' => 'uint64', # 'unsigned short' => 'uint16', # 'ushort' => 'uint16', # 'wchar_t' => 'sint32', # 'wint_t' => 'uint32' # } # } # 0 ok 1 ok 2 1..2 ok t/ffi_platypus_type_pointersizebuffer.t .. ok 1 ok 2 ok 3 ok 4 ok 5 1..5 ok t/ffi_platypus_type_stringarray.t ........ # Subtest: fixed length input # Subtest: with default ok 1 - a1(0) = foo ok 2 - a1(0) = bar ok 3 - a1(0) = baz ok 4 - a1(0) = hey ok 5 - a1(0) = five ok 6 - a1(0) = undef 1..6 ok 1 - with default # Subtest: with default ok 1 - a2(0) = foo ok 2 - a2(0) = bar ok 3 - a2(0) = baz ok 4 - a2(0) = undef ok 5 - a2(0) = five ok 6 - a2(0) = undef 1..6 ok 2 - with default 1..2 ok 1 - fixed length input # Subtest: variable length input ok 1 - get_string_from_array(@list, 0) = foo ok 2 - get_string_from_array(@list, 1) = bar ok 3 - get_string_from_array(@list, 2) = baz ok 4 - get_string_from_array(@list, 3) = undef 1..4 ok 2 - variable length input # Subtest: fixed length return ok 1 - returns null ok 2 - returns with just strings ok 3 - returns with NULL/undef in the middle ok 4 - returns with NULL/undef in the middle with default 1..4 ok 3 - fixed length return # Subtest: null terminated return ok 1 - returns null ok 2 ok 3 ok 4 1..4 ok 4 - null terminated return 1..4 ok t/ffi_platypus_type_stringpointer.t ...... # Subtest: arg pass in ok 1 - not null ok 2 - \undef is null ok 3 - undef is null 1..3 ok 1 - arg pass in # Subtest: arg pass out ok 1 - not null string = hi there ok 2 - not null string = and another 1..2 ok 2 - arg pass out # Subtest: return value ok 1 - not null string = once more onto ok 2 - \null ok 3 - null 1..3 ok 3 - return value 1..3 ok t/ffi_probe.t ............................ # Subtest: check_header ok 1 - An object of class 'FFI::Probe' isa 'FFI::Probe' # PR header."stdio.h"=1 # PR header."bogus/does/not/exist.h"=0 ok 2 ok 3 # ==probe.log== # code: #include # CC ffi-probe-xbeF26/ffi_build_S6Oygv.c # header."stdio.h"=1 # code: #include # code: #include # +gcc -fPIC -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -c ffi-probe-xbeF26/ffi_build_QUX5w_.c -o ffi-probe-xbeF26/_build/ffi_build_QUX5w_.c.o # ffi-probe-xbeF26/ffi_build_QUX5w_.c:2:34: fatal error: bogus/does/not/exist.h: No such file or directory # compilation terminated. # header."bogus/does/not/exist.h"=0 # ==probe.pl== # do { my $x = { # 'header' => { # 'bogus/does/not/exist.h' => 0, # 'stdio.h' => 1 # } # }; # $x;} ok 4 ok 5 # ok 6 ok 7 # ==probe2.log== # ==probe.pl== # do { my $x = { # 'header' => { # 'bogus/does/not/exist.h' => 0, # 'stdio.h' => 1 # } # }; # $x;} 1..7 ok 1 - check_header # Subtest: check_eval # PR foo.bar.baz=3 ok 1 - foo.bar.baz ok 2 # PR foo.bar.string=hello world 7 ok 3 - foo.bar.string ok 4 # PR header."stddef.h"=1 # PR type.unsigned char.align=1 # PR type.unsigned char.sign=unsigned # PR type.unsigned char.size=1 ok 5 ok 6 ok 7 ok 8 # PR type.float.align=4 # PR type.float.size=4 ok 9 ok 10 ok 11 # PR type.pointer.align=8 # PR type.pointer.size=8 ok 12 ok 13 ok 14 # ==probe.log== # code: #include # code: # code: # code: # code: # code: int # code: dlmain(int argc, char *argv[]) # code: { # code: # code: # code: printf("eval1=<<<%d>>>\n", 1+2); # code: # code: return 0; # code: } # [build] # CC ffi-probe-z1D3YX/ffi_build_FUnXOZ.c # LD ffi-probe-z1D3YX/libeval1.so # [stdout] # eval1=<<<3>>> # [stderr] # # rv = 0 # foo.bar.baz=3 # code: #include # code: # code: char buffer[256]; # code: # code: # code: int # code: dlmain(int argc, char *argv[]) # code: { # code: sprintf(buffer, "hello world %d", 3+4); # code: # code: printf("eval1=<<<%s>>>\n", buffer); # code: # code: return 0; # code: } # [build] # CC ffi-probe-z1D3YX/ffi_build_K468KT.c # LD ffi-probe-z1D3YX/libeval2.so # [stdout] # eval1=<<>> # [stderr] # # rv = 0 # foo.bar.string=hello world 7 # code: #include # CC ffi-probe-z1D3YX/ffi_build_diYRNI.c # header."stddef.h"=1 # code: #include # code: #include # code: # code: #define signed(type) (((type)-1) < 0) ? "signed" : "unsigned" # code: struct align { char a; unsigned char b; }; # code: # code: # code: int # code: dlmain(int argc, char *argv[]) # code: { # code: # code: # code: printf("eval1=<<<%d>>>\n", (int)offsetof(struct align, b)); # code: printf("eval2=<<<%s>>>\n", signed(unsigned char)); # code: printf("eval3=<<<%d>>>\n", (int)sizeof(unsigned char)); # code: # code: return 0; # code: } # [build] # CC ffi-probe-z1D3YX/ffi_build_NueudY.c # LD ffi-probe-z1D3YX/libeval4.so # [stdout] # eval1=<<<1>>> # eval2=<<>> # eval3=<<<1>>> # [stderr] # # rv = 0 # type.unsigned char.align=1 # type.unsigned char.sign=unsigned # type.unsigned char.size=1 # code: #include # code: #include # code: # code: struct align { char a; float b; }; # code: # code: # code: int # code: dlmain(int argc, char *argv[]) # code: { # code: # code: # code: printf("eval1=<<<%d>>>\n", (int)offsetof(struct align, b)); # code: printf("eval2=<<<%d>>>\n", (int)sizeof(float)); # code: # code: return 0; # code: } # [build] # CC ffi-probe-z1D3YX/ffi_build_xWH4hN.c # LD ffi-probe-z1D3YX/libeval5.so # [stdout] # eval1=<<<4>>> # eval2=<<<4>>> # [stderr] # # rv = 0 # type.float.align=4 # type.float.size=4 # code: #include # code: #include # code: # code: struct align { char a; void* b; }; # code: # code: # code: int # code: dlmain(int argc, char *argv[]) # code: { # code: # code: # code: printf("eval1=<<<%d>>>\n", (int)offsetof(struct align, b)); # code: printf("eval2=<<<%d>>>\n", (int)sizeof(void *)); # code: # code: return 0; # code: } # [build] # CC ffi-probe-z1D3YX/ffi_build_Hy7b9j.c # LD ffi-probe-z1D3YX/libeval6.so # [stdout] # eval1=<<<8>>> # eval2=<<<8>>> # [stderr] # # rv = 0 # type.pointer.align=8 # type.pointer.size=8 # ==probe.pl== # do { my $x = { # 'foo' => { # 'bar' => { # 'baz' => '3', # 'string' => 'hello world 7' # } # }, # 'header' => { # 'stddef.h' => 1 # }, # 'type' => { # 'float' => { # 'align' => '4', # 'size' => '4' # }, # 'pointer' => { # 'align' => '8', # 'size' => '8' # }, # 'unsigned char' => { # 'align' => '1', # 'sign' => 'unsigned', # 'size' => '1' # } # } # }; # $x;} 1..14 ok 2 - check_eval 1..2 ok t/ffi_probe_runner.t ..................... # Subtest: basic # exe=blib/lib/auto/share/dist/FFI-Platypus/probe/bin/dlrun ok 1 - An object of class 'FFI::Probe::Runner' isa 'FFI::Probe::Runner' ok 2 ok 3 1..3 ok 1 - basic # Subtest: run not pass # CC corpus/ffi_probe_runner/foo.c # LD test-probe-ifoQkY/libfrooble1.so # lib=test-probe-ifoQkY/libfrooble1.so ok 1 ok 2 ok 3 ok 4 ok 5 ok 6 ok 7 ok 8 ok 9 1..9 ok 2 - run not pass # Subtest: run pass # CC corpus/ffi_probe_runner/bar.c # LD test-probe-Ze6_yr/libfrooble2.so # lib=test-probe-Ze6_yr/libfrooble2.so ok 1 ok 2 ok 3 ok 4 ok 5 ok 6 ok 7 ok 8 ok 9 1..9 ok 3 - run pass 1..3 ok t/ffi_probe_runner_builder.t ............. # dir = test-probe-rRwzvI # libs=-ldl # libs= # libs=-lpthread # libs=-lnsl # libs=-lm # libs=-lcrypt # libs=-lutil # libs=-lc ok 1 - An object of class 'FFI::Probe::Runner::Builder' isa 'FFI::Probe::Runner::Builder' # +gcc -D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fwrapv -fno-strict-aliasing -pipe -fstack-protector -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -c -o test-probe-rRwzvI/src/dlrun.o test-probe-rRwzvI/src/dlrun.c # +gcc -fstack-protector -o test-probe-rRwzvI/bin/dlrun test-probe-rRwzvI/src/dlrun.o -ldl # +test-probe-rRwzvI/bin/dlrun verify self # dlrun verify self ok ok 2 - no error ok 3 - executable exists # exe = test-probe-rRwzvI/bin/dlrun # + test-probe-rRwzvI/bin/dlrun verify self # dlrun verify self ok ok 4 - verify ok # + ldd test-probe-rRwzvI/bin/dlrun # linux-vdso.so.1 => (0x00007fffc1b83000) # libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00002af17bac2000) # libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00002af17bcc6000) # /lib64/ld-linux-x86-64.so.2 (0x00002af17b89d000) 1..4 ok t/ffi_probe_runner_result.t .............. ok 1 - An object of class 'FFI::Probe::Runner::Result' isa 'FFI::Probe::Runner::Result' ok 2 ok 3 - An object of class 'FFI::Probe::Runner::Result' isa 'FFI::Probe::Runner::Result' ok 4 ok 5 ok 6 - An object of class 'FFI::Probe::Runner::Result' isa 'FFI::Probe::Runner::Result' ok 7 ok 8 1..8 ok Can't locate object method "tid" via package "threads" at /data/fly2400/cpanfly-5.24/var/megalib/Test2/Util.pm line 142. BEGIN failed--compilation aborted at t/forks.t line 4. Undefined subroutine &threads::_END called at (eval 66) line 1. END failed--call queue aborted at t/forks.t line 4. Can't locate object method "tid" via package "threads" at /data/fly2400/cpanfly-5.24/var/megalib/Test2/Util.pm line 142. END failed--call queue aborted at t/forks.t line 4. t/forks.t ................................ Dubious, test returned 22 (wstat 5632, 0x1600) No subtests run t/gh117.t ................................ # value64 = 1099511627775 ok 1 1..1 ok t/threads.t .............................. ok 1 - works in a thread ok 2 - works in main thread 1..2 ok t/type_complex_double.t .................. skipped: Test requires support for double complex t/type_complex_float.t ................... skipped: Test requires support for float complex t/type_double.t .......................... ok 1 - add(1.5,2.5) = 4 ok 2 - add() = 0.0 ok 3 - inc(\$i,4.25) = \7.75 ok 4 - i=3.5+4.25 ok 5 - inc(\3,4) = \7 ok 6 - sum([1..10]) = 55 ok 7 - sum2([1..10],10) = 55 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [-5.5, 5.5, -10, 10, -15.5, 15.5, 20, -20, 25.5, -25.5] ok 14 - null2() == undef ok 15 - call_closure(2.5) = 4.75 ok 16 - call_closure(2.5) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(1.25,2.5) = 4 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(1,1) = 2.25 1..2 ok 18 - custom type output ok 19 - closure_pointer_is_null() = 1 1..19 ok t/type_float.t ........................... ok 1 - add(1.5,2.5) = 4 ok 2 - add() = 0.0 ok 3 - inc(\$i,4.25) = \7.75 ok 4 - i=3.5+4.25 ok 5 - inc(\3,4) = \7 ok 6 - sum([1..10]) = 55 ok 7 - sum2([1..10],10) = 55 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [-5.5, 5.5, -10, 10, -15.5, 15.5, 20, -20, 25.5, -25.5] ok 14 - null2() == undef ok 15 - call_closure(2.5) = 4.75 ok 16 - call_closure(2.5) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(1.25,2.5) = 4 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(1,1) = 2.25 1..2 ok 18 - custom type output ok 19 - closure_pointer_is_null() = 1 1..19 ok t/type_longdouble.t ...................... # Subtest: with Math::LongDouble # Subtest: scalar ok 1 - An object of class 'Math::LongDouble' isa 'Math::LongDouble' ok 2 - add(1.5,2.5) = 4.0 1..2 ok 1 - scalar # Subtest: pointer ok 1 ok 2 ok 3 ok 4 ok 5 - An object of class 'Math::LongDouble' isa 'Math::LongDouble' ok 6 1..6 ok 2 - pointer # Subtest: array fixed ok 1 # [1.0e+00,2.0e+00,3.0e+00] ok 2 ok 3 ok 4 1..4 ok 3 - array fixed # Subtest: array var ok 1 # [1.0e+00,2.0e+00,3.0e+00] ok 2 ok 3 ok 4 1..4 ok 4 - array var # Subtest: array return # [1.0e+00,2.0e+00,3.0e+00] ok 1 ok 2 ok 3 1..3 ok 5 - array return 1..5 ok 1 - with Math::LongDouble # Subtest: without Math::LongDouble # You have Math::LongDouble, but for this test we are going to turn it off # Subtest: scalar ok 1 - add(1.5,2.5) = 4 1..1 ok 1 - scalar # Subtest: pointer ok 1 ok 2 ok 3 ok 4 ok 5 1..5 ok 2 - pointer # Subtest: array fixed ok 1 # [1,2,3] ok 2 ok 3 ok 4 1..4 ok 3 - array fixed # Subtest: array var ok 1 # [1,2,3] ok 2 ok 3 ok 4 1..4 ok 4 - array var # Subtest: array return # [1,2,3] ok 1 ok 2 ok 3 1..3 ok 5 - array return 1..5 ok 2 - without Math::LongDouble 1..2 ok t/type_opaque.t .......................... ok 1 - null = undef ok 2 - is_null(undef) == 1 ok 3 - is_null() == 1 ok 4 - is_null($ptr) = 0 ok 5 - setp(47932352); getp() = 47932352 ok 6 - get($tmp); tmp = 47932352 ok 7 - get(\$tmp); \$tmp = undef ok 8 - aa_in([one two three]) ok 9 - aa_null_in([undef,undef,undef]) ok 10 - aa_out() ok 11 - aa_null_out() ok 12 - ra_out() ok 13 - ra_out_nt() ok 14 - ra_null_out ok 15 - pp2p(\undef) = undef ok 16 - pp2p(\48234608) = 48234608 ok 17 - p2pp(undef) = \undef ok 18 - pp2p(48234608) = \48234608 ok 19 - call_closure(undef) = undef ok 20 - save = undef ok 21 - call_closure(\48256736) = 48256736 ok 22 - save = 48256736 # Subtest: custom type input ok 1 ok 2 1..2 ok 23 - custom type input # Subtest: custom type output ok 1 ok 2 1..2 ok 24 - custom type output 1..24 ok t/type_record.t .......................... # record size = 20 # Subtest: not a reference # Subtest: in # packed size = 20 ok 1 - get_value($packed) = 42 ok 2 - get_name($packed) = hi there ok 3 - is_null(undef) 1..3 ok 1 - in # Subtest: out # packed size = 20 ok 1 - get_value($packed) = 47 ok 2 - get_value($packed) = platypus ok 3 - null() = undef 1..3 ok 2 - out 1..2 ok 1 - not a reference # Subtest: is a reference # Subtest: in # packed size = 20 ok 1 - get_value(\$packed) = 42 ok 2 - get_name(\$packed) = hi there ok 3 - is_null(\undef) 1..3 ok 1 - in # Subtest: out # packed size = 31 ok 1 - An object of class 'My::FooRecord' isa 'My::FooRecord' ok 2 - packed.my_method = starscream ok 3 - get_value($packed) = 47 ok 4 - get_value($packed) = platypus ok 5 - null() = \undef 1..5 ok 2 - out 1..2 ok 2 - is a reference # Subtest: closure ok 1 - allow record type as arg ok 2 ok 3 ok 4 ok 5 ok 6 ok 7 # error = record is read-only at t/type_record.t line 126. ok 8 ok 9 ok 10 ok 11 # error = record is read-only at t/type_record.t line 135. ok 12 ok 13 # error = record is read-only at t/type_record.t line 142. ok 14 ok 15 ok 16 # error = record is read-only at t/type_record.t line 151. ok 17 ok 18 ok 19 # error = record is read-only at t/type_record.t line 160. ok 20 ok 21 # error = record is read-only at t/type_record.t line 167. ok 22 ok 23 # error = record is read-only at t/type_record.t line 175. ok 24 ok 25 ok 26 # error = record is read-only at t/type_record.t line 184. ok 27 ok 28 ok 29 ok 30 ok 31 ok 32 1..32 ok 3 - closure 1..3 ok t/type_sint16.t .......................... ok 1 - add(-1,2) = 1 ok 2 - add() = 0 ok 3 - inc(\$i,4) = \1 ok 4 - i=1 ok 5 - inc(\-3,4) = \1 ok 6 - sum([-5..4]) = -5 ok 7 - sum([-5..4],10) = -5 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [-1,2,-3,4,-5,6,-7,8,-9,10] ok 14 - null2() == undef ok 15 - call_closure(-2) = -4 ok 16 - call_closure(2) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(-2,-1) = -5 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(-2,-1) = -6 1..2 ok 18 - custom type output ok 19 - closure_pointer_is_null() = 1 1..19 ok t/type_sint32.t .......................... ok 1 - add(-1,2) = 1 ok 2 - add() = 0 ok 3 - inc(\$i,4) = \1 ok 4 - i=1 ok 5 - inc(\-3,4) = \1 ok 6 - sum([-5..4]) = -5 ok 7 - sum([-5..4],10) = -5 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [-1,2,-3,4,-5,6,-7,8,-9,10] ok 14 - null2() == undef ok 15 - call_closure(-2) = -4 ok 16 - call_closure(2) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(-2,-1) = -5 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(-2,-1) = -6 1..2 ok 18 - custom type output ok 19 - closure_pointer_is_null() = 1 1..19 ok t/type_sint64.t .......................... ok 1 - add(-1,2) = 1 ok 2 - add() = 0 ok 3 - inc(\$i,4) = \1 ok 4 - i=1 ok 5 - inc(\-3,4) = \1 ok 6 - sum([-5..4]) = -5 ok 7 - sum([-5..4],10) = -5 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [-1,2,-3,4,-5,6,-7,8,-9,10] ok 14 - null2() == undef ok 15 - call_closure(-2) = -4 ok 16 - call_closure(2) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(-2,-1) = -5 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(-2,-1) = -6 1..2 ok 18 - custom type output ok 19 - closure_pointer_is_null() = 1 1..19 ok t/type_sint8.t ........................... ok 1 - add(-1,2) = 1 ok 2 - add() = 0 ok 3 - inc(\$i,4) = \1 ok 4 - i=1 ok 5 - inc(\-3,4) = \1 ok 6 - sum([-5..4]) = -5 ok 7 - sum([-5..4],10) = -5 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [-1,2,-3,4,-5,6,-7,8,-9,10] ok 14 - null2() == undef ok 15 - call_closure(-2) = -4 ok 16 - call_closure(2) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(-2,-1) = -5 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(-2,-1) = -6 1..2 ok 18 - custom type output ok 19 - closure_pointer_is_null() = 1 1..19 ok t/type_string.t .......................... ok 1 - string_matches_foobarbaz(foobarbaz) = true ok 2 - string_matches_foobarbaz(foobarbaz) = false ok 3 - string_return_foobarbaz() = foobarbaz ok 4 - null() = undef ok 5 - is_null(undef) = 1 ok 6 - is_null() = 1 ok 7 - is_null("foo") = 0 ok 8 - $save = hey there ok 9 - $save = undef ok 10 - fixed_input_test(foobarbaz\0) ok 11 - fixed_input_is_null(undef) ok 12 - string_fixed_text(0) = zero ok 13 - string_fixed_text(1) = one ok 14 - string_fixed_text(2) = two ok 15 - string_fixed_text(3) = three ok 16 - fixed_output_null() ok 17 - save=zero ok 18 ok 19 ok 20 ok 21 ok 22 ok 23 ok 24 ok 25 # Subtest: fixed length input # Subtest: with default ok 1 - a2(0) = foo ok 2 - a2(0) = bar ok 3 - a2(0) = baz ok 4 - a2(0) = undef ok 5 - a2(0) = five 1..5 ok 1 - with default 1..1 ok 26 - fixed length input # Subtest: variable length input ok 1 - get_string_from_array(@list, 0) = foo ok 2 - get_string_from_array(@list, 1) = bar ok 3 - get_string_from_array(@list, 2) = baz ok 4 - get_string_from_array(@list, 3) = undef 1..4 ok 27 - variable length input # Subtest: fixed length return ok 1 - returns null ok 2 - returns with just strings ok 3 - returns with NULL/undef in the middle 1..3 ok 28 - fixed length return # Subtest: null terminated return ok 1 - returns null ok 2 ok 3 ok 4 1..4 ok 29 - null terminated return # Subtest: argument update ok 1 1..1 ok 30 - argument update # Subtest: write to string ok 1 1..1 ok 31 - write to string 1..31 ok t/type_uint16.t .......................... ok 1 - add(1,2) = 3 ok 2 - add() = 0 ok 3 - inc(\$i,4) = \7 ok 4 - i=3+4 ok 5 - inc(\3,4) = \7 ok 6 - sum([1..10]) = 55 ok 7 - sum2([1..10],10) = 55 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [1,4,6,8,10,12,14,16,18,20] ok 14 - null2() == undef ok 15 - call_closure(2) = 4 ok 16 - call_closure(2) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(2,1) = 5 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(1,1) = 4 1..2 ok 18 - custom type output # Subtest: custom type post ok 1 ok 2 - custom_add3(1,2) = 3 1..2 ok 19 - custom type post ok 20 - closure_pointer_is_null() = 1 1..20 ok t/type_uint32.t .......................... ok 1 - add(1,2) = 3 ok 2 - add() = 0 ok 3 - inc(\$i,4) = \7 ok 4 - i=3+4 ok 5 - inc(\3,4) = \7 ok 6 - sum([1..10]) = 55 ok 7 - sum2([1..10],10) = 55 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [1,4,6,8,10,12,14,16,18,20] ok 14 - null2() == undef ok 15 - call_closure(2) = 4 ok 16 - call_closure(2) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(2,1) = 5 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(1,1) = 4 1..2 ok 18 - custom type output # Subtest: custom type post ok 1 ok 2 - custom_add3(1,2) = 3 1..2 ok 19 - custom type post ok 20 - closure_pointer_is_null() = 1 1..20 ok t/type_uint64.t .......................... ok 1 - add(1,2) = 3 ok 2 - add() = 0 ok 3 - inc(\$i,4) = \7 ok 4 - i=3+4 ok 5 - inc(\3,4) = \7 ok 6 - sum([1..10]) = 55 ok 7 - sum2([1..10],10) = 55 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [1,4,6,8,10,12,14,16,18,20] ok 14 - null2() == undef ok 15 - call_closure(2) = 4 ok 16 - call_closure(2) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(2,1) = 5 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(1,1) = 4 1..2 ok 18 - custom type output # Subtest: custom type post ok 1 ok 2 - custom_add3(1,2) = 3 1..2 ok 19 - custom type post ok 20 - closure_pointer_is_null() = 1 1..20 ok t/type_uint8.t ........................... ok 1 - add(1,2) = 3 ok 2 - add() = 0 ok 3 - inc(\$i,4) = \7 ok 4 - i=3+4 ok 5 - inc(\3,4) = \7 ok 6 - sum([1..10]) = 55 ok 7 - sum2([1..10],10) = 55 ok 8 - array increment ok 9 - null() == undef ok 10 - is_null(undef) == 1 ok 11 - is_null() == 1 ok 12 - is_null(22) == 0 ok 13 - static_array = [1,4,6,8,10,12,14,16,18,20] ok 14 - null2() == undef ok 15 - call_closure(2) = 4 ok 16 - call_closure(2) = 0 # Subtest: custom type input ok 1 ok 2 - custom_add(2,1) = 5 1..2 ok 17 - custom type input # Subtest: custom type output ok 1 ok 2 - custom_add2(1,1) = 4 1..2 ok 18 - custom type output # Subtest: custom type post ok 1 ok 2 - custom_add3(1,2) = 3 1..2 ok 19 - custom type post ok 20 - closure_pointer_is_null() = 1 1..20 ok Test Summary Report ------------------- t/forks.t (Wstat: 5632 Tests: 0 Failed: 0) Non-zero exit status: 22 Parse errors: No plan found in TAP output Files=54, Tests=477, 18 wallclock secs ( 0.31 usr 0.15 sys + 14.05 cusr 3.10 csys = 17.61 CPU) Result: FAIL Failed 1/54 test programs. 0/477 subtests failed. make: *** [test_dynamic] Error 255 PLICEASE/FFI-Platypus-0.88.tar.gz make test TEST_VERBOSE=1 -- NOT OK //hint// to see the cpan-testers results for installing this module, try: reports PLICEASE/FFI-Platypus-0.88.tar.gz VmSize: 363468 kB Finished 2019-06-21T02:10:15