0

我遇到一个问题,当我将特定测试放入测试套件并通过 logtalk 传递时,它返回 false,但是当我使用相同的后端编译器(SWI)通过解释器运行它时返回 true(这是所需的行为) -序言)。这是 logtalk 测试结果的相关部分,学生目录中测试的快照,以及当我通过 SWI 解释器通过相同测试时的输出。

测试结果:

在此处输入图像描述

tests.lgt 中的测试用例:

在此处输入图像描述

通过 swipl 运行的结果:

在此处输入图像描述

任何帮助将不胜感激。

谢谢你。

4

1 回答 1

1

作为旁注,必须修复“发现重复的测试标识符”错误以获得准确的测试结果。测试标识符必须是唯一的,如文档所述

您的问题中没有足够的信息来诊断问题。在测试定义中使用{}/1控制结构来包装测试目标意味着目标被原样调用。我的建议是让你 cd 到你看到问题的学生目录,手动运行测试,然后在顶层调用测试目标。就像是:

$ cd student_id_xyz
$ swilgt
...
?- {tester}.
...
?- no_duplicates(..., ...).
...

在不重新启动的情况下执行此操作,以便我们保证两个测试(来自测试文件并在顶层键入)在相同的确切上下文中发生。如果您得到相同的结果,请告诉我们。

我为您的学生评分任务建议的解决方案假定学生 Prolog 文件是Prolog 文件(即没有模块定义)。如果某些学生提交的情况并非如此,请尝试将tester.lgt驱动程序文件中学生 Prolog 文件的加载从使用logtalk_load/1Prolog 后端特定谓词(例如consult/1)的谓词(为了可移植性而选择)更改。

于 2021-08-01T16:10:00.450 回答