Я проголосовал за @TomalakGeretkal за хорошую заметку о контракте;Я не принял ответ, так как мой вопрос заключается в том, как программно проверить функцию равенства.
У меня есть структура POD и оператор равенства, (очень) небольшая часть системы с> 100 инженерами.
Со временем я ожидаю, что структура будет изменена (добавлены / удалены / переупорядочены члены), и я хочу написать тест, чтобы убедиться, что оператор равенства проверяет каждый член структуры (например, поддерживается в актуальном состоянии).по мере изменения структуры).
Как отметил Томалак, комментарии & «по контракту» часто являются лучшим / единственным способом обеспечить это;однако в моей ситуации я ожидаю проблем и хочу выяснить, есть ли какие-либо способы активного улова (хотя бы многих) модификаций.
Я не придумаю удовлетворительный ответ - это лучшее, что яподумал:
-new up two instances struct (x, y), fill each with identical non-zero data.
-check x==y
-modify x "byte by byte"
-take ptr to be (unsigned char*)&x
-iterator over ptr (for sizeof(x))
-increment the current byte
-check !(x==y)
-decrement the current byte
-check x==y
Тест проходит, если оператор равенства перехватывает каждый байт (ПРИМЕЧАНИЕ: это предостережение - не все байты используются в представлении компилятора x, поэтому тест будетнеобходимо пропустить эти байты - например, жесткий код игнорирует байты)
Мой предлагаемый тест имеет существенные проблемы: (по крайней мере) байты «не заботятся» и тот факт, что увеличивается один байт типовв x может не привести к допустимому значению для переменной в этой области памяти.
Есть ли лучшие решения?
(Это не должно иметь значения, но я использую VS2008, rtti выключен, GoogleTest Suite)