Я разрабатываю unit test для своего приложения, но я столкнулся со странной проблемой, которую я не понимаю.
Код:
double res = BytesTool::convertSize(1, BytesTool::Byte, BytesTool::KiloByte);
double tmp = pow((double)1000, -1);
QVERIFY(res == tmp);
Я компилирую с Linux-машины (хост 64 бита) для Linux 64bits с gcc (хост 64 бит) и перекрестная компиляция для Windows 32bits с компилятором Linux mingw32.
Программа отлично работает (успех утверждения) с компиляцией Linux в режиме отладки и выпуска. Для версии Windows он отлично работает в отладочной версии, но не для версии выпуска; утверждение терпит неудачу.
Странная часть: если я вставляю трассировку, тест работает в Windows:
double res = BytesTool::convertSize(1, BytesTool::Byte, BytesTool::KiloByte);
printf("test");
double tmp = pow((double)1000, -1);
QVERIFY(res == tmp); // Is TRUE when printf("test") is present, FALSE otherwise
Я потерялся, и я действительно не понимаю, что происходит. Почему printf
заставляет его работать?
Благодарим за помощь.