Есть известная задача chameneos из тестирования на производительность разных языков программирования.
Код решения данной задачи с одной стороны маленький и простой, а с другой стороны совсем не понятно - как этот код тестировать? как понять что код работает правильно?
На первый взгляд есть лишь одна "точка" для тестирования - количество встреч, но если присмотреться - то можно заметить, что не явно у нас еще есть сами встречи, которые, с помощью небольшого количеств кода, легко оформляются в виде трасс встреч, вида:
<номер
встречи> <номер первого хамелеона> <номер второго хамелеона>
<цвет первого хамелеона до встречи> <цвет второго хамелеона до
встречи> <цвет первого хамелеона после встречи> <цвет второго
хамелеона после встречи>
Все трассы встреч стоит проверить на выполнение следующих инвариантов:
1. что хамелеон между встречами сам по себе не перекрасился
2. что обмен
цветов после встречи был проведен корректно
и выполнению статических параметров:
1. что хамелеоны
участвовали в встречах — равномерно
2. что цвета по встречам тоже
распределены равномерно
5. что номера хамелеонов, участвующих в встречах,
распределено равномерно по времени
ps
Кроме печати трассы, в сложных случаях, стоить делать и прогон трассы, когда программа каждый шаг делает на основе информации из трассы, а не самостоятельно.
Прогон по трассе позволяет в online-режиме увидеть где и как именно происходит ошибка.