(distribute): Add datemsk.
[kopensolaris-gnu/glibc.git] / time / tst-getdate.c
1 /* Test for getdate.
2    Copyright (C) 2000 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Contributed by Andreas Jaeger <aj@suse.de>, 2000.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Library General Public License as
8    published by the Free Software Foundation; either version 2 of the
9    License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Library General Public License for more details.
15
16    You should have received a copy of the GNU Library General Public
17    License along with the GNU C Library; see the file COPYING.LIB.  If not,
18    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19    Boston, MA 02111-1307, USA.  */
20
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <time.h>
25
26 static const struct
27 {
28   const char *str;
29   int err;
30   struct tm tm;
31 } tests [] =
32 {
33   {"21:01:10 1999-1-31", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
34   {"21:01:10 1999-2-28", 0, {10, 1, 21, 28, 1, 99, 0, 0, 0}},
35   {"16:30:46 2000-2-29", 0, {46, 31,16, 29, 1, 100, 0, 0, 0}}
36 };
37
38 void
39 report_date_error (int err)
40 {
41   switch(err)
42     {
43     case 1:
44       printf ("The environment variable DATEMSK is not defined or null.\n");
45       break;
46     case 2:
47       printf ("The template file denoted by the DATEMSK environment variable cannot be opened.\n");
48       break;
49     case 3:
50       printf ("Information about the template file cannot retrieved.\n");
51       break;
52     case 4:
53       printf ("The template file is not a regular file.\n");
54       break;
55     case 5:
56       printf ("An I/O error occurred while reading the template file.\n");
57       break;
58     case 6:
59       printf ("Not enough memory available to execute the function.\n");
60       break;
61     case 7:
62       printf ("The template file contains no matching template.\n");
63       break;
64     case 8:
65       printf ("The input date is invalid, but would match a template otherwise.\n");
66       break;
67     default:
68       printf("Unknown error code.\n");
69       break;
70     }
71 }
72
73
74 int
75 main (void)
76 {
77   int errors = 0;
78   int i;
79   struct tm *tm;
80   
81   setenv ("TZ", "Universal", 1);
82
83   for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
84     {
85       tm = getdate (tests[i].str);
86       if (getdate_err != tests[i].err)
87         {
88           printf ("Failure for getdate (\"%s\"):\n", tests[i].str);
89           printf ("getdate_err should be %d but returned: %d which means:\n",
90                   tests[i].err, getdate_err);
91           report_date_error (getdate_err);
92           ++errors;
93         }
94       else if (tests[i].tm.tm_mon != tm->tm_mon
95                || tests[i].tm.tm_year != tm->tm_year
96                || tests[i].tm.tm_mday != tm->tm_mday
97                || tests[i].tm.tm_hour != tm->tm_hour
98                || tests[i].tm.tm_min != tm->tm_min
99                || tests[i].tm.tm_sec != tm->tm_sec)
100         {
101           printf ("Failure for getdate (\"%s\"):\n", tests[i].str);
102           printf ("struct tm is:  %d-%d-%d %d:%d:%d\n",
103                   tm->tm_year+1900, tm->tm_mon, tm->tm_mday,
104                   tm->tm_hour, tm->tm_min, tm->tm_sec);
105           printf ("but should be: %d-%d-%d %d:%d:%d\n",
106                   tests[i].tm.tm_year+1900, tests[i].tm.tm_mon, tests[i].tm.tm_mday,
107                   tests[i].tm.tm_hour, tests[i].tm.tm_min, tests[i].tm.tm_sec);
108         }
109       
110                
111     }
112   if (!errors)
113     printf ("No errors found.\n");
114   return errors != 0;
115 }