the Compartmented Robust Posix C++ Unit Test system |
|
---|
Verify that the block of code immediately following the macro does
not consume more than ms
milliseconds CPU time.
Used in: A test function body, the constructor or destructor of a
fixture, or a function called from them.
See TEST(name, ...)
.
Requirement: ms
is an unsigned integer value.
Requirement: A code block follows immediately after.
The check succeeds if, and only if, the code block following
completes its execution in at most ms
milliseconds
of CPU-time.
On success the test function continues without side effects.
On failure the test is marked as failed, but continues execution
with an error report. The report
includes the parameter value ms
and the actual
CPU-time consumed.
Note | |
---|---|
It is possible to extend the timeout limit using the
command line parameter --timeout-multiplier =factor , which can be useful when running the test
program with time consuming tools
like valgrind.
|
Note | |
---|---|
It is also possible to temporarily disable the check with the
-t / --disable-timeouts
command line flag, in which case the assertion will always succeed,
regardless of the amount of CPU-time consumed by the following
code block.
|
See also:
ASSERT_SCOPE_MAX_CPUTIME_MS(ms)
.
Example: The test program
#include <crpcut.hpp> extern "C" { # include <unistd.h> # include <sys/times.h> } TEST(long_real_time_short_cpu_time) { VERIFY_SCOPE_MAX_CPUTIME_MS(3) { for (int i = 0; i < 50; ++i) { usleep(1000); // would fail if implemented as busy wait } } } TEST(short_real_time_long_cpu_time) { const clock_t clocks_per_tick = sysconf(_SC_CLK_TCK); tms t; times(&t); clock_t deadline = t.tms_utime + t.tms_stime + clocks_per_tick/10; VERIFY_SCOPE_MAX_CPUTIME_MS(100) { for (;;) { for (volatile int n = 0; n < 100000; ++n) ; times(&t); if (t.tms_utime + t.tms_stime > deadline) break; } } INFO << "after violation"; } int main(int argc, char *argv[]) { return crpcut::run(argc, argv); }
reports one failed test followed by an
INFO
log entry:
FAILED!: short_real_time_long_cpu_time fail--------------------------------------------------------------------------- samples/verify_scope_max_cpu.cpp:51 VERIFY_SCOPE_MAX_CPUTIME_MS(100) Actual time used was 110ms ------------------------------------------------------------------------------- info--------------------------------------------------------------------------- samples/verify_scope_max_cpu.cpp:61 after violation ------------------------------------------------------------------------------- phase="running" -------------------------------------------------------------- samples/verify_scope_max_cpu.cpp:45 Earlier VERIFY failed ------------------------------------------------------------------------------- =============================================================================== 2 test cases selected Sum Critical Non-critical PASSED : 1 1 0 FAILED : 1 1 0