📄 apitest.pm
字号:
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 scriptour @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 apitest_exception mycroak strtab my_cxt_getint my_cxt_getsv my_cxt_setint my_cxt_setsv sv_setsv_cow_hashkey_core sv_setsv_cow_hashkey_notcore);# 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.12';use vars '$WARNINGS_ON_BOOTSTRAP';use vars map "\$${_}_called_PP", qw(BEGIN UNITCHECK CHECK INIT END);# Do these here to verify that XS code and Perl code get called at the same# timesBEGIN { $BEGIN_called_PP++;}UNITCHECK { $UNITCHECK_called_PP++;}{ # Need $W false by default, as some tests run under -w, and under -w we # can get warnings about "Too late to run CHECK" block (and INIT block) no warnings 'void'; CHECK { $CHECK_called_PP++; } INIT { $INIT_called_PP++; }}END { $END_called_PP++;}if ($WARNINGS_ON_BOOTSTRAP) { bootstrap XS::APItest $VERSION;} else { # More CHECK and INIT blocks that could warn: local $^W; bootstrap XS::APItest $VERSION;}1;__END__=head1 NAMEXS::APItest - Test the perl C API=head1 SYNOPSIS use XS::APItest; print_double(4);=head1 ABSTRACTThis module tests the perl C API. Currently tests that C<printf>works correctly.=head1 DESCRIPTIONThis module can be used to check that the perl C API is behavingcorrectly. This module provides test functions and an associatedtest script that verifies the output.This module is not meant to be installed.=head2 EXPORTExports all the test functions:=over 4=item B<print_double>Test that a double-precision floating point number is formattedcorrectly by C<printf>. print_double( $val );Output is sent to STDOUT.=item B<print_long_double>Test that a C<long double> is formatted correctly byC<printf>. Takes no arguments - the test value is hard-wiredinto the function (as "7"). print_long_double();Output is sent to STDOUT.=item B<have_long_double>Determine whether a C<long double> is supported by Perl. This shouldbe used to determine whether to test C<print_long_double>. print_long_double() if have_long_double;=item B<print_nv>Test that an C<NV> is formatted correctly byC<printf>. print_nv( $val );Output is sent to STDOUT.=item B<print_iv>Test that an C<IV> is formatted correctly byC<printf>. print_iv( $val );Output is sent to STDOUT.=item B<print_uv>Test that an C<UV> is formatted correctly byC<printf>. print_uv( $val );Output is sent to STDOUT.=item B<print_int>Test that an C<int> is formatted correctly byC<printf>. print_int( $val );Output is sent to STDOUT.=item B<print_long>Test that an C<long> is formatted correctly byC<printf>. print_long( $val );Output is sent to STDOUT.=item B<print_float>Test that a single-precision floating point number is formattedcorrectly by C<printf>. print_float( $val );Output is sent to STDOUT.=item B<call_sv>, B<call_pv>, B<call_method>These exercise the C calls of the same names. Everything after the flagsarg is passed as the the args to the called function. They return whateverthe C function itself pushed onto the stack, plus the return value fromthe 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<eval_sv>Evaluates the passed SV. Result handling is done the same as forC<call_sv()> etc.=item B<eval_pv>Exercises the C function of the same name in scalar context. Returns thesame SV that the C function returns.=item B<require_pv>Exercises the C function of the same name. Returns nothing.=back=head1 SEE ALSOL<XS::Typemap>, L<perlapi>.=head1 AUTHORSTim Jenness, E<lt>t.jenness@jach.hawaii.eduE<gt>,Christian Soeller, E<lt>csoelle@mph.auckland.ac.nzE<gt>,Hugo van der Sanden E<lt>hv@crypt.compulink.co.ukE<gt>=head1 COPYRIGHT AND LICENSECopyright (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 modifyit under the same terms as Perl itself. =cut
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -