Я проголосовал за @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 пикселей не учитываются. Изображение в серой шкале и контур добавляется к изображению.
Не могли бы вы объяснить следующие строки? Какой принцип / алгоритм здесь используется? У меня проблемы, особенно с частью кода, определяющим контур.