Home | History | Annotate | Line # | Download | only in kernel
      1 /*	$NetBSD: t_time_arith.c,v 1.7 2025/10/06 12:05:04 riastradh Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2024-2025 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26  * POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #include <sys/cdefs.h>
     30 __RCSID("$NetBSD: t_time_arith.c,v 1.7 2025/10/06 12:05:04 riastradh Exp $");
     31 
     32 #include <sys/timearith.h>
     33 
     34 #include <atf-c.h>
     35 #include <errno.h>
     36 #include <limits.h>
     37 #include <setjmp.h>
     38 #include <signal.h>
     39 #include <stdbool.h>
     40 #include <stdint.h>
     41 #include <stdio.h>
     42 #include <stdlib.h>
     43 #include <string.h>
     44 #include <time.h>
     45 #include <unistd.h>
     46 #include <util.h>
     47 
     48 #include "h_macros.h"
     49 
     50 enum { HZ = 100 };
     51 
     52 int hz = HZ;
     53 int tick = 1000000/HZ;
     54 
     55 static sig_atomic_t jmp_en;
     56 static int jmp_sig;
     57 static jmp_buf jmp;
     58 
     59 static void
     60 handle_signal(int signo)
     61 {
     62 	const int errno_save = errno;
     63 	char buf[32];
     64 
     65 	snprintf_ss(buf, sizeof(buf), "signal %d\n", signo);
     66 	(void)write(STDERR_FILENO, buf, strlen(buf));
     67 
     68 	errno = errno_save;
     69 
     70 	if (jmp_en) {
     71 		jmp_sig = signo;
     72 		jmp_en = 0;
     73 		longjmp(jmp, 1);
     74 	} else {
     75 		raise_default_signal(signo);
     76 	}
     77 }
     78 
     79 const struct itimer_transition {
     80 	struct itimerspec	it_time;
     81 	struct timespec		it_now;
     82 	struct timespec		it_next;
     83 	int			it_overruns;
     84 	const char		*it_xfail;
     85 } itimer_transitions[] = {
     86 	/*
     87 	 * Fired more than one interval early -- treat clock as wound
     88 	 * backwards, not counting overruns.  Advance to the next
     89 	 * integral multiple of it_interval starting from it_value.
     90 	 */
     91 	[0] = {{.it_value = {3,0}, .it_interval = {1,0}},
     92 	       {0,1}, {1,0}, 0,
     93 	       NULL},
     94 	[1] = {{.it_value = {3,0}, .it_interval = {1,0}},
     95 	       {0,500000000}, {1,0}, 0,
     96 	       NULL},
     97 	[2] = {{.it_value = {3,0}, .it_interval = {1,0}},
     98 	       {0,999999999}, {1,0}, 0,
     99 	       NULL},
    100 	[3] = {{.it_value = {3,0}, .it_interval = {1,0}},
    101 	       {1,0}, {2,0}, 0,
    102 	       NULL},
    103 	[4] = {{.it_value = {3,0}, .it_interval = {1,0}},
    104 	       {1,1}, {2,0}, 0,
    105 	       NULL},
    106 	[5] = {{.it_value = {3,0}, .it_interval = {1,0}},
    107 	       {1,500000000}, {2,0}, 0,
    108 	       NULL},
    109 	[6] = {{.it_value = {3,0}, .it_interval = {1,0}},
    110 	       {1,999999999}, {2,0}, 0,
    111 	       NULL},
    112 
    113 	/*
    114 	 * Fired exactly one interval early.  Treat this too as clock
    115 	 * wound backwards.
    116 	 */
    117 	[7] = {{.it_value = {3,0}, .it_interval = {1,0}},
    118 	       {2,0}, {3,0}, 0,
    119 	       NULL},
    120 
    121 	/*
    122 	 * Fired less than one interval early -- callouts and real-time
    123 	 * clock might not be perfectly synced, counted as zero
    124 	 * overruns.  Advance by one interval from the scheduled time.
    125 	 */
    126 	[8] = {{.it_value = {3,0}, .it_interval = {1,0}},
    127 	       {2,1}, {3,0}, 0,
    128 	       NULL},
    129 	[9] = {{.it_value = {3,0}, .it_interval = {1,0}},
    130 	       {2,500000000}, {3,0}, 0,
    131 	       NULL},
    132 	[10] = {{.it_value = {3,0}, .it_interval = {1,0}},
    133 		{2,999999999}, {3,0}, 0,
    134 		NULL},
    135 
    136 	/*
    137 	 * Fired exactly on time.  Advance by one interval.
    138 	 */
    139 	[11] = {{.it_value = {3,0}, .it_interval = {1,0}},
    140 		{3,0}, {4,0}, 0, NULL},
    141 
    142 	/*
    143 	 * Fired late by less than one interval -- callouts and
    144 	 * real-time clock might not be prefectly synced, counted as
    145 	 * zero overruns.  Advance by one interval from the scheduled
    146 	 * time (even if it's very close to a full interval).
    147 	 */
    148 	[12] = {{.it_value = {3,0}, .it_interval = {1,0}},
    149 		{3,1}, {4,0}, 0, NULL},
    150 	[14] = {{.it_value = {3,0}, .it_interval = {1,0}},
    151 		{3,500000000}, {4,0}, 0, NULL},
    152 	[15] = {{.it_value = {3,0}, .it_interval = {1,0}},
    153 		{3,999999999}, {4,0}, 0, NULL},
    154 
    155 	/*
    156 	 * Fired late by exactly one interval -- treat it as overrun.
    157 	 */
    158 	[16] = {{.it_value = {3,0}, .it_interval = {1,0}},
    159 		{4,0}, {5,0}, 1,
    160 		NULL},
    161 
    162 	/*
    163 	 * Fired late by more than one interval but less than two --
    164 	 * overrun.
    165 	 */
    166 	[17] = {{.it_value = {3,0}, .it_interval = {1,0}},
    167 		{4,1}, {5,0}, 1,
    168 		NULL},
    169 	[18] = {{.it_value = {3,0}, .it_interval = {1,0}},
    170 		{4,500000000}, {5,0}, 1,
    171 		NULL},
    172 	[19] = {{.it_value = {3,0}, .it_interval = {1,0}},
    173 		{4,999999999}, {5,0}, 1,
    174 		NULL},
    175 
    176 	/*
    177 	 * Fired late by exactly two intervals -- two overruns.
    178 	 */
    179 	[20] = {{.it_value = {3,0}, .it_interval = {1,0}},
    180 		{5,0}, {6,0}, 2,
    181 		NULL},
    182 
    183 	/*
    184 	 * Fired late by more intervals plus slop, up to 32.
    185 	 *
    186 	 * XXX Define DELAYTIMER_MAX so we can write it in terms of
    187 	 * that.
    188 	 */
    189 	[21] = {{.it_value = {3,0}, .it_interval = {1,0}},
    190 		{13,123456789}, {14,0}, 10,
    191 		NULL},
    192 	[22] = {{.it_value = {3,0}, .it_interval = {1,0}},
    193 		{34,999999999}, {35,0}, 31,
    194 		NULL},
    195 
    196 	/*
    197 	 * Fired late by roughly INT_MAX intervals.
    198 	 */
    199 	[23] = {{.it_value = {3,0}, .it_interval = {1,0}},
    200 		{(time_t)3 + INT_MAX - 1, 0},
    201 		{(time_t)3 + INT_MAX, 0},
    202 		INT_MAX - 1,
    203 		NULL},
    204 	[24] = {{.it_value = {3,0}, .it_interval = {1,0}},
    205 		{(time_t)3 + INT_MAX, 0},
    206 		{(time_t)3 + INT_MAX + 1, 0},
    207 		INT_MAX,
    208 		NULL},
    209 	[25] = {{.it_value = {3,0}, .it_interval = {1,0}},
    210 		{(time_t)3 + INT_MAX + 1, 0},
    211 		{(time_t)3 + INT_MAX + 2, 0},
    212 		INT_MAX,
    213 		NULL},
    214 
    215 	/* (2^63 - 1) ns */
    216 	[26] = {{.it_value = {3,0}, .it_interval = {9223372036,854775807}},
    217 		{3,1}, {9223372039,854775807}, 0, NULL},
    218 	/* 2^63 ns */
    219 	[27] = {{.it_value = {3,0}, .it_interval = {9223372036,854775808}},
    220 		{3,1}, {9223372039,854775808}, 0, NULL},
    221 	/* (2^63 + 1) ns */
    222 	[28] = {{.it_value = {3,0}, .it_interval = {9223372036,854775809}},
    223 		{3,1}, {9223372039,854775809}, 0, NULL},
    224 
    225 	/*
    226 	 * Overflows -- we should (XXX but currently don't) reject
    227 	 * intervals of at least 2^64 nanoseconds up front, since this
    228 	 * is more time than it is reasonable to wait (more than 584
    229 	 * years).
    230 	 */
    231 
    232 	/* (2^64 - 1) ns */
    233 	[29] = {{.it_value = {3,0}, .it_interval = {18446744073,709551615}},
    234 		{2,999999999}, {0,0}, 0,
    235 		NULL},
    236 	/* 2^64 ns */
    237 	[30] = {{.it_value = {3,0}, .it_interval = {18446744073,709551616}},
    238 		{2,999999999}, {0,0}, 0,
    239 		NULL},
    240 	/* (2^64 + 1) ns */
    241 	[31] = {{.it_value = {3,0}, .it_interval = {18446744073,709551617}},
    242 		{2,999999999}, {0,0}, 0,
    243 		NULL},
    244 
    245 	/* (2^63 - 1) us */
    246 	[32] = {{.it_value = {3,0}, .it_interval = {9223372036854,775807}},
    247 		{2,999999999}, {0,0}, 0,
    248 		NULL},
    249 	/* 2^63 us */
    250 	[33] = {{.it_value = {3,0}, .it_interval = {9223372036854,775808}},
    251 		{2,999999999}, {0,0}, 0,
    252 		NULL},
    253 	/* (2^63 + 1) us */
    254 	[34] = {{.it_value = {3,0}, .it_interval = {9223372036854,775809}},
    255 		{2,999999999}, {0,0}, 0,
    256 		NULL},
    257 
    258 	/* (2^64 - 1) us */
    259 	[35] = {{.it_value = {3,0}, .it_interval = {18446744073709,551615}},
    260 		{2,999999999}, {0,0}, 0,
    261 		NULL},
    262 	/* 2^64 us */
    263 	[36] = {{.it_value = {3,0}, .it_interval = {18446744073709,551616}},
    264 		{2,999999999}, {0,0}, 0,
    265 		NULL},
    266 	/* (2^64 + 1) us */
    267 	[37] = {{.it_value = {3,0}, .it_interval = {18446744073709,551617}},
    268 		{2,999999999}, {0,0}, 0,
    269 		NULL},
    270 
    271 	/* (2^63 - 1) ms */
    272 	[38] = {{.it_value = {3,0}, .it_interval = {9223372036854775,807}},
    273 		{2,999999999}, {0,0}, 0,
    274 		NULL},
    275 	/* 2^63 ms */
    276 	[39] = {{.it_value = {3,0}, .it_interval = {9223372036854775,808}},
    277 		{2,999999999}, {0,0}, 0,
    278 		NULL},
    279 	/* (2^63 + 1) ms */
    280 	[40] = {{.it_value = {3,0}, .it_interval = {9223372036854775,809}},
    281 		{2,999999999}, {0,0}, 0,
    282 		NULL},
    283 
    284 	/* (2^64 - 1) ms */
    285 	[41] = {{.it_value = {3,0}, .it_interval = {18446744073709551,615}},
    286 		{2,999999999}, {0,0}, 0,
    287 		NULL},
    288 	/* 2^64 ms */
    289 	[42] = {{.it_value = {3,0}, .it_interval = {18446744073709551,616}},
    290 		{2,999999999}, {0,0}, 0,
    291 		NULL},
    292 	/* (2^64 + 1) ms */
    293 	[43] = {{.it_value = {3,0}, .it_interval = {18446744073709551,617}},
    294 		{2,999999999}, {0,0}, 0,
    295 		NULL},
    296 
    297 	/* invalid intervals */
    298 	[44] = {{.it_value = {3,0}, .it_interval = {-1,0}},
    299 		{3,1}, {0,0}, 0, NULL},
    300 	[45] = {{.it_value = {3,0}, .it_interval = {0,-1}},
    301 		{3,1}, {0,0}, 0, NULL},
    302 	[46] = {{.it_value = {3,0}, .it_interval = {0,1000000000}},
    303 		{3,1}, {0,0}, 0, NULL},
    304 
    305 	/*
    306 	 * Overflow nanosecond arithmetic.  The magic interval number
    307 	 * here is ceiling(INT64_MAX/2) nanoseconds.  The interval
    308 	 * start value will be rounded to an integral number of ticks,
    309 	 * so rather than write exactly `4611686018,427387905', just
    310 	 * round up the `now' value to the next second.  This forces an
    311 	 * overrun _and_ triggers int64_t arithmetic overflow.
    312 	 */
    313 	[47] = {{.it_value = {0,1},
    314 		 .it_interval = {4611686018,427387904}},
    315 		/* XXX needless overflow */
    316 		{4611686019,0}, {0,0}, 1,
    317 		NULL},
    318 
    319 	/* interval ~ 1/4 * (2^63 - 1) ns, now ~ 3/4 * (2^63 - 1) ns */
    320 	[48] = {{.it_value = {0,1},
    321 		 .it_interval = {2305843009,213693952}},
    322 		/* XXX needless overflow */
    323 		{6917529028,0}, {0,0}, 3,
    324 		NULL},
    325 	[49] = {{.it_value = {6917529027,0},
    326 		 .it_interval = {2305843009,213693952}},
    327 		{6917529028,0}, {9223372036,213693952}, 0, NULL},
    328 	[50] = {{.it_value = {6917529029,0},
    329 		 .it_interval = {2305843009,213693952}},
    330 		{6917529028,0}, {6917529029,0}, 0,
    331 		NULL},
    332 
    333 	/* interval ~ 1/2 * (2^63 - 1) ns, now ~ 3/4 * (2^63 - 1) ns */
    334 	[51] = {{.it_value = {0,1},
    335 		 .it_interval = {4611686018,427387904}},
    336 		/* XXX needless overflow */
    337 		{6917529028,0}, {0,0}, 1,
    338 		NULL},
    339 	[52] = {{.it_value = {2305843009,213693951}, /* ~1/4 * (2^63 - 1) */
    340 		 .it_interval = {4611686018,427387904}},
    341 		/* XXX needless overflow */
    342 		{6917529028,0}, {0,0}, 1,
    343 		NULL},
    344 	[54] = {{.it_value = {6917529027,0},
    345 		 .it_interval = {4611686018,427387904}},
    346 		{6917529028,0}, {11529215045,427387904}, 0, NULL},
    347 	[55] = {{.it_value = {6917529029,0},
    348 		 .it_interval = {4611686018,427387904}},
    349 		{6917529028,0}, {6917529029,0}, 0,
    350 		NULL},
    351 
    352 	[56] = {{.it_value = {INT64_MAX - 1,0}, .it_interval = {1,0}},
    353 		/* XXX needless overflow */
    354 		{INT64_MAX - 2,999999999}, {0,0}, 0,
    355 		NULL},
    356 	[57] = {{.it_value = {INT64_MAX - 1,0}, .it_interval = {1,0}},
    357 		{INT64_MAX - 1,0}, {INT64_MAX,0}, 0, NULL},
    358 	[58] = {{.it_value = {INT64_MAX - 1,0}, .it_interval = {1,0}},
    359 		{INT64_MAX - 1,1}, {INT64_MAX,0}, 0, NULL},
    360 	[59] = {{.it_value = {INT64_MAX - 1,0}, .it_interval = {1,0}},
    361 		{INT64_MAX - 1,999999999}, {INT64_MAX,0}, 0, NULL},
    362 	[60] = {{.it_value = {INT64_MAX - 1,0}, .it_interval = {1,0}},
    363 		{INT64_MAX,0}, {0,0}, 0,
    364 		NULL},
    365 	[61] = {{.it_value = {INT64_MAX - 1,0}, .it_interval = {1,0}},
    366 		{INT64_MAX,1}, {0,0}, 0,
    367 		NULL},
    368 	[62] = {{.it_value = {INT64_MAX - 1,0}, .it_interval = {1,0}},
    369 		{INT64_MAX,999999999}, {0,0}, 0,
    370 		NULL},
    371 
    372 	[63] = {{.it_value = {INT64_MAX,0}, .it_interval = {1,0}},
    373 		{INT64_MAX - 1,1}, {0,0}, 0,
    374 		NULL},
    375 	[64] = {{.it_value = {INT64_MAX,0}, .it_interval = {1,0}},
    376 		{INT64_MAX - 1,999999999}, {0,0}, 0,
    377 		NULL},
    378 	[65] = {{.it_value = {INT64_MAX,0}, .it_interval = {1,0}},
    379 		{INT64_MAX,0}, {0,0}, 0,
    380 		NULL},
    381 	[66] = {{.it_value = {INT64_MAX,0}, .it_interval = {1,0}},
    382 		{INT64_MAX,1}, {0,0}, 0,
    383 		NULL},
    384 	[67] = {{.it_value = {INT64_MAX,0}, .it_interval = {1,0}},
    385 		{INT64_MAX,999999999}, {0,0}, 0,
    386 		NULL},
    387 };
    388 
    389 ATF_TC(itimer_transitions);
    390 ATF_TC_HEAD(itimer_transitions, tc)
    391 {
    392 	atf_tc_set_md_var(tc, "descr",
    393 	    "Tests interval timer transitions");
    394 }
    395 ATF_TC_BODY(itimer_transitions, tc)
    396 {
    397 	volatile unsigned i;
    398 
    399 	REQUIRE_LIBC(signal(SIGFPE, handle_signal), SIG_ERR);
    400 	REQUIRE_LIBC(signal(SIGABRT, handle_signal), SIG_ERR);
    401 
    402 	for (i = 0; i < __arraycount(itimer_transitions); i++) {
    403 		struct itimer_transition it = itimer_transitions[i];
    404 		struct timespec next;
    405 		int overruns;
    406 		volatile bool aborted = true;
    407 		volatile bool expect_abort = false;
    408 
    409 		fprintf(stderr, "case %u\n", i);
    410 
    411 		if (it.it_xfail)
    412 			atf_tc_expect_fail("%s", it.it_xfail);
    413 
    414 		if (itimespecfix(&it.it_time.it_value) != 0 ||
    415 		    itimespecfix(&it.it_time.it_interval) != 0) {
    416 			fprintf(stderr, "rejected by itimerspecfix\n");
    417 			expect_abort = true;
    418 		}
    419 
    420 		if (setjmp(jmp) == 0) {
    421 			jmp_en = 1;
    422 			itimer_transition(&it.it_time, &it.it_now,
    423 			    &next, &overruns);
    424 			jmp_en = 0;
    425 			aborted = false;
    426 		}
    427 		ATF_CHECK(!jmp_en);
    428 		jmp_en = 0;	/* paranoia */
    429 		if (expect_abort) {
    430 			fprintf(stderr, "expected abort\n");
    431 			ATF_CHECK_MSG(aborted,
    432 			    "[%u] missing invariant assertion", i);
    433 			ATF_CHECK_MSG(jmp_sig == SIGABRT,
    434 			    "[%u] missing invariant assertion", i);
    435 		} else {
    436 			ATF_CHECK_MSG(!aborted, "[%u] raised signal %d: %s", i,
    437 			    jmp_sig, strsignal(jmp_sig));
    438 		}
    439 
    440 		ATF_CHECK_MSG((next.tv_sec == it.it_next.tv_sec &&
    441 			next.tv_nsec == it.it_next.tv_nsec),
    442 		    "[%u] periodic intervals of %lld.%09d from %lld.%09d"
    443 		    " last expired at %lld.%09d:"
    444 		    " next expiry at %lld.%09d, expected %lld.%09d", i,
    445 		    (long long)it.it_time.it_interval.tv_sec,
    446 		    (int)it.it_time.it_interval.tv_nsec,
    447 		    (long long)it.it_time.it_value.tv_sec,
    448 		    (int)it.it_time.it_value.tv_nsec,
    449 		    (long long)it.it_now.tv_sec, (int)it.it_now.tv_nsec,
    450 		    (long long)next.tv_sec, (int)next.tv_nsec,
    451 		    (long long)it.it_next.tv_sec, (int)it.it_next.tv_nsec);
    452 		ATF_CHECK_EQ_MSG(overruns, it.it_overruns,
    453 		    "[%u] periodic intervals of %lld.%09d from %lld.%09d"
    454 		    " last expired at %lld.%09d:"
    455 		    " overruns %d, expected %d", i,
    456 		    (long long)it.it_time.it_interval.tv_sec,
    457 		    (int)it.it_time.it_interval.tv_nsec,
    458 		    (long long)it.it_time.it_value.tv_sec,
    459 		    (int)it.it_time.it_value.tv_nsec,
    460 		    (long long)it.it_now.tv_sec, (int)it.it_now.tv_nsec,
    461 		    overruns, it.it_overruns);
    462 
    463 		if (it.it_xfail)
    464 			atf_tc_expect_pass();
    465 	}
    466 }
    467 
    468 /*
    469  *                        { 0,                  if t <= 0;
    470  * tstohz(t sec) @ f Hz = { ceil(t/(1/f)),      if that's below INT_MAX;
    471  *                        { INT_MAX,            otherwise.
    472  */
    473 
    474 #define	TSTOHZ_ROUND_XFAIL						      \
    475 	"PR kern/59691: tstohz(9) rounding errors"
    476 
    477 const struct tstohz_case {
    478 	int ts_hz;
    479 	struct timespec ts_ts;
    480 	int ts_ticks;
    481 	const char *ts_xfail;
    482 } tstohz_cases[] = {
    483 	/*
    484 	 * hz = 10
    485 	 */
    486 
    487 	/* negative inputs yield 0 ticks */
    488 	[0] = {10, {.tv_sec = -1, .tv_nsec = 0}, 0, NULL},
    489 	[1] = {10, {.tv_sec = -1, .tv_nsec = 999999999}, 0, NULL},
    490 
    491 	/* zero input yields 0 ticks */
    492 	[2] = {10, {.tv_sec = 0, .tv_nsec = 0}, 0, NULL},
    493 
    494 	/*
    495 	 * Nonzero input always yields >=2 ticks, because the time from
    496 	 * now until the next tick may be arbitrarily short, and we
    497 	 * need to wait one full tick, so we have to wait for two
    498 	 * ticks.
    499 	 */
    500 	[3] = {10, {.tv_sec = 0, .tv_nsec = 1}, 2, NULL},
    501 	[4] = {10, {.tv_sec = 0, .tv_nsec = 2}, 2, NULL},
    502 	[5] = {10, {.tv_sec = 0, .tv_nsec = 99999999}, 2, NULL},
    503 	[6] = {10, {.tv_sec = 0, .tv_nsec = 100000000}, 2, NULL},
    504 	[7] = {10, {.tv_sec = 0, .tv_nsec = 100000001}, 3, NULL},
    505 	[8] = {10, {.tv_sec = 0, .tv_nsec = 100000002}, 3, NULL},
    506 	[9] = {10, {.tv_sec = 0, .tv_nsec = 199999999}, 3, NULL},
    507 	[10] = {10, {.tv_sec = 0, .tv_nsec = 200000000}, 3, NULL},
    508 	[11] = {10, {.tv_sec = 0, .tv_nsec = 200000001}, 4, NULL},
    509 	[12] = {10, {.tv_sec = 0, .tv_nsec = 200000002}, 4, NULL},
    510 	[13] = {10, {.tv_sec = 0, .tv_nsec = 999999999}, 11, NULL},
    511 	[14] = {10, {.tv_sec = 1, .tv_nsec = 0}, 11, NULL},
    512 	[15] = {10, {.tv_sec = 1, .tv_nsec = 1}, 12, NULL},
    513 	[16] = {10, {.tv_sec = 1, .tv_nsec = 2}, 12, NULL},
    514 	/* .tv_sec ~ INT32_MAX/1000000 */
    515 	[17] = {10, {.tv_sec = 2147, .tv_nsec = 999999999}, 21481, NULL},
    516 	[18] = {10, {.tv_sec = 2148, .tv_nsec = 0}, 21481, NULL},
    517 	[19] = {10, {.tv_sec = 2148, .tv_nsec = 1}, 21482, NULL},
    518 	[20] = {10, {.tv_sec = 2148, .tv_nsec = 2}, 21482, NULL},
    519 	/* .tv_sec ~ INT32_MAX/hz */
    520 	[21] = {10, {.tv_sec = 214748364, .tv_nsec = 499999999}, 2147483646,
    521 		NULL},
    522 	/* saturate at INT_MAX = 2^31 - 1 ticks */
    523 	[22] = {10, {.tv_sec = 214748364, .tv_nsec = 500000000}, 2147483646,
    524 		NULL},
    525 	[23] = {10, {.tv_sec = 214748364, .tv_nsec = 500000001}, 2147483647,
    526 		NULL},
    527 	[24] = {10, {.tv_sec = 214748364, .tv_nsec = 500000002}, 2147483647,
    528 		NULL},
    529 	[25] = {10, {.tv_sec = 214748364, .tv_nsec = 599999999}, 2147483647,
    530 		NULL},
    531 	[26] = {10, {.tv_sec = 214748364, .tv_nsec = 600000000}, 2147483647,
    532 		NULL},
    533 	[27] = {10, {.tv_sec = 214748364, .tv_nsec = 999999999}, 2147483647,
    534 		NULL},
    535 	[28] = {10, {.tv_sec = 214748365, .tv_nsec = 0}, 2147483647,
    536 		NULL},
    537 	[29] = {10, {.tv_sec = 214748365, .tv_nsec = 1}, 2147483647,
    538 		NULL},
    539 	[30] = {10, {.tv_sec = 214748365, .tv_nsec = 2}, 2147483647,
    540 		NULL},
    541 	[31] = {10, {.tv_sec = (time_t)INT_MAX + 1, .tv_nsec = 123456789},
    542 		INT_MAX, NULL},
    543 	/* .tv_sec ~ INT64_MAX/1000000, overflows to INT_MAX ticks */
    544 	[32] = {10, {.tv_sec = 9223372036854, .tv_nsec = 999999999},
    545 		INT_MAX, NULL},
    546 	[33] = {10, {.tv_sec = 9223372036855, .tv_nsec = 0},
    547 		INT_MAX, NULL},
    548 	[34] = {10, {.tv_sec = 9223372036855, .tv_nsec = 1},
    549 		INT_MAX, NULL},
    550 	[35] = {10, {.tv_sec = 9223372036855, .tv_nsec = 2},
    551 		INT_MAX, NULL},
    552 	/* .tv_sec ~ INT64_MAX/hz, overflows to INT_MAX ticks */
    553 	[36] = {10, {.tv_sec = 922337203685477580, .tv_nsec = 999999999},
    554 		INT_MAX, NULL},
    555 	[37] = {10, {.tv_sec = 922337203685477581, .tv_nsec = 0},
    556 		INT_MAX, NULL},
    557 	[38] = {10, {.tv_sec = 922337203685477581, .tv_nsec = 1},
    558 		INT_MAX, NULL},
    559 	[39] = {10, {.tv_sec = 922337203685477581, .tv_nsec = 2},
    560 		INT_MAX, NULL},
    561 	[40] = {10, {.tv_sec = (time_t)INT_MAX + 1, .tv_nsec = 123456789},
    562 		INT_MAX, NULL},
    563 
    564 	/*
    565 	 * hz = 100
    566 	 */
    567 
    568 	[41] = {100, {.tv_sec = -1, .tv_nsec = 0}, 0, NULL},
    569 	[42] = {100, {.tv_sec = -1, .tv_nsec = 999999999}, 0, NULL},
    570 	[43] = {100, {.tv_sec = 0, .tv_nsec = 0}, 0, NULL},
    571 	[44] = {100, {.tv_sec = 0, .tv_nsec = 1}, 2, NULL},
    572 	[45] = {100, {.tv_sec = 0, .tv_nsec = 2}, 2, NULL},
    573 	[46] = {100, {.tv_sec = 0, .tv_nsec = 9999999}, 2, NULL},
    574 	[47] = {100, {.tv_sec = 0, .tv_nsec = 10000000}, 2, NULL},
    575 	[48] = {100, {.tv_sec = 0, .tv_nsec = 10000001}, 3, NULL},
    576 	[49] = {100, {.tv_sec = 0, .tv_nsec = 10000002}, 3, NULL},
    577 	[50] = {100, {.tv_sec = 0, .tv_nsec = 19999999}, 3, NULL},
    578 	[51] = {100, {.tv_sec = 0, .tv_nsec = 20000000}, 3, NULL},
    579 	[52] = {100, {.tv_sec = 0, .tv_nsec = 20000001}, 4, NULL},
    580 	[53] = {100, {.tv_sec = 0, .tv_nsec = 20000002}, 4, NULL},
    581 	[54] = {100, {.tv_sec = 0, .tv_nsec = 99999999}, 11, NULL},
    582 	[55] = {100, {.tv_sec = 0, .tv_nsec = 100000000}, 11, NULL},
    583 	[56] = {100, {.tv_sec = 0, .tv_nsec = 100000001}, 12, NULL},
    584 	[57] = {100, {.tv_sec = 0, .tv_nsec = 100000002}, 12, NULL},
    585 	[58] = {100, {.tv_sec = 0, .tv_nsec = 999999999}, 101, NULL},
    586 	[59] = {100, {.tv_sec = 1, .tv_nsec = 0}, 101, NULL},
    587 	[60] = {100, {.tv_sec = 1, .tv_nsec = 1}, 102, NULL},
    588 	[61] = {100, {.tv_sec = 1, .tv_nsec = 2}, 102, NULL},
    589 	/* .tv_sec ~ INT32_MAX/1000000 */
    590 	[62] = {100, {.tv_sec = 2147, .tv_nsec = 999999999}, 214801, NULL},
    591 	[63] = {100, {.tv_sec = 2148, .tv_nsec = 0}, 214801, NULL},
    592 	[64] = {100, {.tv_sec = 2148, .tv_nsec = 1}, 214802, NULL},
    593 	[65] = {100, {.tv_sec = 2148, .tv_nsec = 2}, 214802, NULL},
    594 	/* .tv_sec ~ INT32_MAX/hz */
    595 	[66] = {100, {.tv_sec = 21474836, .tv_nsec = 439999999}, 2147483645,
    596 		NULL},
    597 	[67] = {100, {.tv_sec = 21474836, .tv_nsec = 440000000}, 2147483645,
    598 		NULL},
    599 	[68] = {100, {.tv_sec = 21474836, .tv_nsec = 440000001}, 2147483646,
    600 		NULL},
    601 	[69] = {100, {.tv_sec = 21474836, .tv_nsec = 440000002}, 2147483646,
    602 		NULL},
    603 	[70] = {100, {.tv_sec = 21474836, .tv_nsec = 449999999}, 2147483646,
    604 		NULL},
    605 	[71] = {100, {.tv_sec = 21474836, .tv_nsec = 450000000}, 2147483646,
    606 		NULL},
    607 	/* saturate at INT_MAX = 2^31 - 1 ticks */
    608 	[72] = {100, {.tv_sec = 21474836, .tv_nsec = 450000001}, 2147483647,
    609 		NULL},
    610 	[73] = {100, {.tv_sec = 21474836, .tv_nsec = 450000002}, 2147483647,
    611 		NULL},
    612 	[74] = {100, {.tv_sec = 21474836, .tv_nsec = 459999999}, 2147483647,
    613 		NULL},
    614 	[75] = {100, {.tv_sec = 21474836, .tv_nsec = 460000000}, 2147483647,
    615 		NULL},
    616 	[76] = {100, {.tv_sec = 21474836, .tv_nsec = 460000001}, 2147483647,
    617 		NULL},
    618 	[77] = {100, {.tv_sec = 21474836, .tv_nsec = 460000002}, 2147483647,
    619 		NULL},
    620 	[78] = {100, {.tv_sec = 21474836, .tv_nsec = 999999999}, 2147483647,
    621 		NULL},
    622 	[79] = {100, {.tv_sec = 21474837, .tv_nsec = 0}, 2147483647,
    623 		NULL},
    624 	[80] = {100, {.tv_sec = 21474837, .tv_nsec = 1}, 2147483647,
    625 		NULL},
    626 	[81] = {100, {.tv_sec = 21474837, .tv_nsec = 2}, 2147483647,
    627 		NULL},
    628 	[82] = {100, {.tv_sec = 21474837, .tv_nsec = 2}, 2147483647,
    629 		NULL},
    630 	/* .tv_sec ~ INT64_MAX/1000000 */
    631 	[83] = {100, {.tv_sec = 9223372036854, .tv_nsec = 999999999},
    632 		INT_MAX, NULL},
    633 	[84] = {100, {.tv_sec = 9223372036855, .tv_nsec = 0},
    634 		INT_MAX, NULL},
    635 	[85] = {100, {.tv_sec = 9223372036855, .tv_nsec = 1},
    636 		INT_MAX, NULL},
    637 	[86] = {100, {.tv_sec = 9223372036855, .tv_nsec = 2},
    638 		INT_MAX, NULL},
    639 	/* .tv_sec ~ INT64_MAX/hz, overflows to INT_MAX ticks */
    640 	[87] = {100, {.tv_sec = 92233720368547758, .tv_nsec = 999999999},
    641 		INT_MAX, NULL},
    642 	[88] = {100, {.tv_sec = 92233720368547758, .tv_nsec = 0},
    643 		INT_MAX, NULL},
    644 	[89] = {100, {.tv_sec = 92233720368547758, .tv_nsec = 1},
    645 		INT_MAX, NULL},
    646 	[90] = {100, {.tv_sec = 92233720368547758, .tv_nsec = 2},
    647 		INT_MAX, NULL},
    648 	[91] = {100, {.tv_sec = (time_t)INT_MAX + 1, .tv_nsec = 123456789},
    649 		INT_MAX, NULL},
    650 
    651 	/*
    652 	 * hz = 1000
    653 	 */
    654 
    655 	[92] = {1000, {.tv_sec = -1, .tv_nsec = 0}, 0, NULL},
    656 	[93] = {1000, {.tv_sec = -1, .tv_nsec = 999999999}, 0, NULL},
    657 	[94] = {1000, {.tv_sec = 0, .tv_nsec = 0}, 0, NULL},
    658 	[95] = {1000, {.tv_sec = 0, .tv_nsec = 1}, 2, NULL},
    659 	[96] = {1000, {.tv_sec = 0, .tv_nsec = 2}, 2, NULL},
    660 	[97] = {1000, {.tv_sec = 0, .tv_nsec = 999999}, 2, NULL},
    661 	[98] = {1000, {.tv_sec = 0, .tv_nsec = 1000000}, 2, NULL},
    662 	[99] = {1000, {.tv_sec = 0, .tv_nsec = 1000001}, 3, NULL},
    663 	[100] = {1000, {.tv_sec = 0, .tv_nsec = 1000002}, 3, NULL},
    664 	[101] = {1000, {.tv_sec = 0, .tv_nsec = 1999999}, 3, NULL},
    665 	[102] = {1000, {.tv_sec = 0, .tv_nsec = 2000000}, 3, NULL},
    666 	[103] = {1000, {.tv_sec = 0, .tv_nsec = 2000001}, 4, NULL},
    667 	[104] = {1000, {.tv_sec = 0, .tv_nsec = 2000002}, 4, NULL},
    668 	[105] = {1000, {.tv_sec = 0, .tv_nsec = 999999999}, 1001, NULL},
    669 	[106] = {1000, {.tv_sec = 1, .tv_nsec = 0}, 1001, NULL},
    670 	[107] = {1000, {.tv_sec = 1, .tv_nsec = 1}, 1002, NULL},
    671 	[108] = {1000, {.tv_sec = 1, .tv_nsec = 2}, 1002, NULL},
    672 	/* .tv_sec ~ INT_MAX/1000000 */
    673 	[109] = {1000, {.tv_sec = 2147, .tv_nsec = 999999999}, 2148001, NULL},
    674 	[110] = {1000, {.tv_sec = 2148, .tv_nsec = 0}, 2148001, NULL},
    675 	[111] = {1000, {.tv_sec = 2148, .tv_nsec = 1}, 2148002, NULL},
    676 	[112] = {1000, {.tv_sec = 2148, .tv_nsec = 2}, 2148002, NULL},
    677 	/* .tv_sec ~ INT_MAX/hz */
    678 	[113] = {1000, {.tv_sec = 2147483, .tv_nsec = 643999999}, 2147483645,
    679 		NULL},
    680 	[114] = {1000, {.tv_sec = 2147483, .tv_nsec = 644000000}, 2147483645,
    681 		NULL},
    682 	[115] = {1000, {.tv_sec = 2147483, .tv_nsec = 644000001}, 2147483646,
    683 		NULL},
    684 	[116] = {1000, {.tv_sec = 2147483, .tv_nsec = 644000002}, 2147483646,
    685 		NULL},
    686 	[117] = {1000, {.tv_sec = 2147483, .tv_nsec = 644999999}, 2147483646,
    687 		NULL},
    688 	[118] = {1000, {.tv_sec = 2147483, .tv_nsec = 645000000}, 2147483646,
    689 		NULL},
    690 	/* saturate at INT_MAX = 2^31 - 1 ticks */
    691 	[119] = {1000, {.tv_sec = 2147483, .tv_nsec = 645000001}, 2147483647,
    692 		NULL},
    693 	[120] = {1000, {.tv_sec = 2147483, .tv_nsec = 645000002}, 2147483647,
    694 		NULL},
    695 	[121] = {1000, {.tv_sec = 2147483, .tv_nsec = 645999999}, 2147483647,
    696 		NULL},
    697 	[122] = {1000, {.tv_sec = 2147483, .tv_nsec = 646000000}, 2147483647,
    698 		NULL},
    699 	[123] = {1000, {.tv_sec = 2147483, .tv_nsec = 646000001}, 2147483647,
    700 		NULL},
    701 	[124] = {1000, {.tv_sec = 2147483, .tv_nsec = 646000002}, 2147483647,
    702 		NULL},
    703 	[125] = {1000, {.tv_sec = 2147483, .tv_nsec = 699999999}, 2147483647,
    704 		NULL},
    705 	[126] = {1000, {.tv_sec = 2147484, .tv_nsec = 0}, 2147483647,
    706 		NULL},
    707 	[127] = {1000, {.tv_sec = 2147484, .tv_nsec = 1}, 2147483647,
    708 		NULL},
    709 	[128] = {1000, {.tv_sec = 2147484, .tv_nsec = 2}, 2147483647,
    710 		NULL},
    711 	[129] = {1000, {.tv_sec = 2147484, .tv_nsec = 2}, 2147483647,
    712 		NULL},
    713 	/* .tv_sec ~ INT64_MAX/1000000, overflows to INT_MAX ticks */
    714 	[130] = {1000, {.tv_sec = 9223372036854, .tv_nsec = 999999999},
    715 		INT_MAX, NULL},
    716 	[131] = {1000, {.tv_sec = 9223372036855, .tv_nsec = 0},
    717 		INT_MAX, NULL},
    718 	[132] = {1000, {.tv_sec = 9223372036855, .tv_nsec = 1},
    719 		INT_MAX, NULL},
    720 	[133] = {1000, {.tv_sec = 9223372036855, .tv_nsec = 2},
    721 		INT_MAX, NULL},
    722 	/* .tv_sec ~ INT64_MAX/hz, overflows to INT_MAX ticks */
    723 	[134] = {1000, {.tv_sec = 92233720368547758, .tv_nsec = 999999999},
    724 		INT_MAX, NULL},
    725 	[135] = {1000, {.tv_sec = 92233720368547758, .tv_nsec = 0},
    726 		INT_MAX, NULL},
    727 	[136] = {1000, {.tv_sec = 92233720368547758, .tv_nsec = 1},
    728 		INT_MAX, NULL},
    729 	[137] = {1000, {.tv_sec = 92233720368547758, .tv_nsec = 2},
    730 		INT_MAX, NULL},
    731 	[138] = {1000, {.tv_sec = (time_t)INT_MAX + 1, .tv_nsec = 123456789},
    732 		INT_MAX, NULL},
    733 
    734 	/*
    735 	 * hz = 8191, prime non-divisor of 10^k or 2^k
    736 	 */
    737 
    738 	[139] = {8191, {.tv_sec = -1, .tv_nsec = 0}, 0, NULL},
    739 	[140] = {8191, {.tv_sec = -1, .tv_nsec = 999999999}, 0, NULL},
    740 	[141] = {8191, {.tv_sec = 0, .tv_nsec = 0}, 0, NULL},
    741 	[142] = {8191, {.tv_sec = 0, .tv_nsec = 1}, 2, NULL},
    742 	[143] = {8191, {.tv_sec = 0, .tv_nsec = 2}, 2, NULL},
    743 	[144] = {8191, {.tv_sec = 0, .tv_nsec = 122084}, 2,
    744 		TSTOHZ_ROUND_XFAIL},
    745 	[145] = {8191, {.tv_sec = 0, .tv_nsec = 122085}, 2,
    746 		TSTOHZ_ROUND_XFAIL},
    747 	[146] = {8191, {.tv_sec = 0, .tv_nsec = 122086}, 3, NULL},
    748 	[147] = {8191, {.tv_sec = 0, .tv_nsec = 244168}, 3,
    749 		TSTOHZ_ROUND_XFAIL},
    750 	[148] = {8191, {.tv_sec = 0, .tv_nsec = 244169}, 3,
    751 		TSTOHZ_ROUND_XFAIL},
    752 	[149] = {8191, {.tv_sec = 0, .tv_nsec = 244170}, 3,
    753 		TSTOHZ_ROUND_XFAIL},
    754 	[150] = {8191, {.tv_sec = 0, .tv_nsec = 244171}, 4, NULL},
    755 	[151] = {8191, {.tv_sec = 0, .tv_nsec = 244172}, 4, NULL},
    756 	[152] = {8191, {.tv_sec = 0, .tv_nsec = 999999999}, 8192, NULL},
    757 	[153] = {8191, {.tv_sec = 1, .tv_nsec = 0}, 8192, NULL},
    758 	[154] = {8191, {.tv_sec = 1, .tv_nsec = 1}, 8193, NULL},
    759 	[155] = {8191, {.tv_sec = 1, .tv_nsec = 2}, 8193, NULL},
    760 	/* .tv_sec ~ INT_MAX/1000000 */
    761 	[156] = {8191, {.tv_sec = 2147, .tv_nsec = 999999999}, 17594269, NULL},
    762 	[157] = {8191, {.tv_sec = 2148, .tv_nsec = 0}, 17594269, NULL},
    763 	[158] = {8191, {.tv_sec = 2148, .tv_nsec = 1}, 17594270, NULL},
    764 	[159] = {8191, {.tv_sec = 2148, .tv_nsec = 2}, 17594270, NULL},
    765 	/* .tv_sec ~ INT_MAX/hz */
    766 	[160] = {8191, {.tv_sec = 262176, .tv_nsec = 3540471}, 2147483646,
    767 		NULL},
    768 	[161] = {8191, {.tv_sec = 262176, .tv_nsec = 3540472}, 2147483647,
    769 		NULL},
    770 	[162] = {8191, {.tv_sec = 262176, .tv_nsec = 3540473}, 2147483647,
    771 		NULL},
    772 	/* saturate at INT_MAX = 2^31 - 1 ticks */
    773 	[163] = {8191, {.tv_sec = 262176, .tv_nsec = 3662556}, 2147483647,
    774 		NULL},
    775 	[164] = {8191, {.tv_sec = 262176, .tv_nsec = 3662557}, 2147483647,
    776 		NULL},
    777 	[165] = {8191, {.tv_sec = 262176, .tv_nsec = 3662558}, 2147483647,
    778 		NULL},
    779 	[166] = {8191, {.tv_sec = 262176, .tv_nsec = 999999999}, 2147483647,
    780 		NULL},
    781 	/* .tv_sec ~ INT64_MAX/1000000, overflows to INT_MAX ticks */
    782 	[167] = {8191, {.tv_sec = 9223372036854, .tv_nsec = 999999999},
    783 		INT_MAX, NULL},
    784 	[168] = {8191, {.tv_sec = 9223372036855, .tv_nsec = 0},
    785 		INT_MAX, NULL},
    786 	[169] = {8191, {.tv_sec = 9223372036855, .tv_nsec = 1},
    787 		INT_MAX, NULL},
    788 	[170] = {8191, {.tv_sec = 9223372036855, .tv_nsec = 2},
    789 		INT_MAX, NULL},
    790 	/* .tv_sec ~ INT64_MAX/hz, overflows to INT_MAX ticks */
    791 	[171] = {8191, {.tv_sec = 92233720368547758, .tv_nsec = 999999999},
    792 		INT_MAX, NULL},
    793 	[172] = {8191, {.tv_sec = 92233720368547758, .tv_nsec = 0},
    794 		INT_MAX, NULL},
    795 	[173] = {8191, {.tv_sec = 92233720368547758, .tv_nsec = 1},
    796 		INT_MAX, NULL},
    797 	[174] = {8191, {.tv_sec = 92233720368547758, .tv_nsec = 2},
    798 		INT_MAX, NULL},
    799 	[175] = {8191, {.tv_sec = (time_t)INT_MAX + 1, .tv_nsec = 123456789},
    800 		INT_MAX, NULL},
    801 };
    802 
    803 ATF_TC(tstohz);
    804 ATF_TC_HEAD(tstohz, tc)
    805 {
    806 	atf_tc_set_md_var(tc, "descr",
    807 	    "Test tstohz(9)");
    808 }
    809 ATF_TC_BODY(tstohz, tc)
    810 {
    811 	size_t i;
    812 
    813 	for (i = 0; i < __arraycount(tstohz_cases); i++) {
    814 		const struct tstohz_case *ts = &tstohz_cases[i];
    815 		int ticks;
    816 
    817 		/* set system parameters */
    818 		hz = ts->ts_hz;
    819 		tick = 1000000/hz;
    820 
    821 		ticks = tstohz(&ts->ts_ts);
    822 		if (ts->ts_xfail)
    823 			atf_tc_expect_fail("%s", ts->ts_xfail);
    824 
    825 		/*
    826 		 * Allow some slop of one part per thousand in the
    827 		 * arithmetic, but ensure we round up, not down.
    828 		 */
    829 		ATF_CHECK_MSG(((unsigned)(ticks - ts->ts_ticks) <=
    830 			(unsigned)ts->ts_ticks/1000),
    831 		    "[%zu] tstohz(%lld.%09ld sec) @ %d Hz:"
    832 		    " expected %d, got %d",
    833 		    i,
    834 		    (long long)ts->ts_ts.tv_sec,
    835 		    (long)ts->ts_ts.tv_nsec,
    836 		    ts->ts_hz,
    837 		    ts->ts_ticks,
    838 		    ticks);
    839 		if (ts->ts_xfail)
    840 			atf_tc_expect_pass();
    841 	}
    842 }
    843 
    844 /*
    845  *                        { 0,                  if t <= 0;
    846  * tvtohz(t sec) @ f Hz = { ceil(t/(1/f)),      if that's below INT_MAX;
    847  *                        { INT_MAX,            otherwise.
    848  */
    849 
    850 const struct tvtohz_case {
    851 	int tv_hz;
    852 	struct timeval tv_tv;
    853 	int tv_ticks;
    854 	const char *tv_xfail;
    855 } tvtohz_cases[] = {
    856 	/*
    857 	 * hz = 10
    858 	 */
    859 
    860 	/* negative inputs yield 0 ticks */
    861 	[0] = {10, {.tv_sec = -1, .tv_usec = 0}, 0, NULL},
    862 	[1] = {10, {.tv_sec = -1, .tv_usec = 999999}, 0, NULL},
    863 
    864 	/* zero input yields 0 ticks */
    865 	[2] = {10, {.tv_sec = 0, .tv_usec = 0}, 0, NULL},
    866 
    867 	/*
    868 	 * Nonzero input always yields >=2 ticks, because the time from
    869 	 * now until the next tick may be arbitrarily short, and we
    870 	 * need to wait one full tick, so we have to wait for two
    871 	 * ticks.
    872 	 */
    873 	[3] = {10, {.tv_sec = 0, .tv_usec = 1}, 2, NULL},
    874 	[4] = {10, {.tv_sec = 0, .tv_usec = 2}, 2, NULL},
    875 	[5] = {10, {.tv_sec = 0, .tv_usec = 99999}, 2, NULL},
    876 	[6] = {10, {.tv_sec = 0, .tv_usec = 100000}, 2, NULL},
    877 	[7] = {10, {.tv_sec = 0, .tv_usec = 100001}, 3, NULL},
    878 	[8] = {10, {.tv_sec = 0, .tv_usec = 100002}, 3, NULL},
    879 	[9] = {10, {.tv_sec = 0, .tv_usec = 199999}, 3, NULL},
    880 	[10] = {10, {.tv_sec = 0, .tv_usec = 200000}, 3, NULL},
    881 	[11] = {10, {.tv_sec = 0, .tv_usec = 200001}, 4, NULL},
    882 	[12] = {10, {.tv_sec = 0, .tv_usec = 200002}, 4, NULL},
    883 	[13] = {10, {.tv_sec = 0, .tv_usec = 999999}, 11, NULL},
    884 	[14] = {10, {.tv_sec = 1, .tv_usec = 0}, 11, NULL},
    885 	[15] = {10, {.tv_sec = 1, .tv_usec = 1}, 12, NULL},
    886 	[16] = {10, {.tv_sec = 1, .tv_usec = 2}, 12, NULL},
    887 	/* .tv_sec ~ INT32_MAX/1000000 */
    888 	[17] = {10, {.tv_sec = 2147, .tv_usec = 999999}, 21481, NULL},
    889 	[18] = {10, {.tv_sec = 2148, .tv_usec = 0}, 21481, NULL},
    890 	[19] = {10, {.tv_sec = 2148, .tv_usec = 1}, 21482, NULL},
    891 	[20] = {10, {.tv_sec = 2148, .tv_usec = 2}, 21482, NULL},
    892 	/* .tv_sec ~ INT32_MAX/hz */
    893 	[21] = {10, {.tv_sec = 214748364, .tv_usec = 499999}, 2147483646,
    894 		NULL},
    895 	/* saturate at INT_MAX = 2^31 - 1 ticks */
    896 	[22] = {10, {.tv_sec = 214748364, .tv_usec = 500000}, 2147483646,
    897 		NULL},
    898 	[23] = {10, {.tv_sec = 214748364, .tv_usec = 500001}, 2147483647,
    899 		NULL},
    900 	[24] = {10, {.tv_sec = 214748364, .tv_usec = 500002}, 2147483647,
    901 		NULL},
    902 	[25] = {10, {.tv_sec = 214748364, .tv_usec = 599999}, 2147483647,
    903 		NULL},
    904 	[26] = {10, {.tv_sec = 214748364, .tv_usec = 600000}, 2147483647,
    905 		NULL},
    906 	[27] = {10, {.tv_sec = 214748364, .tv_usec = 999999}, 2147483647,
    907 		NULL},
    908 	[28] = {10, {.tv_sec = 214748365, .tv_usec = 0}, 2147483647,
    909 		NULL},
    910 	[29] = {10, {.tv_sec = 214748365, .tv_usec = 1}, 2147483647,
    911 		NULL},
    912 	[30] = {10, {.tv_sec = 214748365, .tv_usec = 2}, 2147483647,
    913 		NULL},
    914 	[31] = {10, {.tv_sec = (time_t)INT_MAX + 1, .tv_usec = 123456},
    915 		INT_MAX, NULL},
    916 	/* .tv_sec ~ INT64_MAX/1000000, overflows to INT_MAX ticks */
    917 	[32] = {10, {.tv_sec = 9223372036854, .tv_usec = 999999},
    918 		INT_MAX, NULL},
    919 	[33] = {10, {.tv_sec = 9223372036855, .tv_usec = 0},
    920 		INT_MAX, NULL},
    921 	[34] = {10, {.tv_sec = 9223372036855, .tv_usec = 1},
    922 		INT_MAX, NULL},
    923 	[35] = {10, {.tv_sec = 9223372036855, .tv_usec = 2},
    924 		INT_MAX, NULL},
    925 	/* .tv_sec ~ INT64_MAX/hz, overflows to INT_MAX ticks */
    926 	[36] = {10, {.tv_sec = 922337203685477580, .tv_usec = 999999},
    927 		INT_MAX, NULL},
    928 	[37] = {10, {.tv_sec = 922337203685477581, .tv_usec = 0},
    929 		INT_MAX, NULL},
    930 	[38] = {10, {.tv_sec = 922337203685477581, .tv_usec = 1},
    931 		INT_MAX, NULL},
    932 	[39] = {10, {.tv_sec = 922337203685477581, .tv_usec = 2},
    933 		INT_MAX, NULL},
    934 	[40] = {10, {.tv_sec = (time_t)INT_MAX + 1, .tv_usec = 123456},
    935 		INT_MAX, NULL},
    936 
    937 	/*
    938 	 * hz = 100
    939 	 */
    940 
    941 	[41] = {100, {.tv_sec = -1, .tv_usec = 0}, 0, NULL},
    942 	[42] = {100, {.tv_sec = -1, .tv_usec = 999999}, 0, NULL},
    943 	[43] = {100, {.tv_sec = 0, .tv_usec = 0}, 0, NULL},
    944 	[44] = {100, {.tv_sec = 0, .tv_usec = 1}, 2, NULL},
    945 	[45] = {100, {.tv_sec = 0, .tv_usec = 2}, 2, NULL},
    946 	[46] = {100, {.tv_sec = 0, .tv_usec = 9999}, 2, NULL},
    947 	[47] = {100, {.tv_sec = 0, .tv_usec = 10000}, 2, NULL},
    948 	[48] = {100, {.tv_sec = 0, .tv_usec = 10001}, 3, NULL},
    949 	[49] = {100, {.tv_sec = 0, .tv_usec = 10002}, 3, NULL},
    950 	[50] = {100, {.tv_sec = 0, .tv_usec = 19999}, 3, NULL},
    951 	[51] = {100, {.tv_sec = 0, .tv_usec = 20000}, 3, NULL},
    952 	[52] = {100, {.tv_sec = 0, .tv_usec = 20001}, 4, NULL},
    953 	[53] = {100, {.tv_sec = 0, .tv_usec = 20002}, 4, NULL},
    954 	[54] = {100, {.tv_sec = 0, .tv_usec = 99999}, 11, NULL},
    955 	[55] = {100, {.tv_sec = 0, .tv_usec = 100000}, 11, NULL},
    956 	[56] = {100, {.tv_sec = 0, .tv_usec = 100001}, 12, NULL},
    957 	[57] = {100, {.tv_sec = 0, .tv_usec = 100002}, 12, NULL},
    958 	[58] = {100, {.tv_sec = 0, .tv_usec = 999999}, 101, NULL},
    959 	[59] = {100, {.tv_sec = 1, .tv_usec = 0}, 101, NULL},
    960 	[60] = {100, {.tv_sec = 1, .tv_usec = 1}, 102, NULL},
    961 	[61] = {100, {.tv_sec = 1, .tv_usec = 2}, 102, NULL},
    962 	/* .tv_sec ~ INT32_MAX/1000000 */
    963 	[62] = {100, {.tv_sec = 2147, .tv_usec = 999999}, 214801, NULL},
    964 	[63] = {100, {.tv_sec = 2148, .tv_usec = 0}, 214801, NULL},
    965 	[64] = {100, {.tv_sec = 2148, .tv_usec = 1}, 214802, NULL},
    966 	[65] = {100, {.tv_sec = 2148, .tv_usec = 2}, 214802, NULL},
    967 	/* .tv_sec ~ INT32_MAX/hz */
    968 	[66] = {100, {.tv_sec = 21474836, .tv_usec = 439999}, 2147483645,
    969 		NULL},
    970 	[67] = {100, {.tv_sec = 21474836, .tv_usec = 440000}, 2147483645,
    971 		NULL},
    972 	[68] = {100, {.tv_sec = 21474836, .tv_usec = 440001}, 2147483646,
    973 		NULL},
    974 	[69] = {100, {.tv_sec = 21474836, .tv_usec = 440002}, 2147483646,
    975 		NULL},
    976 	[70] = {100, {.tv_sec = 21474836, .tv_usec = 449999}, 2147483646,
    977 		NULL},
    978 	[71] = {100, {.tv_sec = 21474836, .tv_usec = 450000}, 2147483646,
    979 		NULL},
    980 	/* saturate at INT_MAX = 2^31 - 1 ticks */
    981 	[72] = {100, {.tv_sec = 21474836, .tv_usec = 450001}, 2147483647,
    982 		NULL},
    983 	[73] = {100, {.tv_sec = 21474836, .tv_usec = 450002}, 2147483647,
    984 		NULL},
    985 	[74] = {100, {.tv_sec = 21474836, .tv_usec = 459999}, 2147483647,
    986 		NULL},
    987 	[75] = {100, {.tv_sec = 21474836, .tv_usec = 460000}, 2147483647,
    988 		NULL},
    989 	[76] = {100, {.tv_sec = 21474836, .tv_usec = 460001}, 2147483647,
    990 		NULL},
    991 	[77] = {100, {.tv_sec = 21474836, .tv_usec = 460002}, 2147483647,
    992 		NULL},
    993 	[78] = {100, {.tv_sec = 21474836, .tv_usec = 999999}, 2147483647,
    994 		NULL},
    995 	[79] = {100, {.tv_sec = 21474837, .tv_usec = 0}, 2147483647,
    996 		NULL},
    997 	[80] = {100, {.tv_sec = 21474837, .tv_usec = 1}, 2147483647,
    998 		NULL},
    999 	[81] = {100, {.tv_sec = 21474837, .tv_usec = 2}, 2147483647,
   1000 		NULL},
   1001 	[82] = {100, {.tv_sec = 21474837, .tv_usec = 2}, 2147483647,
   1002 		NULL},
   1003 	/* .tv_sec ~ INT64_MAX/1000000 */
   1004 	[83] = {100, {.tv_sec = 9223372036854, .tv_usec = 999999},
   1005 		INT_MAX, NULL},
   1006 	[84] = {100, {.tv_sec = 9223372036855, .tv_usec = 0},
   1007 		INT_MAX, NULL},
   1008 	[85] = {100, {.tv_sec = 9223372036855, .tv_usec = 1},
   1009 		INT_MAX, NULL},
   1010 	[86] = {100, {.tv_sec = 9223372036855, .tv_usec = 2},
   1011 		INT_MAX, NULL},
   1012 	/* .tv_sec ~ INT64_MAX/hz, overflows to INT_MAX ticks */
   1013 	[87] = {100, {.tv_sec = 92233720368547758, .tv_usec = 999999},
   1014 		INT_MAX, NULL},
   1015 	[88] = {100, {.tv_sec = 92233720368547758, .tv_usec = 0},
   1016 		INT_MAX, NULL},
   1017 	[89] = {100, {.tv_sec = 92233720368547758, .tv_usec = 1},
   1018 		INT_MAX, NULL},
   1019 	[90] = {100, {.tv_sec = 92233720368547758, .tv_usec = 2},
   1020 		INT_MAX, NULL},
   1021 	[91] = {100, {.tv_sec = (time_t)INT_MAX + 1, .tv_usec = 123456},
   1022 		INT_MAX, NULL},
   1023 
   1024 	/*
   1025 	 * hz = 1000
   1026 	 */
   1027 
   1028 	[92] = {1000, {.tv_sec = -1, .tv_usec = 0}, 0, NULL},
   1029 	[93] = {1000, {.tv_sec = -1, .tv_usec = 999999}, 0, NULL},
   1030 	[94] = {1000, {.tv_sec = 0, .tv_usec = 0}, 0, NULL},
   1031 	[95] = {1000, {.tv_sec = 0, .tv_usec = 1}, 2, NULL},
   1032 	[96] = {1000, {.tv_sec = 0, .tv_usec = 2}, 2, NULL},
   1033 	[97] = {1000, {.tv_sec = 0, .tv_usec = 999}, 2, NULL},
   1034 	[98] = {1000, {.tv_sec = 0, .tv_usec = 1000}, 2, NULL},
   1035 	[99] = {1000, {.tv_sec = 0, .tv_usec = 1001}, 3, NULL},
   1036 	[100] = {1000, {.tv_sec = 0, .tv_usec = 1002}, 3, NULL},
   1037 	[101] = {1000, {.tv_sec = 0, .tv_usec = 1999}, 3, NULL},
   1038 	[102] = {1000, {.tv_sec = 0, .tv_usec = 2000}, 3, NULL},
   1039 	[103] = {1000, {.tv_sec = 0, .tv_usec = 2001}, 4, NULL},
   1040 	[104] = {1000, {.tv_sec = 0, .tv_usec = 2002}, 4, NULL},
   1041 	[105] = {1000, {.tv_sec = 0, .tv_usec = 999999}, 1001, NULL},
   1042 	[106] = {1000, {.tv_sec = 1, .tv_usec = 0}, 1001, NULL},
   1043 	[107] = {1000, {.tv_sec = 1, .tv_usec = 1}, 1002, NULL},
   1044 	[108] = {1000, {.tv_sec = 1, .tv_usec = 2}, 1002, NULL},
   1045 	/* .tv_sec ~ INT_MAX/1000000 */
   1046 	[109] = {1000, {.tv_sec = 2147, .tv_usec = 999999}, 2148001, NULL},
   1047 	[110] = {1000, {.tv_sec = 2148, .tv_usec = 0}, 2148001, NULL},
   1048 	[111] = {1000, {.tv_sec = 2148, .tv_usec = 1}, 2148002, NULL},
   1049 	[112] = {1000, {.tv_sec = 2148, .tv_usec = 2}, 2148002, NULL},
   1050 	/* .tv_sec ~ INT_MAX/hz */
   1051 	[113] = {1000, {.tv_sec = 2147483, .tv_usec = 643999}, 2147483645,
   1052 		NULL},
   1053 	[114] = {1000, {.tv_sec = 2147483, .tv_usec = 644000}, 2147483645,
   1054 		NULL},
   1055 	[115] = {1000, {.tv_sec = 2147483, .tv_usec = 644001}, 2147483646,
   1056 		NULL},
   1057 	[116] = {1000, {.tv_sec = 2147483, .tv_usec = 644002}, 2147483646,
   1058 		NULL},
   1059 	[117] = {1000, {.tv_sec = 2147483, .tv_usec = 644999}, 2147483646,
   1060 		NULL},
   1061 	[118] = {1000, {.tv_sec = 2147483, .tv_usec = 645000}, 2147483646,
   1062 		NULL},
   1063 	/* saturate at INT_MAX = 2^31 - 1 ticks */
   1064 	[119] = {1000, {.tv_sec = 2147483, .tv_usec = 645001}, 2147483647,
   1065 		NULL},
   1066 	[120] = {1000, {.tv_sec = 2147483, .tv_usec = 645002}, 2147483647,
   1067 		NULL},
   1068 	[121] = {1000, {.tv_sec = 2147483, .tv_usec = 645999}, 2147483647,
   1069 		NULL},
   1070 	[122] = {1000, {.tv_sec = 2147483, .tv_usec = 646000}, 2147483647,
   1071 		NULL},
   1072 	[123] = {1000, {.tv_sec = 2147483, .tv_usec = 646001}, 2147483647,
   1073 		NULL},
   1074 	[124] = {1000, {.tv_sec = 2147483, .tv_usec = 646002}, 2147483647,
   1075 		NULL},
   1076 	[125] = {1000, {.tv_sec = 2147483, .tv_usec = 699999}, 2147483647,
   1077 		NULL},
   1078 	[126] = {1000, {.tv_sec = 2147484, .tv_usec = 0}, 2147483647,
   1079 		NULL},
   1080 	[127] = {1000, {.tv_sec = 2147484, .tv_usec = 1}, 2147483647,
   1081 		NULL},
   1082 	[128] = {1000, {.tv_sec = 2147484, .tv_usec = 2}, 2147483647,
   1083 		NULL},
   1084 	[129] = {1000, {.tv_sec = 2147484, .tv_usec = 2}, 2147483647,
   1085 		NULL},
   1086 	/* .tv_sec ~ INT64_MAX/1000000, overflows to INT_MAX ticks */
   1087 	[130] = {1000, {.tv_sec = 9223372036854, .tv_usec = 999999},
   1088 		INT_MAX, NULL},
   1089 	[131] = {1000, {.tv_sec = 9223372036855, .tv_usec = 0},
   1090 		INT_MAX, NULL},
   1091 	[132] = {1000, {.tv_sec = 9223372036855, .tv_usec = 1},
   1092 		INT_MAX, NULL},
   1093 	[133] = {1000, {.tv_sec = 9223372036855, .tv_usec = 2},
   1094 		INT_MAX, NULL},
   1095 	/* .tv_sec ~ INT64_MAX/hz, overflows to INT_MAX ticks */
   1096 	[134] = {1000, {.tv_sec = 92233720368547758, .tv_usec = 999999},
   1097 		INT_MAX, NULL},
   1098 	[135] = {1000, {.tv_sec = 92233720368547758, .tv_usec = 0},
   1099 		INT_MAX, NULL},
   1100 	[136] = {1000, {.tv_sec = 92233720368547758, .tv_usec = 1},
   1101 		INT_MAX, NULL},
   1102 	[137] = {1000, {.tv_sec = 92233720368547758, .tv_usec = 2},
   1103 		INT_MAX, NULL},
   1104 	[138] = {1000, {.tv_sec = (time_t)INT_MAX + 1, .tv_usec = 123456},
   1105 		INT_MAX, NULL},
   1106 
   1107 	/*
   1108 	 * hz = 8191, prime non-divisor of 10^k or 2^k
   1109 	 */
   1110 
   1111 	[139] = {8191, {.tv_sec = -1, .tv_usec = 0}, 0, NULL},
   1112 	[140] = {8191, {.tv_sec = -1, .tv_usec = 999999}, 0, NULL},
   1113 	[141] = {8191, {.tv_sec = 0, .tv_usec = 0}, 0, NULL},
   1114 	[142] = {8191, {.tv_sec = 0, .tv_usec = 1}, 2, NULL},
   1115 	[143] = {8191, {.tv_sec = 0, .tv_usec = 2}, 2, NULL},
   1116 	[144] = {8191, {.tv_sec = 0, .tv_usec = 121}, 2, NULL},
   1117 	[145] = {8191, {.tv_sec = 0, .tv_usec = 122}, 2, NULL},
   1118 	[146] = {8191, {.tv_sec = 0, .tv_usec = 123}, 3, NULL},
   1119 	[147] = {8191, {.tv_sec = 0, .tv_usec = 242}, 3, NULL},
   1120 	[148] = {8191, {.tv_sec = 0, .tv_usec = 243}, 3, NULL},
   1121 	[149] = {8191, {.tv_sec = 0, .tv_usec = 244}, 3, NULL},
   1122 	[150] = {8191, {.tv_sec = 0, .tv_usec = 245}, 4, NULL},
   1123 	[151] = {8191, {.tv_sec = 0, .tv_usec = 246}, 4, NULL},
   1124 	[152] = {8191, {.tv_sec = 0, .tv_usec = 999999}, 8192, NULL},
   1125 	[153] = {8191, {.tv_sec = 1, .tv_usec = 0}, 8192, NULL},
   1126 	[154] = {8191, {.tv_sec = 1, .tv_usec = 1}, 8193, NULL},
   1127 	[155] = {8191, {.tv_sec = 1, .tv_usec = 2}, 8193, NULL},
   1128 	/* .tv_sec ~ INT_MAX/1000000 */
   1129 	[156] = {8191, {.tv_sec = 2147, .tv_usec = 999999}, 17594269, NULL},
   1130 	[157] = {8191, {.tv_sec = 2148, .tv_usec = 0}, 17594269, NULL},
   1131 	[158] = {8191, {.tv_sec = 2148, .tv_usec = 1}, 17594270, NULL},
   1132 	[159] = {8191, {.tv_sec = 2148, .tv_usec = 2}, 17594270, NULL},
   1133 	/* .tv_sec ~ INT_MAX/hz */
   1134 	[160] = {8191, {.tv_sec = 262176, .tv_usec = 3540}, 2147483646,
   1135 		NULL},
   1136 	[161] = {8191, {.tv_sec = 262176, .tv_usec = 3541}, 2147483647,
   1137 		NULL},
   1138 	[162] = {8191, {.tv_sec = 262176, .tv_usec = 3542}, 2147483647,
   1139 		NULL},
   1140 	/* saturate at INT_MAX = 2^31 - 1 ticks */
   1141 	[163] = {8191, {.tv_sec = 262176, .tv_usec = 3662}, 2147483647,
   1142 		NULL},
   1143 	[164] = {8191, {.tv_sec = 262176, .tv_usec = 3663}, 2147483647,
   1144 		NULL},
   1145 	[165] = {8191, {.tv_sec = 262176, .tv_usec = 3664}, 2147483647,
   1146 		NULL},
   1147 	[166] = {8191, {.tv_sec = 262176, .tv_usec = 999999}, 2147483647,
   1148 		NULL},
   1149 	/* .tv_sec ~ INT64_MAX/1000000, overflows to INT_MAX ticks */
   1150 	[167] = {8191, {.tv_sec = 9223372036854, .tv_usec = 999999},
   1151 		INT_MAX, NULL},
   1152 	[168] = {8191, {.tv_sec = 9223372036855, .tv_usec = 0},
   1153 		INT_MAX, NULL},
   1154 	[169] = {8191, {.tv_sec = 9223372036855, .tv_usec = 1},
   1155 		INT_MAX, NULL},
   1156 	[170] = {8191, {.tv_sec = 9223372036855, .tv_usec = 2},
   1157 		INT_MAX, NULL},
   1158 	/* .tv_sec ~ INT64_MAX/hz, overflows to INT_MAX ticks */
   1159 	[171] = {8191, {.tv_sec = 92233720368547758, .tv_usec = 999999},
   1160 		INT_MAX, NULL},
   1161 	[172] = {8191, {.tv_sec = 92233720368547758, .tv_usec = 0},
   1162 		INT_MAX, NULL},
   1163 	[173] = {8191, {.tv_sec = 92233720368547758, .tv_usec = 1},
   1164 		INT_MAX, NULL},
   1165 	[174] = {8191, {.tv_sec = 92233720368547758, .tv_usec = 2},
   1166 		INT_MAX, NULL},
   1167 	[175] = {8191, {.tv_sec = (time_t)INT_MAX + 1, .tv_usec = 123456},
   1168 		INT_MAX, NULL},
   1169 };
   1170 
   1171 ATF_TC(tvtohz);
   1172 ATF_TC_HEAD(tvtohz, tc)
   1173 {
   1174 	atf_tc_set_md_var(tc, "descr",
   1175 	    "Test tvtohz(9)");
   1176 }
   1177 ATF_TC_BODY(tvtohz, tc)
   1178 {
   1179 	size_t i;
   1180 
   1181 	for (i = 0; i < __arraycount(tvtohz_cases); i++) {
   1182 		const struct tvtohz_case *tv = &tvtohz_cases[i];
   1183 		int ticks;
   1184 
   1185 		/* set system parameters */
   1186 		hz = tv->tv_hz;
   1187 		tick = 1000000/hz;
   1188 
   1189 		ticks = tvtohz(&tv->tv_tv);
   1190 		if (tv->tv_xfail)
   1191 			atf_tc_expect_fail("%s", tv->tv_xfail);
   1192 
   1193 		/*
   1194 		 * Allow some slop of one part per thousand in the
   1195 		 * arithmetic, but ensure we round up, not down.
   1196 		 *
   1197 		 * XXX Analytically determine error bounds on the
   1198 		 * formulae we use and assess them.
   1199 		 */
   1200 		ATF_CHECK_MSG(((unsigned)(ticks - tv->tv_ticks) <=
   1201 			(unsigned)tv->tv_ticks/1000),
   1202 		    "[%zu] tvtohz(%lld.%06ld sec) @ %d Hz:"
   1203 		    " expected %d, got %d",
   1204 		    i,
   1205 		    (long long)tv->tv_tv.tv_sec,
   1206 		    (long)tv->tv_tv.tv_usec,
   1207 		    tv->tv_hz,
   1208 		    tv->tv_ticks,
   1209 		    ticks);
   1210 		if (tv->tv_xfail)
   1211 			atf_tc_expect_pass();
   1212 	}
   1213 }
   1214 
   1215 ATF_TP_ADD_TCS(tp)
   1216 {
   1217 
   1218 	ATF_TP_ADD_TC(tp, itimer_transitions);
   1219 	ATF_TP_ADD_TC(tp, tstohz);
   1220 	ATF_TP_ADD_TC(tp, tvtohz);
   1221 
   1222 	return atf_no_error();
   1223 }
   1224 
   1225