Sto utilizzando il framework di test C++ di Google Gtest. Vorrei testare una funzione contro il suo tempo di esecuzione , ad es. function foo() fallisce se la sua esecuzione è più lunga di 3ms. Non sono riuscito a trovare una dichiarazione ASSERT per raggiungere questo obiettivo. Non è possibile includere una funzionalità del genere?Come affermare il tempo di esecuzione in Google Test?
5
A
risposta
4
probabilmente non esiste come il bug è ancora aperta: http://code.google.com/p/googletest/issues/detail?id=348
5
Perché non utilizzare tale soluzione semplice?
//pseudo code
clock_t t = clock();
foo();
const double work_time = (clock() - t)/double(CLOCKS_PER_SEC);
ASSERT_TRUE(work_time <= 0.003);
0
Ho trovato un modo per utilizzare le statistiche che GoogleTest stampa per questo. Questo è a livello di programma, ma probabilmente potresti fare lo stesso in TearDownTestCase()
per verificare la velocità di controllo in un sottogruppo. Questo perché c'è una funzione membro elapsed_time
a livello di TestCase.
int main(int argc, char* argv[])
{
::testing::InitGoogleTest(&argc, argv);
auto result(RUN_ALL_TESTS());
::testing::internal::TimeInMillis elapsed(
::testing::UnitTest::GetInstance()->elapsed_time());
ASSERT_LT(elapsed, measurePerf ? 180 * 1000 : 215 * 1000);
return result;
}
Rappresentante dei risultati:
[==========] 338 tests from 18 test cases ran. (207723 ms total) [ PASSED ] 338 tests.
YOU HAVE 13 DISABLED TESTS
FrameworkTest.cpp(39): error: Expected: (elapsed) < (measurePerf ? 190 * 1000 : 170 * 1000), actual: 207723 vs 170000
temo la precisione non è abbastanza alta .. Qualcosa di simile a 'QueryPerformanceCounter()' sarebbe meglio. – Chen
E 'solo un meta-codice, puoi usare quello che vuoi invece dell'orologio. – fghj
Sì, dovresti indicarlo, come di solito 'clock()' ha bassa precisione. – Chen