Return number of dates checked
| 180 | |
| 181 | // Return number of dates checked |
| 182 | unsigned checkSetTime(const FSTR::Array<TestDate>& dates, bool silent = false) |
| 183 | { |
| 184 | unsigned checkCount{0}; |
| 185 | |
| 186 | for(auto date : dates) { |
| 187 | const DateTime refDate(date.unixTimestamp); |
| 188 | |
| 189 | if(!silent) { |
| 190 | Serial << "RefDate " << refDate.toFullDateTimeString() << endl; |
| 191 | } |
| 192 | |
| 193 | auto check = [&](int secOffset, int minOffset, int hourOffset, int dayOffset) { |
| 194 | ++checkCount; |
| 195 | const int sec = secOffset + refDate.Second; |
| 196 | const int min = minOffset + refDate.Minute; |
| 197 | const int hour = hourOffset + refDate.Hour; |
| 198 | const int day = dayOffset + refDate.Day; |
| 199 | DateTime dt = DateTime ::toUnixTime(sec, min, hour, day, refDate.Month, refDate.Year); |
| 200 | time_t refTime = DateTime::toUnixTime(0, 0, 0, 1, refDate.Month, refDate.Year); |
| 201 | refTime += sec; |
| 202 | refTime += int64_t(min) * 60; |
| 203 | refTime += int64_t(hour) * 60 * 60; |
| 204 | refTime += int64_t(day - 1) * 24 * 60 * 60; |
| 205 | time_t calcTime = dt.toUnixTime(); |
| 206 | if(calcTime == refTime) { |
| 207 | return; |
| 208 | } |
| 209 | |
| 210 | char buf[100]; |
| 211 | m_snprintf(buf, sizeof(buf), " (%ds, %dm %dh, %dd)", secOffset, minOffset, hourOffset, dayOffset); |
| 212 | Serial << _F("Check ") << DateTime(refTime).toFullDateTimeString() << buf << endl; |
| 213 | Serial << _F("Got ") << dt.toFullDateTimeString() << ", diff " << refTime - calcTime << endl; |
| 214 | REQUIRE_EQ(refTime, calcTime); |
| 215 | }; |
| 216 | |
| 217 | for(int offset = -10000; offset < 10000; offset += 555) { |
| 218 | check(offset, 0, 0, 0); |
| 219 | check(0, offset, 0, 0); |
| 220 | check(0, 0, offset, 0); |
| 221 | check(0, 0, 0, offset); |
| 222 | } |
| 223 | }; |
| 224 | |
| 225 | return checkCount; |
| 226 | } |
| 227 | }; |
| 228 | |
| 229 | void REGISTER_TEST(DateTime) |
nothing calls this directly
no test coverage detected