1 /* $OpenBSD: test_time_skew.c,v 1.1 2020/07/06 13:33:06 pirofti Exp $ */ 2 /* 3 * Copyright (c) 2020 Paul Irofti <paul@irofti.net> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #include <sys/time.h> 19 20 #include <assert.h> 21 #include <time.h> 22 #include <stdlib.h> 23 #include <stdio.h> 24 25 #define ASSERT_EQ(a, b) assert((a) == (b)) 26 #define ASSERT_NE(a, b) assert((a) != (b)) 27 28 void 29 check() 30 { 31 struct timespec tp1, tp2, tout; 32 33 tout.tv_sec = 0; 34 tout.tv_nsec = 100000; 35 36 ASSERT_EQ(0, clock_gettime(CLOCK_MONOTONIC, &tp1)); 37 38 nanosleep(&tout, NULL); 39 40 ASSERT_EQ(0, clock_gettime(CLOCK_MONOTONIC, &tp2)); 41 42 /* tp1 should never be larger than tp2 */ 43 ASSERT_NE(1, timespeccmp(&tp1, &tp2, >)); 44 } 45 46 int 47 main(void) 48 { 49 int i; 50 51 for (i = 0; i < 1000; i++) 52 check(); 53 54 return 0; 55 } 56