Недавно я подталкивал свою группу к включению большего количества тестирования при написании их кода. Было несколько серьезных ошибок, которые требовались намного дольше, чем, вероятно, было необходимо, потому что у нас не было хорошего режима тестирования.
Однако я подозреваю, что наличие соответствующих инструментов для автоматизации (или для упрощения) процесса, безусловно, было бы полезно. С другой стороны, я не знаю различных вариантов комплектов тестирования C ++ и как выбирать между ними?
Существуют ли руководящие принципы для того, что искать, и есть ли какие-либо, специально предназначенные для численных приложений?
Недавно я использовал googletest для тестирования нескольких числовых библиотек, над которыми я работаю, и был очень доволен этим. Вы можете написать довольно простые тесты очень быстро или вы можете написать сложные тесты, которые требуют инициализации данных и так далее. Он также предоставляет (как я уверен, что многие другие делают) способы простого сравнения с плавающей запятой, а не побитового.
источник
Если вы создаете свой код с помощью CMake, то механизм ctest будет очевидным выбором. Он позволяет вам тестировать ваш код вручную с помощью команды
ctest
, а также поддерживает обширное ночное тестирование через CDash .источник
Для нашей библиотеки C ++ по вычислительной биологии ( Chaste ) мы используем http://cxxtest.com/ . Это довольно простой в использовании, хорошо работает, он предоставляет несколько макросов для тестирования с помощью
assert()
операторов стиля. Для научных вычислений это, как правило, простые прямые сравненияTS_ASSERT_EQUALS(a,b)
или численные сравнения сTS_ASSERT_DELTA(a,b,tolerance)
.Дополнительные макросы могут быть легко написаны с использованием этих основных, чтобы сравнить ваши собственные векторы / матрицы по вашему выбору. Полезно также проверить, что ваш код выдает соответствующие предупреждения и сообщения об ошибках в определенных ситуациях. Вы можете просмотреть некоторые примеры в
test
папках нашего исходного кода здесь: https://chaste.cs.ox.ac.uk/trac/browser/trunkисточник