@@ -126,6 +126,39 @@ TEST_CASE("Valid timestamps") {
126
126
}
127
127
}
128
128
129
+ TEST_CASE (" Valid timestamps with fractional seconds" ) {
130
+ const std::vector<std::string> test_cases = {
131
+ " 2016-03-31T23:59:59.123Z" ,
132
+ " 2016-03-31T23:59:59,4Z" ,
133
+ " 2016-03-31T23:59:59,000000000000000001Z" ,
134
+ " 2016-03-31T23:59:59.99Z"
135
+ };
136
+
137
+ for (const auto & tc : test_cases) {
138
+ const osmium::Timestamp t{tc};
139
+ REQUIRE (" 2016-03-31T23:59:59Z" == t.to_iso ());
140
+ REQUIRE (" 2016-03-31T23:59:59Z" == t.to_iso_all ());
141
+ }
142
+ }
143
+
144
+ TEST_CASE (" Timestamp parsing leaves pointer after timestamp" ) {
145
+ const std::vector<std::string> test_cases = {
146
+ " 2016-03-31T23:59:59Z#" ,
147
+ " 2016-03-31T23:59:59.123Z#" ,
148
+ " 2016-03-31T23:59:59,4Z#" ,
149
+ " 2016-03-31T23:59:59,000000000000000001Z#" ,
150
+ " 2016-03-31T23:59:59.99Z#"
151
+ };
152
+
153
+ for (const auto & tc : test_cases) {
154
+ const char *s = tc.data ();
155
+ const char **str = &s;
156
+ auto const timestamp = osmium::detail::parse_timestamp (str);
157
+ REQUIRE (**str == ' #' );
158
+ REQUIRE (osmium::Timestamp (timestamp).to_iso () == " 2016-03-31T23:59:59Z" );
159
+ }
160
+ }
161
+
129
162
TEST_CASE (" Invalid timestamps" ) {
130
163
REQUIRE_THROWS_AS (osmium::Timestamp{" " }, std::invalid_argument);
131
164
REQUIRE_THROWS_AS (osmium::Timestamp{" x" }, std::invalid_argument);
@@ -149,5 +182,11 @@ TEST_CASE("Invalid timestamps") {
149
182
REQUIRE_THROWS_AS (osmium::Timestamp{" 2000-01-32T00:00:00Z" }, std::invalid_argument);
150
183
REQUIRE_THROWS_AS (osmium::Timestamp{" 2000-02-30T00:00:00Z" }, std::invalid_argument);
151
184
REQUIRE_THROWS_AS (osmium::Timestamp{" 2000-03-32T00:00:00Z" }, std::invalid_argument);
185
+ REQUIRE_THROWS_AS (osmium::Timestamp{" 2000-03-01T00:00:00" }, std::invalid_argument);
186
+ REQUIRE_THROWS_AS (osmium::Timestamp{" 2000-03-01T00:00:00,Z" }, std::invalid_argument);
187
+ REQUIRE_THROWS_AS (osmium::Timestamp{" 2000-03-01T00:00:00,xZ" }, std::invalid_argument);
188
+ REQUIRE_THROWS_AS (osmium::Timestamp{" 2000-03-01T00:00:00,123mZ" }, std::invalid_argument);
189
+ REQUIRE_THROWS_AS (osmium::Timestamp{" 2000-03-01T00:00:00.@Z" }, std::invalid_argument);
190
+ REQUIRE_THROWS_AS (osmium::Timestamp{" 2000-03-01T00:00:00.@" }, std::invalid_argument);
152
191
}
153
192
0 commit comments