Тест C ++ для проверки соответствия оператора равенства со структурой с течением времени

Я проголосовал за @TomalakGeretkal за хорошее примечание о заключении договора; Я не принял ответ, так как мой вопрос заключается в том, как программно проверить функцию равенства.


У меня есть структура POD и оператор равенства, (очень) небольшая часть системы с> 100 инженерами.

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

Как указал Томалак - комментарии и «по контракту» часто являются лучшим / единственным способом обеспечить это; однако в моей ситуации я ожидаю проблем и хочу изучить, есть ли какие-либо способы проактивного обнаружения (по крайней мере, многих) модификаций.

Я не придумываю удовлетворительного ответа - это лучшее, что я думал of:

-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 может не привести к действительному значению переменной в этом месте памяти. фигура imshow (d, []) ds = bwareaopen (d, 40); фигура imshow (ds, []) iout = d1; BW = ds; iout (:,:, 1) = iout; iout (:,:, 2) = iout (:,:, 1); iout (:, ...

Я пытаюсь понять этот код:

d=edge(d,'canny',.6);
figure,
imshow(d,[])

ds = bwareaopen(d,40);
figure,
imshow(ds,[])

iout = d1;
BW=ds;

iout(:,:,1) = iout;
iout(:,:,2) = iout(:,:,1);
iout(:,:,3) = iout(:,:,1);
iout(:,:,2) = min(iout(:,:,2) + BW, 1.0);
iout(:,:,3) = min(iout(:,:,3) + BW, 1.0);

Я понимаю, что d - это изображение, и применяется хитрый детектор, а 40 пикселей не учитываются. Изображение в серой шкале и контур добавляется к изображению.

Не могли бы вы объяснить следующие строки? Какой принцип / алгоритм здесь используется? У меня проблемы, особенно с частью кода, определяющим контур.

5
задан gnovice 4 September 2017 в 20:20
поделиться