PLT Racket 多个值的测试用例
我似乎无法使用 test-engine/racket-tests
包测试我在 PLT Racket 中编写的函数。
代码如下所示。它返回多个值(不知道为什么他们不称它们为元组)。
(define (euclid-ext a b)
(cond
[(= b 0) (values a 1 0)]
[else (let-values ([(d x y) (euclid-ext b (modulo a b))])
(values d y (- x (* (quotient a b) y))))]
))
问题是使用以下格式对其进行测试。以下是我尝试过的一些方法。
(check-expect (values (euclid-ext 99 78)) (values 3 -11 14))
(check-expect (euclid-ext 99 78) (values 3 -11 14))
(check-expect (list (euclid-ext 99 78)) (list 3 -11 14))
现在,这会产生错误上下文期望 1 个值,收到 3 个值:3 -11 14
。无论我如何尝试解决此问题(使用列表、值、无值等),我都无法成功评估此测试用例。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
test-engine
库适用于学生代码,因此它不处理多个值(大多数课程不处理)。像 Rackunit 库这样的东西更适合这种情况。The
test-engine
library is intended for student code, so it doesn't deal with multiple values (which most courses don't deal with). Something like the Rackunit library is more appropriate for such cases.看起来测试框架不接受值。我认为您会发现使用列表作为返回值会更轻松。
但是,如果您确实想这样做,您可以使用 values 转换为列表="nofollow noreferrer">
call-with-values
像这样:所以测试将是这样的:
It looks like the test framework won't accept values. I think you will find it less painful to use a list for the return value.
However, if you really want to do things this way you can convert
values
to a list usingcall-with-values
something like this:So a test would be something like this: