Avatar von pre alpha
  • pre alpha

994 Beiträge seit 13.05.2006

Re: Undefiniertes Verhalten in C++

Was du noch machen kannst ist ein sog. Unit-Test. Das Prinzip ist so: Du schreibst dir ne Test-Funktion die 100% das gewünschte Ergebniss liefert und prüfst dann alle Fälle/Eingaben durch. Das kann sehr aufwendig werden!
Mal ein einfaches Beispiel das aber bruteforce (nicht immer sinnvoll !!!) durchtestet:

int8_t test_mul(const int8_t a, const int8_t b) { return a*b; } int8_t my_mul(const int8_t a, const int8_t b) { return ... } const int16_t min = std::numeric_limits<int8_t>::lowest(), max = std::numeric_limits<int8_t>::max(); for (int16_t a=min; a<=max; ++a) for (int16_t b=min; b<=max; ++b) { if (my_mul(a, b) != test_mul(a, b)) { std::cout << "error at " << a << ", " << b << std::endl; break; } }

Damit alle Fälle abgedeckt sind muß hier für die Schleifenvariablen der nächst größere Wertebereich gewählt werden, da sonst

const int8_t min = std::numeric_limits<int8_t>::lowest(), max = std::numeric_limits<int8_t>::max(); for (int8_t a=min; a<=max; ++a) ...

wegen a<=max ne Endlosschleife draus wird.

Bewerten
- +