我正在使用 SWI-Prolog 的PlUnit编写测试,并希望提供更好的错误消息,也许通过区分我所得到的和我所期望的。
以下最小工作示例(MWE)举例说明了我所追求的:
:- module(mwe, [parse_int/2]).
parse_int(Str, Num) :- number_string(Num, Str):
:- begin_tests(mwe).
:- use_module(mwe).
testcase("1", 1).
testcase("10", 10).
testcase("100000000000", 10000000000). % Oops
test("parse int", [forall(testcase(Text, Want))]) :-
parse_int(Text, Got),
assertion(Got = Want).
:- end_tests(mwe).
输出是:
% PL-Unit: mwe ..
ERROR: /home/bkim/Projects/swifun/mwe.pl:11:
test parse int (forall bindings = ["100000000000",10000000000]): assertion failed
Assertion: 100000000000=10000000000
false.
与go-cmp类似的不同可能会呈现如下结果:
- 100000000000
+ 10000000000
一目了然比较容易。
我找不到任何对一般 Prolog 术语执行此类检查的东西,更接近是list 之间编辑距离的示例。