@@ -666,6 +666,28 @@ mod tests {
666
666
667
667
const TROLL_FIRST_TRANSITION : & str = "2005-03-27T03:00:00+02:00[Antarctica/Troll]" ;
668
668
669
+ /// Vancouver transitions on the first Sunday in November, which may or may not be
670
+ /// before the first Friday in November
671
+ const VANCOUVER_FIRST_FRIDAY_IN_NOVEMBER_BEFORE_SUNDAY : & str =
672
+ "2019-11-01T00:00:00-07:00[America/Vancouver]" ;
673
+ const VANCOUVER_FIRST_FRIDAY_IN_NOVEMBER_AFTER_SUNDAY : & str =
674
+ "2019-11-06T00:00:00-08:00[America/Vancouver]" ;
675
+
676
+ /// Chile tzdb has a transition on the "first saturday in april", except the transition occurs
677
+ /// at 24:00:00, which is, of course, the day after. This is not the same thing as the first Sunday in April
678
+ const SANTIAGO_DST_2024 : & str = "2024-09-08T01:00:00-03:00[America/Santiago]" ;
679
+ const SANTIAGO_STD_2025_APRIL : & str = "2025-04-05T23:00:00-04:00[America/Santiago]" ;
680
+ const SANTIAGO_STD_2025_APRIL_PLUS_ONE : & str =
681
+ "2025-04-05T23:00:00.000000001-04:00[America/Santiago]" ;
682
+ const SANTIAGO_STD_2025_APRIL_MINUS_ONE : & str =
683
+ "2025-04-05T23:59:59.999999999-03:00[America/Santiago]" ;
684
+ const SANTIAGO_DST_2025_SEPT : & str = "2025-09-07T01:00:00-03:00[America/Santiago]" ;
685
+ const SANTIAGO_DST_2025_SEPT_PLUS_ONE : & str =
686
+ "2025-09-07T01:00:00.000000001-03:00[America/Santiago]" ;
687
+ const SANTIAGO_DST_2025_SEPT_MINUS_ONE : & str =
688
+ "2025-09-06T23:59:59.999999999-04:00[America/Santiago]" ;
689
+ const SANTIAGO_STD_2026 : & str = "2026-04-04T23:00:00-04:00[America/Santiago]" ;
690
+
669
691
// MUST only contain full strings
670
692
// The second boolean is whether these are unambiguous when the offset is removed
671
693
// As a rule of thumb, anything around an STD->DST transition
@@ -698,6 +720,16 @@ mod tests {
698
720
( LONDON_POSIX_TRANSITION_2017_03_26_MINUS_ONE , true ) ,
699
721
( LONDON_POSIX_TRANSITION_2017_03_26_MINUS_ONE , true ) ,
700
722
( TROLL_FIRST_TRANSITION , true ) ,
723
+ ( VANCOUVER_FIRST_FRIDAY_IN_NOVEMBER_BEFORE_SUNDAY , true ) ,
724
+ ( VANCOUVER_FIRST_FRIDAY_IN_NOVEMBER_AFTER_SUNDAY , true ) ,
725
+ ( SANTIAGO_DST_2024 , true ) ,
726
+ ( SANTIAGO_STD_2025_APRIL , false ) ,
727
+ ( SANTIAGO_STD_2025_APRIL_PLUS_ONE , false ) ,
728
+ ( SANTIAGO_STD_2025_APRIL_MINUS_ONE , false ) ,
729
+ ( SANTIAGO_DST_2025_SEPT , true ) ,
730
+ ( SANTIAGO_DST_2025_SEPT_PLUS_ONE , true ) ,
731
+ ( SANTIAGO_DST_2025_SEPT_MINUS_ONE , true ) ,
732
+ ( SANTIAGO_STD_2026 , false ) ,
701
733
] ;
702
734
703
735
#[ test]
@@ -766,6 +798,28 @@ mod tests {
766
798
assert_tr ( & zdt, Previous , STD_1998_01_31 ) ;
767
799
assert_tr ( & zdt, Next , DST_1999_04_04 ) ;
768
800
801
+ // Santiago tests, testing that transitions with the offset = 24:00:00
802
+ // still work
803
+ let zdt = parse_zdt_with_reject ( SANTIAGO_DST_2025_SEPT_MINUS_ONE ) . unwrap ( ) ;
804
+ assert_tr ( & zdt, Previous , SANTIAGO_STD_2025_APRIL ) ;
805
+ assert_tr ( & zdt, Next , SANTIAGO_DST_2025_SEPT ) ;
806
+ let zdt = parse_zdt_with_reject ( SANTIAGO_DST_2025_SEPT ) . unwrap ( ) ;
807
+ assert_tr ( & zdt, Previous , SANTIAGO_STD_2025_APRIL ) ;
808
+ assert_tr ( & zdt, Next , SANTIAGO_STD_2026 ) ;
809
+ let zdt = parse_zdt_with_reject ( SANTIAGO_DST_2025_SEPT_PLUS_ONE ) . unwrap ( ) ;
810
+ assert_tr ( & zdt, Previous , SANTIAGO_DST_2025_SEPT ) ;
811
+ assert_tr ( & zdt, Next , SANTIAGO_STD_2026 ) ;
812
+
813
+ let zdt = parse_zdt_with_reject ( SANTIAGO_STD_2025_APRIL_MINUS_ONE ) . unwrap ( ) ;
814
+ assert_tr ( & zdt, Previous , SANTIAGO_DST_2024 ) ;
815
+ assert_tr ( & zdt, Next , SANTIAGO_STD_2025_APRIL ) ;
816
+ let zdt = parse_zdt_with_reject ( SANTIAGO_STD_2025_APRIL ) . unwrap ( ) ;
817
+ assert_tr ( & zdt, Previous , SANTIAGO_DST_2024 ) ;
818
+ assert_tr ( & zdt, Next , SANTIAGO_DST_2025_SEPT ) ;
819
+ let zdt = parse_zdt_with_reject ( SANTIAGO_STD_2025_APRIL_PLUS_ONE ) . unwrap ( ) ;
820
+ assert_tr ( & zdt, Previous , SANTIAGO_STD_2025_APRIL ) ;
821
+ assert_tr ( & zdt, Next , SANTIAGO_DST_2025_SEPT ) ;
822
+
769
823
// Test case from intl402/Temporal/ZonedDateTime/prototype/getTimeZoneTransition/rule-change-without-offset-transition
770
824
// This ensures we skip "fake" transition entries that do not actually change the offset
771
825
0 commit comments