fade3ecc57567d73ea5dc37ad902384f990f4f70
[mat/samba.git] / replace / test / strptime.c
1
2 #ifdef LIBREPLACE_CONFIGURE_TEST_STRPTIME
3
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <time.h>
7
8 #define true 1
9 #define false 0
10
11 #ifndef __STRING
12 #define __STRING(x)    #x
13 #endif
14
15 /* make printf a no-op */
16 #define printf if(0) printf
17
18 #else /* LIBREPLACE_CONFIGURE_TEST_STRPTIME */
19
20 #include "replace.h"
21 #include "system/time.h"
22
23 #endif /* LIBREPLACE_CONFIGURE_TEST_STRPTIME */
24
25 int libreplace_test_strptime(void)
26 {
27         const char *s = "20070414101546Z";
28         char *ret;
29         struct tm t, t2;
30
31         memset(&t, 0, sizeof(t));
32         memset(&t2, 0, sizeof(t2));
33
34         printf("test: strptime\n");
35
36         ret = strptime(s, "%Y%m%d%H%M%S", &t);
37         if ( ret == NULL ) {
38                 printf("failure: strptime [\n"
39                        "returned NULL\n"
40                        "]\n");
41                 return false;
42         }
43
44         if ( *ret != 'Z' ) {
45                 printf("failure: strptime [\n"
46                        "ret doesn't point to 'Z'\n"
47                        "]\n");
48                 return false;
49         }
50
51         ret = strptime(s, "%Y%m%d%H%M%SZ", &t2);
52         if ( ret == NULL ) {
53                 printf("failure: strptime [\n"
54                        "returned NULL with Z\n"
55                        "]\n");
56                 return false;
57         }
58
59         if ( *ret != '\0' ) {
60                 printf("failure: strptime [\n"
61                        "ret doesn't point to '\\0'\n"
62                        "]\n");
63                 return false;
64         }
65
66 #define CMP_TM_ELEMENT(t1,t2,elem) \
67         if (t1.elem != t2.elem) { \
68                 printf("failure: strptime [\n" \
69                        "result differs if the format string has a 'Z' at the end\n" \
70                        "element: %s %d != %d\n" \
71                        "]\n", \
72                        __STRING(elen), t1.elem, t2.elem); \
73                 return false; \
74         }
75
76         CMP_TM_ELEMENT(t,t2,tm_sec);
77         CMP_TM_ELEMENT(t,t2,tm_min);
78         CMP_TM_ELEMENT(t,t2,tm_hour);
79         CMP_TM_ELEMENT(t,t2,tm_mday);
80         CMP_TM_ELEMENT(t,t2,tm_mon);
81         CMP_TM_ELEMENT(t,t2,tm_year);
82         CMP_TM_ELEMENT(t,t2,tm_wday);
83         CMP_TM_ELEMENT(t,t2,tm_yday);
84         CMP_TM_ELEMENT(t,t2,tm_isdst);
85
86         if (t.tm_sec != 46) {
87                 printf("failure: strptime [\n"
88                        "tm_sec: expected: 46, got: %d\n"
89                        "]\n",
90                        t.tm_sec);
91                 return false;
92         }
93
94         if (t.tm_min != 15) {
95                 printf("failure: strptime [\n"
96                        "tm_min: expected: 15, got: %d\n"
97                        "]\n",
98                        t.tm_min);
99                 return false;
100         }
101
102         if (t.tm_hour != 10) {
103                 printf("failure: strptime [\n"
104                        "tm_hour: expected: 10, got: %d\n"
105                        "]\n",
106                        t.tm_hour);
107                 return false;
108         }
109
110         if (t.tm_mday != 14) {
111                 printf("failure: strptime [\n"
112                        "tm_mday: expected: 14, got: %d\n"
113                        "]\n",
114                        t.tm_mday);
115                 return false;
116         }
117
118         if (t.tm_mon != 3) {
119                 printf("failure: strptime [\n"
120                        "tm_mon: expected: 3, got: %d\n"
121                        "]\n",
122                        t.tm_mon);
123                 return false;
124         }
125
126         if (t.tm_year != 107) {
127                 printf("failure: strptime [\n"
128                        "tm_year: expected: 107, got: %d\n"
129                        "]\n",
130                        t.tm_year);
131                 return false;
132         }
133
134         if (t.tm_wday != 6) { /* saturday */
135                 printf("failure: strptime [\n"
136                        "tm_wday: expected: 6, got: %d\n"
137                        "]\n",
138                        t.tm_wday);
139                 return false;
140         }
141
142         if (t.tm_yday != 103) {
143                 printf("failure: strptime [\n"
144                        "tm_yday: expected: 103, got: %d\n"
145                        "]\n",
146                        t.tm_yday);
147                 return false;
148         }
149
150         /* we don't test this as it depends on the host configuration
151         if (t.tm_isdst != 0) {
152                 printf("failure: strptime [\n"
153                        "tm_isdst: expected: 0, got: %d\n"
154                        "]\n",
155                        t.tm_isdst);
156                 return false;
157         }*/
158
159         printf("success: strptime\n");
160
161         return true;
162 }
163
164 #ifdef LIBREPLACE_CONFIGURE_TEST_STRPTIME
165 int main (void)
166 {
167         int ret;
168         ret = libreplace_test_strptime();
169         if (ret == false) return 1;
170         return 0;
171 }
172 #endif