diff options
| author | hachem <im@hachem.wtf> | 2025-12-21 05:46:36 +0100 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-12-21 05:46:36 +0100 |
| commit | d660dc5748656e7ddc7b3343c96d9a7bdaadd502 (patch) | |
| tree | 1b68729fdb8a5f2d0db62b6eabac90b76efba4d8 /test/instr_demo.c | |
| parent | 15b4b64475138a810d4c4dde485c08603ceb592a (diff) | |
refactor: reorganize tests
Diffstat (limited to 'test/instr_demo.c')
| -rw-r--r-- | test/instr_demo.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/test/instr_demo.c b/test/instr_demo.c new file mode 100644 index 0000000..7983b82 --- /dev/null +++ b/test/instr_demo.c @@ -0,0 +1,51 @@ +// a fully instrumented demo: built with -finstrument-functions so EVERY function +// here is traced automatically, no hand-picking. kept in plain C with only +// printf and nanosleep so the trace is exactly these functions +#include <stdio.h> +#include <time.h> + +static void nap(long ms) +{ + struct timespec ts = { ms / 1000, (ms % 1000) * 1000000L }; + nanosleep(&ts, NULL); +} + +static long leaf(int n) +{ + long total = 0; + for (int i = 0; i < n * 40000; ++i) + total += i % 7; + + return total; +} + +static long inner(int round) +{ + long total = 0; + for (int i = 1; i <= 3; ++i) + total += leaf(round % 4 + i); + + return total; +} + +static long outer(int round) +{ + const long a = inner(round); + nap(20); + const long b = inner(round + 1); + return a + b; +} + +int main(void) +{ + for (int round = 0; round < 15; ++round) + { + const long result = outer(round); + printf("round %d -> %ld\n", round, result); + fflush(stdout); + nap(120); + } + + puts("done"); + return 0; +} |
