-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtestDateYMD_format_YMD.cpp
129 lines (107 loc) · 5.8 KB
/
testDateYMD_format_YMD.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// test conversions for 'Date'
#include <iostream>
#include <sstream>
#include <converter/converter.h>
#include <converter/specializedTypes/date.h>
#include "unittest.h"
using t_fmtYMD = converter::format_year_month_day<converter::defYMDfmt, converter::FailureS2Tprocess::THROW_ERROR>;
template <typename T>
void conversionEqualCheck(const T& val, const std::string& vStr)
{
std::cout << "###### date-conversion testing for date=" << vStr << std::endl;
unittest::ExpectEqual(T, converter::ConvertFromStr<T>::ToVal(vStr), val);
unittest::ExpectEqual(std::string, converter::ConvertFromVal<T>::ToStr(val), vStr);
}
int main()
{
int rv = 0;
try {
[[maybe_unused]]t_fmtYMD emptyDate;
conversionEqualCheck<t_fmtYMD>(
t_fmtYMD( std::chrono::year(2023),
std::chrono::month(2),
std::chrono::day(28)
),
"2023-02-28"); // NOT leap year
conversionEqualCheck<t_fmtYMD>(
t_fmtYMD( std::chrono::year(2020),
std::chrono::month(2),
std::chrono::day(29)
),
"2020-02-29"); // leap year (every 4 years)
conversionEqualCheck<t_fmtYMD>(
t_fmtYMD( std::chrono::year(2000),
std::chrono::month(2),
std::chrono::day(29)
),
"2000-02-29"); // leap year (every 400 years)
std::cout << "###### date-conversion testing for date=[1900-02-29]" << std::endl;
t_fmtYMD invalidDate1( std::chrono::year(1900),
std::chrono::month(2),
std::chrono::day(29) ); // NOT leap year (every 100 years)
// The below checks are to ascertain that 'std::chrono::*' behavior is same across different OS's
unittest::ExpectEqual(bool, invalidDate1.getYMD().ok(), false);
unittest::ExpectEqual(bool, invalidDate1.getYMD().year().ok(), true);
unittest::ExpectEqual(bool, invalidDate1.getYMD().month().ok(), true);
unittest::ExpectEqual(bool, invalidDate1.getYMD().day().ok(), true);
unittest::ExpectEqual(int, int(invalidDate1.getYMD().year()), 1900);
unittest::ExpectEqual(unsigned, unsigned(invalidDate1.getYMD().month()), 2);
unittest::ExpectEqual(unsigned, unsigned(invalidDate1.getYMD().day()), 29);
t_fmtYMD invalidConversionDate1 =
converter::ConvertFromStr<t_fmtYMD>::ToVal("1900-02-29");
unittest::ExpectEqual(bool, invalidConversionDate1.getYMD().ok(), false);
unittest::ExpectEqual(bool, invalidConversionDate1.getYMD().year().ok(), true);
unittest::ExpectEqual(bool, invalidConversionDate1.getYMD().month().ok(), true);
unittest::ExpectEqual(bool, invalidConversionDate1.getYMD().day().ok(), true);
unittest::ExpectEqual(int, int(invalidConversionDate1.getYMD().year()), 1900);
unittest::ExpectEqual(unsigned, unsigned(invalidConversionDate1.getYMD().month()), 2);
unittest::ExpectEqual(unsigned, unsigned(invalidConversionDate1.getYMD().day()), 29);
unittest::ExpectEqual(std::string,
converter::ConvertFromVal<t_fmtYMD>::ToStr(invalidDate1),
"1900-02-29"); // NOT leap year (every 100 years)
std::cout << "###### date-conversion testing for date=[2023-01-32]" << std::endl;
t_fmtYMD invalidDate2( std::chrono::year(2023),
std::chrono::month(1),
std::chrono::day(32) ); // invalid date
// The below checks are to ascertain that 'std::chrono::*' behavior is same across different OS's
unittest::ExpectEqual(bool, invalidDate2.getYMD().ok(), false);
unittest::ExpectEqual(bool, invalidDate2.getYMD().year().ok(), true);
unittest::ExpectEqual(bool, invalidDate2.getYMD().month().ok(), true);
unittest::ExpectEqual(bool, invalidDate2.getYMD().day().ok(), false); // is False 32
unittest::ExpectEqual(int, int(invalidDate2.getYMD().year()), 2023);
unittest::ExpectEqual(unsigned, unsigned(invalidDate2.getYMD().month()), 1);
unittest::ExpectEqual(unsigned, unsigned(invalidDate2.getYMD().day()), 32);
t_fmtYMD invalidConversionDate2 =
converter::ConvertFromStr<t_fmtYMD>::ToVal("2023-01-32");
unittest::ExpectEqual(bool, invalidConversionDate2.getYMD().ok(), false);
unittest::ExpectEqual(bool, invalidConversionDate2.getYMD().year().ok(), true);
unittest::ExpectEqual(bool, invalidConversionDate2.getYMD().month().ok(), true);
unittest::ExpectEqual(bool, invalidConversionDate2.getYMD().day().ok(), false); // is False 32
unittest::ExpectEqual(int, int(invalidConversionDate2.getYMD().year()), 2023);
unittest::ExpectEqual(unsigned, unsigned(invalidConversionDate2.getYMD().month()), 1);
unittest::ExpectEqual(unsigned, unsigned(invalidConversionDate2.getYMD().day()), 32);
unittest::ExpectEqual(std::string,
converter::ConvertFromVal<t_fmtYMD>::ToStr(invalidDate2),
"2023-01-32"); // NOT leap year (every 100 years)
t_fmtYMD chkD1( std::chrono::year(2024), std::chrono::month(1), std::chrono::day(12));
unittest::ExpectEqual(std::string, chkD1.toStr(), "2024-01-12");
t_fmtYMD chkD2;
chkD2.fromStr("2024-01-12");
unittest::ExpectEqual(t_fmtYMD, chkD1, chkD2);
std::ostringstream os;
os << chkD1;
unittest::ExpectEqual(std::string, os.str(), "2024-01-12");
std::istringstream is("2024-01-12");
t_fmtYMD chkD3;
is >> chkD3;
unittest::ExpectEqual(t_fmtYMD, chkD1, chkD3);
unittest::ExpectTrue(chkD1 == chkD2);
#if USE_THREE_WAY_COMPARISON == e_ENABLE_FEATURE
unittest::ExpectTrue((chkD1 <=> chkD2) == 0);
#endif
} catch (const std::exception& ex) {
std::cout << "Unexpected exception in testDateYMD_format_YMD: " << ex.what() << std::endl;
rv = 1;
}
return rv;
}