Следующий код не скомпилирует, но иллюстрирует, что я хотел бы сделать: totalTests должен содержать количество времени, которое вызывается assertEquals() (assertEquals(), вероятно, должен быть макросом для этого быть может, но я еще не знаком с этим аспектом Нима).Счет вызовов времени компиляции в Nim
Любая идея, как этот код следует изменить, чтобы включить следующий код для печати [1/2] и [2/2] в начале каждой строки отчета об испытаниях?
from strutils import format
var countTested = 0
var countFailed = 0
var countPassed = 0
let totalTests = 0 # <-- need let or other compile-time type here (?)
# using proc here... macro may be needed to be able to count calls (?)
proc assertEquals*[T](testName: string, expected: T, p: (proc(): T)) =
countTested += 1
totalTests += 1 # <-- compilation error (how can we increase each time it is called?)
write(stdout, format("[$num/$total] $name: ", "num", countTested, "total", totalTests, "name", testName))
var val = p()
if val == expected:
write(stdout, "passed\n")
countPassed += 1
else:
write(stdout, "failed\n")
countFailed += 1
when isMainModule:
assertEquals("test #A", 12, proc(): int = 14-2)
assertEquals("test #B", 12, proc(): int = 12-2)
Редактирование: добавлены вопросы в коде
var totalTests вместо let. Пусть, вероятно, непреложный. Я ничего не знаю об этом языке. – luqui
Вы правы luqui, здесь я использовал let, чтобы проиллюстрировать намерение (вычисление времени вычисления, Ним, похоже, хорошо выполняет операции компиляции, поэтому может быть способ сделать это). Но на самом деле пример не компилируется. – x2f
Кстати, вы заметили модуль unittest (http://nim-lang.org/docs/unittest.html)? Одна интересная информация о Nim заключается в том, что ей не нужен большой набор функций assert, используемых на других языках (assertEquals, assertGreater и т. Д.). Причина этого заключается в том, что вы можете написать один макрос assert, который будет проверять переданное выражение и распознать используемый оператор (==, <и т. Д.), Чтобы распечатать сообщение с ошибкой с правильным утверждением. В модуле unittest это макрос 'check'. – zah