Ja, vergleich mit true ist ein dummes beispiel, das ich nur genommen hab weils hier vorkam.
Aber beispiel du hast eine funktion die 0 oder <> 0 zurückgibt, du dich aber nur für den boolean wert interesierst. z.B. strcmp gibt 0 raus wenn zwei gleich sind, <0 wenn kleiner >0 wenn größer. Wenn du jetzt einen Unit test für eine solche funktion schreibst, und nur an dem bool wert interresiert ist, könntest du das so machen:
Code: Alles auswählen
bool expectedResults[] = {
TRUE,
FALSE,
TRUE,
...
};
...
void performTest(int testNum) {
assert(!!testFunc(input[i]) == expectedResults[i]);
}
Die alternativen wären hier:
Code: Alles auswählen
assert((testFunc(input[i]) && expectedResults[i]) || (!testFunc(input[i]) && !expectedResults[i]));
// oder
assert(expectedResults[i] == (testFunc(input[i]) != 0))
// oder
assert(!expectedResults[i] == !testFunc(input[i]))
Und da finde ich die erste variante am schönsten.
Anderes beispiel, du hast eine funktion die einen bool zurückgibt (also 1 oder 0) und eine funktion die einen int <>0 oder 0 zurückgibt und du willst die beiden funktionswerte vergleichen.
Auf den konstanten true oder false macht es natürlich keinen sinn