package XS::APItest; use 5.008; use strict; use warnings; use Carp; use base qw/ DynaLoader Exporter /; # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. # Export everything since these functions are only used by a test script our @EXPORT = qw( print_double print_int print_long print_float print_long_double have_long_double print_flush mpushp mpushn mpushi mpushu mxpushp mxpushn mxpushi mxpushu call_sv call_pv call_method eval_sv eval_pv require_pv G_SCALAR G_ARRAY G_VOID G_DISCARD G_EVAL G_NOARGS G_KEEPERR G_NODEBUG G_METHOD ); # from cop.h sub G_SCALAR() { 0 } sub G_ARRAY() { 1 } sub G_VOID() { 128 } sub G_DISCARD() { 2 } sub G_EVAL() { 4 } sub G_NOARGS() { 8 } sub G_KEEPERR() { 16 } sub G_NODEBUG() { 32 } sub G_METHOD() { 64 } our $VERSION = '0.05'; bootstrap XS::APItest $VERSION; 1; __END__ =head1 NAME XS::APItest - Test the perl C API =head1 SYNOPSIS use XS::APItest; print_double(4); =head1 ABSTRACT This module tests the perl C API. Currently tests that C works correctly. =head1 DESCRIPTION This module can be used to check that the perl C API is behaving correctly. This module provides test functions and an associated test script that verifies the output. This module is not meant to be installed. =head2 EXPORT Exports all the test functions: =over 4 =item B Test that a double-precision floating point number is formatted correctly by C. print_double( $val ); Output is sent to STDOUT. =item B Test that a C is formatted correctly by C. Takes no arguments - the test value is hard-wired into the function (as "7"). print_long_double(); Output is sent to STDOUT. =item B Determine whether a C is supported by Perl. This should be used to determine whether to test C. print_long_double() if have_long_double; =item B Test that an C is formatted correctly by C. print_nv( $val ); Output is sent to STDOUT. =item B Test that an C is formatted correctly by C. print_iv( $val ); Output is sent to STDOUT. =item B Test that an C is formatted correctly by C. print_uv( $val ); Output is sent to STDOUT. =item B Test that an C is formatted correctly by C. print_int( $val ); Output is sent to STDOUT. =item B Test that an C is formatted correctly by C. print_long( $val ); Output is sent to STDOUT. =item B Test that a single-precision floating point number is formatted correctly by C. print_float( $val ); Output is sent to STDOUT. =item B, B, B These exercise the C calls of the same names. Everything after the flags arg is passed as the the args to the called function. They return whatever the C function itself pushed onto the stack, plus the return value from the function; for example call_sv( sub { @_, 'c' }, G_ARRAY, 'a', 'b'); # returns 'a', 'b', 'c', 3 call_sv( sub { @_ }, G_SCALAR, 'a', 'b'); # returns 'b', 1 =item B Evalulates the passed SV. Result handling is done the same as for C etc. =item B Excercises the C function of the same name in scalar context. Returns the same SV that the C function returns. =item B Excercises the C function of the same name. Returns nothing. =back =head1 SEE ALSO L, L. =head1 AUTHORS Tim Jenness, Et.jenness@jach.hawaii.eduE, Christian Soeller, Ecsoelle@mph.auckland.ac.nzE, Hugo van der Sanden Ehv@crypt.compulink.co.ukE =head1 COPYRIGHT AND LICENSE Copyright (C) 2002,2004 Tim Jenness, Christian Soeller, Hugo van der Sanden. All Rights Reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut