Как сравнить выходные данные cpp и python? - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь воспроизвести некоторые функциональные возможности Python на C ++.Это сложный численный метод с кучей подфункций.

Есть ли хороший способ сравнить значения функций Python с функциями C ++, которые я пишу и которые должны их отражать?

Может кто-нибудь вставить какой-нибудь код или дать мини-учебник?Или несколько указателей или ссылок?

Большое спасибо!Artabalt

1 Ответ

0 голосов
/ 28 января 2019

Тестирование.

Написание тестов для функциональности на Python (если они уже не существуют; обычно тестируется код Python).

Перенос тестов на C ++.Затем заставьте свои функции C ++ проходить тесты.В идеале, сделайте тесты мишенью для вашего make-файла и запускайте их всякий раз, когда можете.


Редактировать:

Вы можете проверить произвольно, если это хорошая идеяили нет, может зависеть от вашего конкретного случая.Эмпирическое правило заключается в использовании пары каждого пограничного случая (вы можете использовать покрытие кода , чтобы увидеть, есть ли дело, которое вы пропустили).

Например, в своей работе я использую интеграционный тест, который требует много компонентов.Мы моделируем процесс ставок (весь процесс, кроме пользовательского интерфейса), в определенный момент времени, с жестко запрограммированным ответом сервера, и мы моделируем аппаратный принтер с перенаправлением на bmp.

Теперь вы можетеПротестируйте все .Я не могу проверить каждую действительную комбинацию чисел (6 чисел от 0 до 36?) В каждом возможном порядке.Также я не могу проверить каждую недопустимую комбинацию (бесконечную?).Вы тестируете пару.Значимые.

Так что мы даем ему всегда одни и те же цифры.Тест состоит в том, что он должен производить всегда один и тот же bmp (должен отображать одинаковые шрифты, должен иметь одинаковые тексты, одинаковую дату ставок и т. Д.).

Теперь, в зависимости от вашего кода и вашегоПриложение - это уровень автоматизации, который может иметь генерация этих тестов.

Я не знаю вашего конкретного случая, но я бы начал создавать небольшую программу (чем проще, тем лучше), которая использует вашу библиотеку.Одна реализация на Python, одна реализация на C ++.Например, если вы тестировали библиотеку строк, вы выполняете небольшую программу, которая удаляет букву внутри строки, добавляет текст, стирает все остальные буквы и т. Д.

Затем вы автоматизируете пару тестов.случаи:

cat largetext.txt | ./my_python_program > output.pyhthon_program.txt
cat largetext.txt | ./my_cpp_program > output.cpp_program.txt
diff output.pyhthon_program.txt output.cpp_program.txt || echo "ERROR"

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

Это не предоставление программ одинаковых (вы не можете проверить все возможные входные данные).Но дает вам некоторую уверенность.Если вы видите, что что-то не так, вы сначала добавляете это в свой тест, затем делаете его неудачным, затем исправляете его до тех пор, пока оно не достигнет .

С уважением.

...