Тестовые наборы PLT Racket для нескольких значений - PullRequest
0 голосов
/ 20 сентября 2010

Кажется, я не могу протестировать функцию, написанную в PLT Racket, с использованием пакета test-engine/racket-tests.

Код указан ниже. Он возвращает несколько значений (не уверен, почему они не называют их кортежами).

(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 ]

3 голосов
/ 20 сентября 2010

Библиотека test-engine предназначена для кода студента, поэтому она не работает с несколькими значениями (с которыми большинство курсов не работают) Что-то вроде библиотеки Rackunit больше подходит для таких случаев.

1 голос
/ 20 сентября 2010

Похоже, что тестовая среда не будет принимать значения. Я думаю, вам будет менее болезненно использовать список для возвращаемого значения.

Однако, если вы действительно хотите сделать что-то таким образом, вы можете преобразовать values в список, используя call-with-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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...