Я пишу эталонную реализацию для спецификации, связанной с преобразованием данных.
У меня есть несколько тестовых примеров, которые проверяют правильность преобразования данных вперед и назад, например:
void test(){
int x[maxTest], y[maxTest], z[maxTest];
fillRandomly(x, testSize);
MyTransform trans = MyTransform(testsize);
trans.apply(x, testSize, y);
trans.remove(y, testSize, z);
for(int i = 0; i < testSize; i++)
CPPUNIT_ASSERT(abs(x[i] - z[i]) < 2);
}
Типы данных сильно различаются между тестовыми примерами и преобразованиями.
То, что я хотел бы создать, - это файлы, содержащие ввод/вывод и, возможно, промежуточную стадию, чтобы дальнейшие реализации могли проверить свои результаты.
Есть несколько очевидных способов заставить это работать (например, назвать выходной файл и вставить в него все, что в нем есть), но большинство из них подразумевают возвращение к каждому тестовому случаю и целую кучу копипастов.
Исходя из Java, самоанализ приходит на ум с оболочкой для решения некоторых моих проблем (автоматическое именование тестовых выходных файлов...), но не всех, и мне рекомендовали держаться подальше от этого в C++ (мнения приветствуются).
Общие методы применения/удаления также кажутся хорошими кандидатами, но это будет не так просто, поскольку нет абстрактного типа преобразования и мало соответствия между преобразованиями (может быть хорошим вариантом, поскольку типов преобразований не так много).
Поэтому мне интересно, приходилось ли кому-нибудь из вас делать что-то подобное и как вы это решили. Я не против изменить все тестовые случаи, если это означает, что позже у меня будет что-то чистое.
Мы будем очень признательны за любой вклад.