内容

名称

XS::APItest - 测试 perl C API

概要

use XS::APItest;
print_double(4);

use XS::APItest qw(rpn calcrpn);
$triangle = rpn($n $n 1 + * 2 /);
calcrpn $triangle { $n $n 1 + * 2 / }

摘要

此模块测试 perl C API。还公开 perl 内部内容供核心测试脚本使用。

说明

此模块可用于检查 perl C API 是否正常运行。此模块提供测试函数和关联的测试脚本,用于验证输出。

此模块不应安装。

导出

导出所有测试函数

测试 printf 是否正确设置双精度浮点数的格式。

print_double( $val );

输出发送至 STDOUT。

测试 printf 是否正确设置 long double。不接受参数 - 测试值已固化到函数中(为“7”)。

print_long_double();

输出发送至 STDOUT。

have_long_double

确定 Perl 是否支持 long double。这应用于确定是否测试 print_long_double

print_long_double() if have_long_double;

测试 printf 是否正确格式化了 NV

print_nv( $val );

输出发送至 STDOUT。

测试 printf 是否正确格式化了 IV

print_iv( $val );

输出发送至 STDOUT。

测试 printf 是否正确格式化了 UV

print_uv( $val );

输出发送至 STDOUT。

测试 printf 是否正确格式化了 int

print_int( $val );

输出发送至 STDOUT。

测试 printf 是否正确格式化了 long

print_long( $val );

输出发送至 STDOUT。

测试 printf 是否正确格式化了单精度浮点数。

print_float( $val );

输出发送至 STDOUT。

filter

安装一个源过滤器,将“o”替换为“e”(不考虑它可能会修改什么)。

call_sv, call_pv, call_method

这些练习同名 C 调用。flags 参数之后的所有内容都作为参数传递给被调用函数。它们返回 C 函数本身压入堆栈的任何内容,加上函数的返回值;例如

call_sv( sub { @_, 'c' }, G_LIST,  'a', 'b');
# returns 'a', 'b', 'c', 3
call_sv( sub { @_ },      G_SCALAR, 'a', 'b');
# returns 'b', 1
eval_sv

计算传递的 SV。结果处理与 call_sv() 等相同。

eval_pv

在标量上下文中练习同名 C 函数。返回 C 函数返回的相同 SV。

require_pv

练习同名 C 函数。不返回任何内容。

KEYWORDS

这些默认情况下不提供,但必须显式导入。它们是词法作用域的。

DEFSV

表现得像 $_

rpn(表达式)

此构造是一个 Perl 表达式。表达式必须是 RPN 算术表达式,如下所述。RPN 表达式将被求值,其值将作为 Perl 表达式的值返回。

calcrpn 变量 { 表达式 }

此构造是一个完整的 Perl 语句。(闭合大括号后不应再跟分号。)变量必须是 Perl 标量 my 变量,表达式必须是 RPN 算术表达式,如下所述。RPN 表达式将被求值,其值将被赋给变量。

RPN 表达式语法

RPN 表达式的标记可以用空格分隔,但通常不需要这种分隔。仅在未分隔的标记看起来像一个更长的标记时才需要分隔。例如,12 34 + 可以写成 12 34+,但不能写成 1234 +

RPN 表达式可以是以下任何一种

1234

数字序列是一个无符号十进制字面数字。

$foo

美元符号前跟字母数字名称表示一个 Perl 标量变量。仅支持用 mystate 声明的变量。如果变量的值不是本机整数,它将在求值时通过 Perl 的常用机制转换为整数。

A B +

AB 的和。

A B -

AB 的差,即从 A 中减去 B 的结果。

A B *

AB 的乘积。

A B /

A 除以 B 时,商四舍五入为零。除以零会生成异常。

A B %

A 除以 B 时,商四舍五入为零的余数。除以零会生成异常。

由于算术运算符都具有固定的元数并且是后缀的,因此不需要运算符优先级,也不需要分组运算符来覆盖优先级。这是 RPN 的一半要点。

RPN 表达式也可以用另一种方式解释,即作为对栈的一系列操作,每个标记一个操作。字面值或变量标记将值推送到栈中。二元运算符从栈中提取两个项目,对它们执行计算,并将结果推回到栈中。栈最初为空,在表达式的末尾,栈中必须只剩下一个值。

另请参阅

XS::Typemapperlapi

作者

Tim Jenness,<[email protected]>,Christian Soeller,<[email protected]>,Hugo van der Sanden <[email protected]>,Andrew Main (Zefram) <[email protected]>

版权和许可证

版权所有 (C) 2002,2004 Tim Jenness、Christian Soeller、Hugo van der Sanden。保留所有权利。

版权所有 (C) 2009 Andrew Main (Zefram) <[email protected]>

此库是免费软件;你可以根据与 Perl 本身相同的条款重新分发和/或修改它。