2016-12-11 12 views
3

Я пытаюсь использовать библиотеку rackunit для выполнения некоторых тестов.Проверка нескольких выходов с одним тестом в Racket

Однако, я хотел бы проверить, много выходов с одного теста, как это:

#lang racket 

(require rackunit) 

(check-equal? (add1 1) (* 2 1) (- 3 1) (+ 2 0)) 

Как вы видите, этот тест должен пройти, так как все выходы 2.

Однако это тест не удается из-за проблемы синтаксиса:

check-equal?: bad syntax in: (check-equal? (add1 1) (* 1 2) (- 3 1) (+ 2 0)) 

Есть ли способ сделать этот уникальный тест с несколькими процедурами, возвращающими значение?

Глядя на documentation Не удалось найти.

Если я не в состоянии сделать это, я думаю, что буду повторяться ...

ответ

1

Если вы просто проверка номера, как Gibstick предложил, вы можете просто использовать check-true и =. Однако, если вы не тестируете номера, нам нужно сделать немного более творческими.

Если объекты, которые вы хотите проверить равенство на транзитивны: (он же, если (equal? a b) и (equal? b c) чем (equal? a c), вы можете просто запустить check-equal? в цикле:

(define items (list 'items 'to 'check)) 
(define compare-item 'correct-item) 
(for ([i (in-list items)]) 
    (check-equal? i compare-item)) 

Конечно, если элемент равенства не является транзитивным, тогда вам нужно будет проверить каждый элемент с любым другим предметом. Вы все еще можете сделать это с помощью цикла, он просто станет немного сложнее. Однако, вообще говоря, проверка равенства по элементам является транзитивной.

1

Вы можете использовать более общий check-true с =, так как все ваши ценности являются числами.

#lang racket 

(require rackunit) 

(check-true (= (add1 1) (* 2 1) (- 3 1) (+ 2 0))) 
+0

Творческий подход, у меня есть не думал об этом до сих пор. Благодарю. Возможно, поэтому у них нет специальной команды для такого теста. –

+1

Извините, в моем первоначальном ответе была ошибка. 'equal?' не работает - только '=' делает. – Gibstick

+0

Я действительно занимаюсь выводами, которые являются списками, а не номерами, как мой пример выше. Следовательно, «=» не работает ... У вас есть другое предложение? @Gibstick –

 Смежные вопросы

  • Нет связанных вопросов^_^