#if 0
/*ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â To the extent possible under law, Justine Tunney has waived      â
â all copyright and related or neighboring rights to this file,    â
â as it is written in the following disclaimers:                   â
â   â¢ http://unlicense.org/                                        â
â   â¢ http://creativecommons.org/publicdomain/zero/1.0/            â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ*/
#endif
#include "libc/assert.h"
#include "libc/calls/struct/timespec.h"
#include "libc/stdio/stdio.h"
#include "libc/sysv/consts/clock.h"

/**
 * @fileoverview shows how accurate clock_nanosleep() is
 */

int main(int argc, char *argv[]) {
  long i, ns;
  struct timespec x, y, w;
  timespec_sleep(timespec_fromnanos(0));  // warmup

  printf("\nrelative sleep\n");
  for (i = 0; i < 28; ++i) {
    ns = 1l << i;
    x = timespec_real();
    timespec_sleep(timespec_fromnanos(ns));
    y = timespec_real();
    printf("%,11ld ns sleep took %,ld ns\n", ns,
           timespec_tonanos(timespec_sub(y, x)));
  }

  printf("\nabsolute sleep\n");
  for (i = 0; i < 28; ++i) {
    ns = 1l << i;
    x = timespec_real();
    timespec_sleep_until(timespec_add(x, timespec_fromnanos(ns)));
    y = timespec_real();
    printf("%,11ld ns sleep took %,ld ns\n", ns,
           timespec_tonanos(timespec_sub(y, x)));
  }
}
