Предположим, у нас есть 3 переменных, и нам нужно УТВЕРДИТЬ, что все они могут быть равны -1, либо ни одна из них не может быть равна -1. Я написал следующий код:
x := 1;
y := 1;
z := 1;
ASSERT( (x = -1) = (y = -1) = (z = -1) );
Я часто пишу такую проверку, но для двух переменных. Удивительно, но тройное сравнение тоже скомпилировано, но работает не так, как ожидалось. Для значений (1, 1, 1) я ожидаю, что оно будет оценивать значение true. После подстановки значений переменных и упрощения мы получаем:
ASSERT( False = False = False );
и я подумал, что он должен оцениваться как True, но это не так. Итак, как оценивается это тройное сравнение?