/*
 * Copyright (c) 2003, 2004 Sendmail, Inc. and its suppliers.
 *	All rights reserved.
 *
 * By using this file, you agree to the terms and conditions set
 * forth in the LICENSE file which can be found at the top level of
 * the sendmail distribution.
 */

#include "sm/generic.h"
SM_RCSID("@(#)$Id: t-arpadate.c,v 1.8 2006/11/22 17:02:58 ca Exp $")
#include "sm/assert.h"
#include "sm/error.h"
#include "sm/time.h"
#include "sm/test.h"
#include "sm/io.h"

static int Verbose = 0;

static time_t times[] = {1, 100, 1000, 10000, 100000,
	1000000, 2000000, 3000000, 4000000, 5000000,
	6000000, 7000000, 8000000, 9000000,

	10000000, 20000000, 30000000, 40000000, 50000000,
	60000000, 70000000, 80000000, 90000000,

	100000000, 200000000, 300000000, 400000000, 500000000,
	600000000, 700000000, 800000000, 900000000,

	1000018800, 1164009600,

	0 }; /* 0 must be last! */

static void
test_harness(void)
{
	int i;
	sm_ret_T ret;
	sm_str_P s ;
	time_t now;
#if MTA_USE_PTHREADS
	struct tm tm;
#endif
	struct tm *tm_now;
	char ft[128];

	s = sm_str_new(NULL, 50, 64);
	SM_TEST(s != NULL);
	now = time(NULLT);
	i = 0;
	do
	{
		sm_str_clr(s);
		ret = arpadate(&now, s);
		SM_TEST(ret == SM_SUCCESS);
		if (Verbose > 0)
			sm_io_fprintf(smioout, "time '%S'\n", s);

#if HAVE_STRFTIME
# if MTA_USE_PTHREADS
		tm_now =  localtime_r(&now, &tm);
# else
		tm_now =  localtime(&now);
# endif
# if HAVE_STRFTIME_E
		strftime(ft, sizeof(ft), "%a, %e %b %Y %H:%M:%S", tm_now);
# else /* HAVE_STRFTIME_E */
		strftime(ft, sizeof(ft), "%a, %d %b %Y %H:%M:%S", tm_now);
		if (ft[5] == '0')
			ft[5] = ' ';
# endif /* HAVE_STRFTIME_E */
		SM_TEST(strncmp(ft, (char *) sm_str_data(s), strlen(ft)) == 0);
		if (Verbose > 0)
			sm_io_fprintf(smioout, "ftim '%s'\n", ft);
#endif /* HAVE_STRFTIME */

		now = times[i++];
	} while (now != 0);

	SM_STR_FREE(s);
	if (Verbose > 0)
		sm_io_flush(smioout);
}

int
main(int argc, char *argv[])
{
	int r;

	while ((r = getopt(argc, argv, "V")) != -1)
	{
		switch (r)
		{
		  case 'V':
			Verbose++;
			break;
		  default:
/*
			usage(argv[0]);
*/
			return 1;
		}
	}

	sm_test_begin(argc, argv, "test arpadate");
	test_harness();
	return sm_test_end();
}


syntax highlighted by Code2HTML, v. 0.9.1