Проверка равенства и сравнение неравенстваC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проверка равенства и сравнение неравенства

Сообщение Anonymous »

С философской точки зрения, означает ли ASSERT_EQ(x, y) «проверить, что x равен y» или «оценить x == y и проверить достоверность результата»?
В первом случае

Код: Выделить всё

struct S s1, s2;
ASSERT_EQ(s1, s2);
вводит в заблуждение, если используется для модульного тестирования S::operator==(), и следует использовать ASSERT_TRUE(s1 == s2)
Практически, ничто не помешает реализации ASSERT_EQ выполнять проверку идентичности своих аргументов, так что ASSERT_EQ(s1, s1) решительно проходит, наблюдая, что адресоф(s1) == адрес(s1) и никогда не достигает оператора==() для пользовательского типа.
Другая проблема заключается в том, что ASSERT_NE может использовать оператор!=() или может использовать оператор ==() и отрицать результат.
Более сложная проблема заключается в том, что утверждения GoogleTest выполняют поиск в другой области, что приводит к различиям поиска.
С другой стороны, я вижу других, которые используют ASSERT_EQ для тестирования операторов.
Лучше ли для тестов пользовательских операторов равенства скрывать оператор в вызовах ASSERT_EQ и ASSERT_NE или явно использовать тестируемый оператор в модульном тесте, отделяя использование оператора от этапа утверждения?
Ваша рекомендация такая же для сравнения операторы , = как для равенства !=, ==?

Подробнее здесь: https://stackoverflow.com/questions/798 ... comparison
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»