Branch Coverage

src/panda/time/tzparse.cc
Criterion Covered Total %
branch 95 124 76.6


line true false branch
112 0 1240 if (bodyV1_size == -1) return false;
115 1240 0 if (version >= 2) {
117 0 1240 if (tzparse_headerV2(ptr, end, head, &version) == -1) return false;
118 1240 0 result = tzparse_bodyV2(ptr, end, head, zone);
120 0 0 result = tzparse_bodyV1(ptr, end, head, zone);
132 4 1314 if (tzparse_rule_abbrev(rulestr, rule->outer.abbrev) != ParseResult::OK) return false;
133 5 1309 if (tzparse_rule_time(rulestr, &rule->outer.gmt_offset) != ParseResult::OK) return false;
138 1 1308 if ((result = tzparse_rule_abbrev(rulestr, rule->inner.abbrev)) == ParseResult::ERROR) return false;
139 825 483 if (result == ParseResult::ABSENT) return *rulestr == '\0';
141 0 483 if ((result = tzparse_rule_time(rulestr, &rule->inner.gmt_offset)) == ParseResult::ERROR) return false;
142 477 6 if (result == ParseResult::ABSENT) rule->inner.gmt_offset = rule->outer.gmt_offset + 3600;
144 481 2 if (*rulestr == ',') {
149 11 470 if (tzparse_rule_switch(rulestr, &rule->outer.type, &rule->outer.end) != ParseResult::OK) return false;
150 1 469 if (*rulestr != ',') return false;
152 3 466 if (tzparse_rule_switch(rulestr, &rule->inner.type, &rule->inner.end) != ParseResult::OK) return false;
154 462 4 if (rule->outer.type != Timezone::Rule::Zone::Switch::DATE || rule->inner.type != Timezone::Rule::Zone::Switch::DATE) {
0 462 if (rule->outer.type != Timezone::Rule::Zone::Switch::DATE || rule->inner.type != Timezone::Rule::Zone::Switch::DATE) {
158 68 394 else if (rule->outer.end.mon > rule->inner.end.mon) {
172 2082 0 while (*str && *str != '>') str++;
1581 501 while (*str && *str != '>') str++;
173 0 501 if (*str != '>') return ParseResult::ERROR;
177 5481 830 while ((c = *str) && !isdigit(c) && c != ',' && c != '+' && c != '-') str++;
5003 478 while ((c = *str) && !isdigit(c) && c != ',' && c != '+' && c != '-') str++;
4566 437 while ((c = *str) && !isdigit(c) && c != ',' && c != '+' && c != '-') str++;
4563 3 while ((c = *str) && !isdigit(c) && c != ',' && c != '+' && c != '-') str++;
4187 376 while ((c = *str) && !isdigit(c) && c != ',' && c != '+' && c != '-') str++;
4187 2124 while ((c = *str) && !isdigit(c) && c != ',' && c != '+' && c != '-') str++;
181 501 2124 if (*str == '>') str++;
183 825 1800 if (!len) return ParseResult::ABSENT;
184 3 1797 if (len < ZONE_ABBR_MIN) return ParseResult::ERROR;
195 482 1656 if (str == st) return ParseResult::ABSENT;
196 854 802 int sign = (*dest >= 0 ? 1 : -1);
197 82 1574 if (*str == ':') {
200 3 79 if (str == st) return ParseResult::ERROR;
201 16 63 if (*str == ':') {
204 3 13 if (str == st) return ParseResult::ERROR;
215 940 10 if (*str == 'M') {
219 940 0 if (st == str || swdate->mon < 0 || swdate->mon > 11 || *str != '.') return ParseResult::ERROR;
940 0 if (st == str || swdate->mon < 0 || swdate->mon > 11 || *str != '.') return ParseResult::ERROR;
940 0 if (st == str || swdate->mon < 0 || swdate->mon > 11 || *str != '.') return ParseResult::ERROR;
0 940 if (st == str || swdate->mon < 0 || swdate->mon > 11 || *str != '.') return ParseResult::ERROR;
222 940 0 if (st == str || swdate->yday < 1 || swdate->yday > 5 || *str != '.') return ParseResult::ERROR;
937 3 if (st == str || swdate->yday < 1 || swdate->yday > 5 || *str != '.') return ParseResult::ERROR;
936 1 if (st == str || swdate->yday < 1 || swdate->yday > 5 || *str != '.') return ParseResult::ERROR;
0 936 if (st == str || swdate->yday < 1 || swdate->yday > 5 || *str != '.') return ParseResult::ERROR;
225 936 0 if (st == str || swdate->wday < 0 || swdate->wday > 6) return ParseResult::ERROR;
935 1 if (st == str || swdate->wday < 0 || swdate->wday > 6) return ParseResult::ERROR;
1 934 if (st == str || swdate->wday < 0 || swdate->wday > 6) return ParseResult::ERROR;
227 8 2 else if (*str == 'J') {
231 8 0 if (st == str || swdate->yday < 1 || swdate->yday > 365) return ParseResult::ERROR;
8 0 if (st == str || swdate->yday < 1 || swdate->yday > 365) return ParseResult::ERROR;
0 8 if (st == str || swdate->yday < 1 || swdate->yday > 365) return ParseResult::ERROR;
235 0 2 if (st == str || swdate->yday < 0 || swdate->yday > 365) return ParseResult::ERROR;
0 0 if (st == str || swdate->yday < 0 || swdate->yday > 365) return ParseResult::ERROR;
0 0 if (st == str || swdate->yday < 0 || swdate->yday > 365) return ParseResult::ERROR;
238 341 601 if (*str == '/') {
241 6 335 if (tzparse_rule_time(str, &when) != ParseResult::OK) return ParseResult::ERROR;
243 335 0 if (when < -604799 || when > 604799) return ParseResult::ERROR;
0 335 if (when < -604799 || when > 604799) return ParseResult::ERROR;
244 330 5 int sign = when >= 0 ? 1 : -1;
262 18 0 }};
18 0 }};