#define FORMAT_TIMESTAMP_STYLE(t, style) \
format_timestamp_style((char[FORMAT_TIMESTAMP_MAX]){}, FORMAT_TIMESTAMP_MAX, t, style)
+int parse_gmtoff(const char *t, long *ret);
int parse_timestamp(const char *t, usec_t *ret);
int parse_sec(const char *t, usec_t *ret);
test_format_timestamp_one(USEC_INFINITY, TIMESTAMP_UTC, NULL);
}
+TEST(parse_gmtoff) {
+ long t;
+
+ ASSERT_OK(parse_gmtoff("+14", &t));
+ ASSERT_EQ(t, (long) (14 * USEC_PER_HOUR / USEC_PER_SEC));
+ ASSERT_OK(parse_gmtoff("-09", &t));
+ ASSERT_EQ(t, - (long) (9 * USEC_PER_HOUR / USEC_PER_SEC));
+ ASSERT_OK(parse_gmtoff("+1400", &t));
+ ASSERT_EQ(t, (long) (14 * USEC_PER_HOUR / USEC_PER_SEC));
+ ASSERT_OK(parse_gmtoff("-0900", &t));
+ ASSERT_EQ(t, - (long) (9 * USEC_PER_HOUR / USEC_PER_SEC));
+ ASSERT_OK(parse_gmtoff("+14:00", &t));
+ ASSERT_EQ(t, (long) (14 * USEC_PER_HOUR / USEC_PER_SEC));
+ ASSERT_OK(parse_gmtoff("-09:00", &t));
+ ASSERT_EQ(t, - (long) (9 * USEC_PER_HOUR / USEC_PER_SEC));
+
+ ASSERT_ERROR(parse_gmtoff("", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("UTC", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("09", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("0900", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("?0900", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("?0900", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("+0900abc", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("+0900 ", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("+090000", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("+0900:00", &t), EINVAL);
+ ASSERT_ERROR(parse_gmtoff("+0900.00", &t), EINVAL);
+}
+
static void test_parse_timestamp_one(const char *str, usec_t max_diff, usec_t expected) {
usec_t usec = USEC_INFINITY;
int r;