#!/bin/sh set -o nounset TIME="${TIME-/usr/bin/time}" echo "SUITE: time(1)" what $TIME echo EXIT=0 echo TEST: check real time TIME_SLEEP=`$TIME 2>&1 sleep 1 | sed -n -E 's/[ ]+([0-9]+).*/\1/p'` TIME_STATUS=$? if [ "$TIME_STATUS" -ne "0" ]; then echo FAIL: time failed with "$TIME_STATUS" EXIT=1 fi if [ "$TIME_SLEEP" -lt "0" ]; then echo FAIL: time mis-timed sleep EXIT=2 fi MONOTONIC=`sysctl -n kern.monotonic.task_thread_counting` if [ "$MONOTONIC" -ne "0" ]; then echo TEST: check instructions retired TIME_INSTRS=`$TIME -l 2>&1 sleep 1 | sed -E -n '/instructions/p'` if [ -z "$TIME_INSTRS" ]; then echo FAIL: time is not showing instructions retired EXIT=3 fi else echo SKIP: check instructions retired fi # NB: SIGINT and SIGQUIT work locally, but the automated test harnesses tries to # handle those signals itself before the fork. echo TEST: check child SIGUSR1 TIME_USR1=`$TIME 2>&1 sh -c 'kill -USR1 $$ && sleep 5 && true'` TIME_STATUS=$? if [ "$TIME_STATUS" -eq "0" ]; then echo FAIL: time should allow child to receive SIGUSR1 EXIT=4 fi echo TEST: check non-existent binary TIME_NONEXIST=`$TIME 2>&1 ./this-wont-exist` TIME_STATUS=$? if [ "$TIME_STATUS" -ne "127" ]; then echo FAIL: time should error when measuring a non-existent command EXIT=5 fi exit $EXIT