适用于多个值的PLT球拍测试用例

时间:2010-09-20 02:18:30

标签: unit-testing scheme

我似乎无法使用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。无论我如何尝试这个(使用列表,值,没有值等),我都无法让这个测试用例成功评估。

2 个答案:

答案 0 :(得分:3)

test-engine库适用于学生代码,因此它不处理多个值(大多数课程不处理)。类似于Rackunit库的东西更适合这种情况。

答案 1 :(得分:1)

看起来测试框架不接受值。我认为你会发现使用列表返回值不那么痛苦。

但是,如果您真的想以这种方式做事,可以使用call-with-valuesvalues转换为列表:

(call-with-values (lambda () (values 1 2 3)) list)

所以测试会是这样的:

(check-expect (call-with-values (lambda () (euclid-ext 99 78)) list)
              (list 3 -11 14))