|
1 | 1 | use crate::{ |
2 | 2 | duration::DateDuration, |
3 | 3 | options::{ |
4 | | - OffsetDisambiguation, RelativeTo, RoundingIncrement, RoundingMode, RoundingOptions, Unit, |
| 4 | + OffsetDisambiguation, Overflow, RelativeTo, RoundingIncrement, RoundingMode, |
| 5 | + RoundingOptions, Unit, |
5 | 6 | }, |
6 | 7 | partial::PartialDuration, |
7 | 8 | Calendar, PlainDate, TimeZone, ZonedDateTime, |
@@ -626,6 +627,24 @@ fn add_normalized_time_duration_out_of_range() { |
626 | 627 | assert!(err.is_err()) |
627 | 628 | } |
628 | 629 |
|
| 630 | +#[test] |
| 631 | +fn add_large_durations() { |
| 632 | + // Testcases found by fuzzing <https://github.com/unicode-org/icu4x/pull/7206> |
| 633 | + let base = PlainDate::new(2000, 1, 1, Calendar::from_str("dangi").unwrap()).unwrap(); |
| 634 | + |
| 635 | + let test_duration = Duration::from(DateDuration::new(4294901760, 256, 0, 0).unwrap()); |
| 636 | + assert!(base.add(&test_duration, Some(Overflow::Constrain)).is_err()); |
| 637 | + |
| 638 | + let test_duration = Duration::from(DateDuration::new(0, 1281, 0, 8589934592).unwrap()); |
| 639 | + assert!(base.add(&test_duration, Some(Overflow::Constrain)).is_err()); |
| 640 | + |
| 641 | + let test_duration = Duration::from(DateDuration::new(2046820352, 0, 0, 0).unwrap()); |
| 642 | + assert!(base.add(&test_duration, Some(Overflow::Constrain)).is_err()); |
| 643 | + |
| 644 | + let test_duration = Duration::from(DateDuration::new(0, 0, 2516582400, 0).unwrap()); |
| 645 | + assert!(base.add(&test_duration, Some(Overflow::Constrain)).is_err()); |
| 646 | +} |
| 647 | + |
629 | 648 | #[test] |
630 | 649 | fn test_rounding_boundaries() { |
631 | 650 | let relative_to = PlainDate::new(2000, 1, 1, Calendar::default()).unwrap(); |
|
0 commit comments