testing - 以不同顺序执行时测试失败
问题描述
当我执行这个程序时:
use Test;
use NativeCall;
constant LIB = ('gsl', v23);
sub gsl_sf_airy_Ai(num64 $x, uint32 $mode --> num64) is native(LIB) is export { * }
sub Ai(Numeric $x, UInt $mode --> Num) is export { gsl_sf_airy_Ai($x.Num, $mode) }
ok Ai(0, 0) == 0.3550280538878172, 'Ai 1';
ok gsl_sf_airy_Ai(0e0, 0) == 0.3550280538878172, 'Ai 2';
测试工作正常,即使我以这种方式交换两个“ok”测试:
ok gsl_sf_airy_Ai(0e0, 0) == 0.3550280538878172, 'Ai 2';
ok Ai(0, 0) == 0.3550280538878172, 'Ai 1';
如果我将声明移至模块:
unit module mymodule;
use NativeCall;
constant LIB = ('gsl', v23);
sub gsl_sf_airy_Ai(num64 $x, uint32 $mode --> num64) is native(LIB) is export { * }
sub Ai(Numeric $x, UInt $mode --> Num) is export { gsl_sf_airy_Ai($x.Num, $mode) }
并编写一个测试程序:
use Test;
use lib '.';
use mymodule;
ok Ai(0, 0) == 0.3550280538878172, 'Ai 1';
ok gsl_sf_airy_Ai(0e0, 0) == 0.3550280538878172, 'Ai 2';
再次执行这两个测试没有错误,但如果我交换最后两行:
ok gsl_sf_airy_Ai(0e0, 0) == 0.3550280538878172, 'Ai 2';
ok Ai(0, 0) == 0.3550280538878172, 'Ai 1';
我收到此错误:
Type check failed for return value; expected Num but got Whatever (*)
我不明白为什么。我什至怀疑可能是内存损坏,所以我使用 valgrind 执行了测试程序,但显然那个部门没有任何问题。有什么提示吗?
解决方案
请在最近发布的 rakudo 2019.11 上重新测试。当我重构 NativeCall 设置代码时,我很有可能已经修复了这个问题。
推荐阅读
- r - 尝试在 R 中生成 qqplot 时不断出现“未使用的参数”错误
- javascript - 在javascript中从一组二维数组中提取偶数数组
- php - php symfony 4 FosUserBundle 无法使用防火墙模式登录 ^/login 和未定义的变量 _SESSION
- ios - 快速将 CBUUID 转换为 NSNumber
- ruby-on-rails - 部署到 Heroku 后出现 Rails 路由错误。虽然本地运行良好
- angular - Timepicker (ngx-bootstrap) 更改子午线 (PM/AM) 样式(颜色/背景)
- react-table - react-table 版本 7 onSortedChange 回调等效
- python - 两组点之间的插值
- google-sheets - 拆分数值并找到唯一的数字
- javascript - 通过时刻减去两个日期会导致错误的年份