#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

int
main (void)
{
  struct tm time_str, *tm;
  time_t t;
  char daybuf[20];
  int result;

  time_str.tm_year = 2001 - 1900;
  time_str.tm_mon = 7 - 1;
  time_str.tm_mday = 4;
  time_str.tm_hour = 0;
  time_str.tm_min = 0;
  time_str.tm_sec = 1;
  time_str.tm_isdst = -1;

  if (mktime (&time_str) == -1)
    {
      (void) puts ("-unknown-");
      result = 1;
    }
  else
    {
      (void) strftime (daybuf, sizeof (daybuf), "%A", &time_str);
      (void) puts (daybuf);
      result = strcmp (daybuf, "Wednesday") != 0;
    }

  setenv ("TZ", "EST+5", 1);
#define EVENING69 1 * 60 * 60 + 2 * 60 + 29
  t = EVENING69;
  tm = localtime (&t);
  if (tm == NULL)
    {
      (void) puts ("localtime returned NULL");
      result = 1;
    }
  else
    {
      time_str = *tm;
      t = mktime (&time_str);
      if (t != EVENING69)
        {
          printf ("mktime returned %ld, expected %d\n",
		  (long) t, EVENING69);
	  result = 1;
        }
      else
        (void) puts ("Dec 31 1969 EST test passed");

      setenv ("TZ", "CET-1", 1);
      t = mktime (&time_str);
#define EVENING69_CET (EVENING69 - (5 - -1) * 60 * 60)
      if (t != EVENING69_CET)
        {
	  printf ("mktime returned %ld, expected %ld\n",
		  (long) t, (long) EVENING69_CET);
	  result = 1;
        }
      else
        (void) puts ("Dec 31 1969 CET test passed");
    }

  return result;
}
