我似乎无法使用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))
现在,这会产生错误context expected 1 value, received 3 values: 3 -11 14
。无论我如何尝试这个(使用列表,值,没有值等),我都无法让这个测试用例成功评估。
答案 0 :(得分:3)
test-engine
库适用于学生代码,因此它不处理多个值(大多数课程不处理)。类似于Rackunit库的东西更适合这种情况。
答案 1 :(得分:1)
看起来测试框架不接受值。我认为你会发现使用列表返回值不那么痛苦。
但是,如果您真的想以这种方式做事,可以使用call-with-values
将values
转换为列表:
(call-with-values (lambda () (values 1 2 3)) list)
所以测试会是这样的:
(check-expect (call-with-values (lambda () (euclid-ext 99 78)) list)
(list 3 -11 14))