Вы можете думать о тестировании как о двух вещах:
- сообщая, изменился ли вывод
- сообщая, если вывод неправильный
Определение того, что что-то изменилось, часто значительно быстрее, чем определение того, что что-то не так, поэтому может быть хорошей стратегией запускать тесты, обнаруживающие изменения, чаще, чем тесты, обнаруживающие неправильность.
В вашем случае вам не нужно каждый раз запускать исполняемые файлы, созданные вашим компилятором, если вы можете быстро определить, что исполняемый файл не изменился с тех пор, как была получена известная хорошая (или предполагаемая хорошая) копия того же исполняемого файла.
Как правило, вам нужно выполнить небольшое количество манипуляций с выводом, который вы тестируете, чтобы устранить ожидаемые различия (например, установить для встроенных дат фиксированное значение), но как только вы это сделаете, тесты для обнаружения изменений легко написать, потому что валидация - это, в основном, сравнение файлов: вывод совпадает с последним известным хорошим выводом? Да: Пройдите, Нет: Не удалось.
Таким образом, суть в том, что если вы видите проблемы с производительностью при запуске исполняемых файлов, созданных вашим компилятором, и обнаружении изменений в выходных данных этих программ, вы можете выбрать запуск тестов, которые обнаруживают изменения на более ранней стадии, сравнивая сами исполняемые файлы.