@@ -1249,71 +1249,69 @@ mod tests {
12491249 }
12501250
12511251 #[ test]
1252- fn test_parse_positional_12_digits ( ) {
1252+ fn test_parse_positional_valid_inputs ( ) {
1253+ // 12 digits: full date with 4-digit year
12531254 let result = parse_positional_set_datetime ( "010112002025" , true ) . unwrap ( ) ;
12541255 assert_eq ! ( result. year( ) , 2025 ) ;
12551256 assert_eq ! ( result. month( ) , 1 ) ;
12561257 assert_eq ! ( result. day( ) , 1 ) ;
12571258 assert_eq ! ( result. hour( ) , 12 ) ;
12581259 assert_eq ! ( result. minute( ) , 0 ) ;
12591260 assert_eq ! ( result. second( ) , 0 ) ;
1260- }
12611261
1262- #[ test]
1263- fn test_parse_positional_8_digits ( ) {
1262+ // 8 digits: year defaults to current year
12641263 let result = parse_positional_set_datetime ( "01011200" , true ) . unwrap ( ) ;
12651264 let current_year = Timestamp :: now ( ) . to_zoned ( TimeZone :: UTC ) . year ( ) ;
12661265 assert_eq ! ( result. year( ) , current_year) ;
12671266 assert_eq ! ( result. month( ) , 1 ) ;
12681267 assert_eq ! ( result. day( ) , 1 ) ;
12691268 assert_eq ! ( result. hour( ) , 12 ) ;
12701269 assert_eq ! ( result. minute( ) , 0 ) ;
1271- }
1272-
1273- #[ test]
1274- fn test_parse_positional_10_digits_century_rule ( ) {
1275- // 25 -> 2025
1276- let result = parse_positional_set_datetime ( "0101120025" , true ) . unwrap ( ) ;
1277- assert_eq ! ( result. year( ) , 2025 ) ;
1278-
1279- // 68 -> 2068 (boundary)
1280- let result = parse_positional_set_datetime ( "0101120068" , true ) . unwrap ( ) ;
1281- assert_eq ! ( result. year( ) , 2068 ) ;
12821270
1283- // 69 -> 1969 (boundary)
1284- let result = parse_positional_set_datetime ( "0101120069" , true ) . unwrap ( ) ;
1285- assert_eq ! ( result. year( ) , 1969 ) ;
1286-
1287- // 99 -> 1999
1288- let result = parse_positional_set_datetime ( "0101120099" , true ) . unwrap ( ) ;
1289- assert_eq ! ( result. year( ) , 1999 ) ;
1290- }
1271+ // 10 digits: 2-digit year century rule (00-68 -> 20xx, 69-99 -> 19xx)
1272+ assert_eq ! (
1273+ parse_positional_set_datetime( "0101120025" , true )
1274+ . unwrap( )
1275+ . year( ) ,
1276+ 2025
1277+ ) ;
1278+ assert_eq ! (
1279+ parse_positional_set_datetime( "0101120068" , true )
1280+ . unwrap( )
1281+ . year( ) ,
1282+ 2068
1283+ ) ;
1284+ assert_eq ! (
1285+ parse_positional_set_datetime( "0101120069" , true )
1286+ . unwrap( )
1287+ . year( ) ,
1288+ 1969
1289+ ) ;
1290+ assert_eq ! (
1291+ parse_positional_set_datetime( "0101120099" , true )
1292+ . unwrap( )
1293+ . year( ) ,
1294+ 1999
1295+ ) ;
12911296
1292- #[ test]
1293- fn test_parse_positional_with_seconds ( ) {
1294- // 12 digits + seconds
1297+ // Optional .ss seconds suffix on each length variant
12951298 let result = parse_positional_set_datetime ( "010112002025.45" , true ) . unwrap ( ) ;
12961299 assert_eq ! ( result. year( ) , 2025 ) ;
1297- assert_eq ! ( result. hour( ) , 12 ) ;
12981300 assert_eq ! ( result. second( ) , 45 ) ;
1299-
1300- // 10 digits + seconds
13011301 let result = parse_positional_set_datetime ( "0101120025.30" , true ) . unwrap ( ) ;
13021302 assert_eq ! ( result. year( ) , 2025 ) ;
13031303 assert_eq ! ( result. second( ) , 30 ) ;
1304-
1305- // 8 digits + seconds
13061304 let result = parse_positional_set_datetime ( "01011200.59" , true ) . unwrap ( ) ;
13071305 assert_eq ! ( result. hour( ) , 12 ) ;
13081306 assert_eq ! ( result. second( ) , 59 ) ;
1307+ assert_eq ! (
1308+ parse_positional_set_datetime( "010112002025.00" , true )
1309+ . unwrap( )
1310+ . second( ) ,
1311+ 0
1312+ ) ;
13091313
1310- // Seconds boundary: .00
1311- let result = parse_positional_set_datetime ( "010112002025.00" , true ) . unwrap ( ) ;
1312- assert_eq ! ( result. second( ) , 0 ) ;
1313- }
1314-
1315- #[ test]
1316- fn test_parse_positional_local_timezone ( ) {
1314+ // Local timezone (utc = false)
13171315 let result = parse_positional_set_datetime ( "010112002025" , false ) . unwrap ( ) ;
13181316 assert_eq ! ( result. year( ) , 2025 ) ;
13191317 assert_eq ! ( result. month( ) , 1 ) ;
0 commit comments