1 /*****************************************************************************/
2 /* Software Testing Automation Framework (STAF)                              */
3 /* (C) Copyright IBM Corp. 2001                                              */
4 /*                                                                           */
5 /* This software is licensed under the Eclipse Public License (EPL) V1.0.    */
6 /*****************************************************************************/
7 
8 #include "STAF.h"
9 #include "STAF_iostream.h"
10 #include "STAFTimestamp.h"
11 
main(void)12 int main(void)
13 {
14     STAFRelativeTime begin;
15 
16     const char *data[] =
17     {
18         "20001031-09:27:16",
19         "10/31/00-09:27:16",
20         "10/31/2000-09:27:16",
21         "20001031-09:27",
22         "20001031-09",
23         "20001031-",
24         "20001031",
25         "-09:27:16",
26         "-09:27",
27         "-09",
28         "-",
29         "",
30         "10:11:12",
31         "20000229",     // Begin errors
32         "20001131",
33         "19990229",
34         "20010229",
35         "06/29/69",     // Non-obvious, 69 == 2069 which is > sizeof(time_t)
36         "-24:00:00",
37         "-10:70:00",
38         "-10:20:70",
39         "-1:00:00",     // Must be 01:xx:yy
40         "-10:1:00",
41         "-10:01:1"
42     };
43 
44     cout << "BEGIN STRING TESTS" << endl;
45 
46     int i = 0;
47 
48     for (i = 0; i < (sizeof(data) / sizeof(char *)); ++i)
49     {
50         try
51         {
52             cout << endl << "Test     : " << data[i] << endl;
53 
54             if (STAFTimestamp::isValidTimestampString(data[i]))
55                 cout << "Valid    : Yes" << endl;
56             else
57                 cout << "Valid    : No" << endl;
58 
59             STAFTimestamp aTime(data[i]);
60 
61             cout << "Formatted: " << aTime.asString() << endl;
62         }
63         catch (STAFException &se)
64         {
65             cout << "Caught exception: " << se.getName() << endl;
66         }
67         catch (...)
68         { cout << "Caught unknown exception in main()" << endl; }
69     }
70 
71 
72     unsigned int data2[][6] =
73     {
74         { 2000, 10, 31, 9 , 27, 16 },
75         { 99  , 10, 31, 9 , 27, 16 },
76         { 02  , 10, 31, 9 , 27, 16 },
77         { 102 , 10, 31, 9 , 27, 16 },
78         { 1999, 2 , 29, 9 , 27, 16 },     // Begin errors
79         { 2000, 2 , 29, 9 , 27, 16 },
80         { 2001, 2 , 29, 9 , 27, 16 },
81         { 69  , 6 , 29, 9 , 27, 16 },     // Again non-obvious
82         { 2000, 10, 31, 24, 27, 16 },
83         { 2000, 10, 31, 9 , 60, 16 },
84         { 2000, 10, 31, 9 , 27, 60 },
85     };
86 
87     cout << endl << "BEGIN NUMERIC TESTS" << endl;
88 
89     for (i = 0; i < (sizeof(data2) / sizeof(unsigned int [6])); ++i)
90     {
91         try
92         {
93             cout << endl << "Test     : "
94                  << data2[i][0] << ", " << data2[i][1] << ", "
95                  << data2[i][2] << ", " << data2[i][3] << ", "
96                  << data2[i][4] << ", " << data2[i][5] << endl;
97 
98             if (STAFTimestamp::isValidTimestampData(data2[i][0], data2[i][1],
99                                                     data2[i][2], data2[i][3],
100                                                     data2[i][4], data2[i][5]))
101             {
102                 cout << "Valid    : Yes" << endl;
103             }
104             else
105             {
106                 cout << "Valid    : No" << endl;
107             }
108 
109             STAFTimestamp aTime(data2[i][0], data2[i][1], data2[i][2],
110                                 data2[i][3], data2[i][4], data2[i][5]);
111 
112             cout << "Formatted: " << aTime.asString() << endl;
113         }
114         catch (STAFException &se)
115         {
116             cout << "Caught exception: " << se.getName() << endl;
117         }
118         catch (...)
119         { cout << "Caught unknown exception in main()" << endl; }
120     }
121 
122     const char *data3[] =
123     {
124         "20000101-00:00:00",
125         "19991231-23:59:59"
126     };
127 
128     cout << endl << "BEGIN ACCESSOR TESTS" << endl;
129 
130     for (i = 0; i < (sizeof(data3) / sizeof(char *)); ++i)
131     {
132         try
133         {
134             cout << endl << "Test     : " << data3[i] << endl;
135 
136             STAFTimestamp aTime(data3[i]);
137 
138             cout << "Year  : " << aTime.getYear() << endl;
139             cout << "Month : " << aTime.getMonth() << endl;
140             cout << "Day   : " << aTime.getDay() << endl;
141             cout << "Hour  : " << aTime.getHour() << endl;
142             cout << "Minute: " << aTime.getMinute() << endl;
143             cout << "Second: " << aTime.getSecond() << endl;
144         }
145         catch (STAFException &se)
146         {
147             cout << "Caught exception: " << se.getName() << endl;
148         }
149         catch (...)
150         { cout << "Caught unknown exception in main()" << endl; }
151     }
152 
153 
154     const char *data4[][2] =
155     {
156         { "20001108"         , "20001109"          },
157         { "20001108-10:11:12", "20001108-10:11:01" },
158         { "10:11:12"         , "10:11:01"          },
159         { "20001108-10:11:12", "20001108-10:11:12" },
160         { "19991231-23:59:59", "20000101-00:00:00" }
161     };
162 
163     cout << endl << "BEGIN RELATIONAL TESTS" << endl;
164 
165     for (i = 0; i < (sizeof(data4) / sizeof(char *[2])); ++i)
166     {
167         try
168         {
169             cout << endl << data4[i][0] << " == " << data4[i][1] << " : ";
170 
171             if (STAFTimestamp(data4[i][0]) == STAFTimestamp(data4[i][1]))
172                 cout << "Yes" << endl;
173             else
174                 cout << "No" << endl;
175 
176             cout << data4[i][0] << " != " << data4[i][1] << " : ";
177 
178             if (STAFTimestamp(data4[i][0]) != STAFTimestamp(data4[i][1]))
179                 cout << "Yes" << endl;
180             else
181                 cout << "No" << endl;
182 
183             cout << data4[i][0] << " <  " << data4[i][1] << " : ";
184 
185             if (STAFTimestamp(data4[i][0]) < STAFTimestamp(data4[i][1]))
186                 cout << "Yes" << endl;
187             else
188                 cout << "No" << endl;
189 
190             cout << data4[i][0] << " <= " << data4[i][1] << " : ";
191 
192             if (STAFTimestamp(data4[i][0]) <= STAFTimestamp(data4[i][1]))
193                 cout << "Yes" << endl;
194             else
195                 cout << "No" << endl;
196 
197             cout << data4[i][0] << " >  " << data4[i][1] << " : ";
198 
199             if (STAFTimestamp(data4[i][0]) > STAFTimestamp(data4[i][1]))
200                 cout << "Yes" << endl;
201             else
202                 cout << "No" << endl;
203 
204             cout << data4[i][0] << " >= " << data4[i][1] << " : ";
205 
206             if (STAFTimestamp(data4[i][0]) >= STAFTimestamp(data4[i][1]))
207                 cout << "Yes" << endl;
208             else
209                 cout << "No" << endl;
210         }
211         catch (STAFException &se)
212         {
213             cout << "Caught exception: " << se.getName() << endl;
214         }
215         catch (...)
216         { cout << "Caught unknown exception in main()" << endl; }
217     }
218 
219     STAFRelativeTime end;
220 
221     cout << endl << "Runtime: " << ((end - begin) / 1000) << "."
222          << setw(3) << setfill('0') << ((end - begin) % 1000)
223          << " seconds" << endl;
224 
225     return 0;
226 }
227