Следующий код не компилируется, но иллюстрирует то, что я хотел бы сделать: totalTests должен хранить количество раз, когда вызывается assertEquals() (assertEquals(), вероятно, должен быть макросом, чтобы это было возможно, но я не знаком с этот аспект Ним еще).
Любая идея, как этот код следует изменить, чтобы следующий код мог печатать [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)
Изменить: добавлены вопросы в код