test-time-util.c revision 02c335c23bf5fa225a467c19f2c063fb0dc7b8c3
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2009-2016 Dovecot authors, see the included COPYING file */
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen#include "test-lib.h"
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen#include "time-util.h"
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainenstatic void test_timeval_cmp(void)
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen{
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen static struct timeval input[] = {
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { 0, 0 }, { 0, 0 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { INT_MAX, 999999 }, { INT_MAX, 999999 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { 0, 0 }, { 0, 1 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { 0, 0 }, { 1, 0 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { 0, 999999 }, { 1, 0 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { 1, 0 }, { 1, 1 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { -INT_MAX, 0 }, { INT_MAX, 0 }
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen };
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen static int output[] = {
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen 0,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen 0,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen -1,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen -1,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen -1,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen -1,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen -1
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen };
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen unsigned int i;
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_begin("timeval_cmp()");
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen for (i = 0; i < N_ELEMENTS(input); i += 2) {
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_assert(timeval_cmp(&input[i], &input[i+1]) == output[i/2]);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_assert(timeval_cmp(&input[i+1], &input[i]) == -output[i/2]);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen }
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_end();
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen}
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainenstatic void test_timeval_diff(void)
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen{
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen static struct timeval input[] = {
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { 1, 0 }, { 0, 999999 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { 1, 0 }, { 0, 999001 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { 1, 1 }, { 0, 999001 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { 2, 1 }, { 1, 0 },
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen { INT_MAX, 0 }, { INT_MAX-1, 1 }
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen };
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen static int output[] = {
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen 1,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen 999,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen 1000,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen 1000001,
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen 999999
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen };
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen unsigned int i;
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen long long udiff;
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen int mdiff;
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_begin("timeval_diff_*()");
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen for (i = 0; i < N_ELEMENTS(input); i += 2) {
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen udiff = timeval_diff_usecs(&input[i], &input[i+1]);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen mdiff = timeval_diff_msecs(&input[i], &input[i+1]);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_assert(udiff == output[i/2]);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_assert(mdiff == udiff/1000);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen udiff = timeval_diff_usecs(&input[i+1], &input[i]);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen mdiff = timeval_diff_msecs(&input[i+1], &input[i]);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_assert(udiff == -output[i/2]);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_assert(mdiff == udiff/1000);
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen }
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_end();
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen}
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainenvoid test_time_util(void)
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen{
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_timeval_cmp();
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen test_timeval_diff();
bc6a872cc6cecb4e3f8d0a99236c4ab484f2f754Timo Sirainen}