Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions src/builtins/compiled/duration.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::{
builtins::TZ_PROVIDER,
options::{RelativeTo, RoundingOptions, TemporalUnit},
options::{RelativeTo, RoundingOptions, Unit},
primitive::FiniteF64,
Duration, TemporalError, TemporalResult,
};
Expand Down Expand Up @@ -41,11 +41,7 @@ impl Duration {
self.compare_with_provider(two, relative_to, &*provider)
}

pub fn total(
&self,
unit: TemporalUnit,
relative_to: Option<RelativeTo>,
) -> TemporalResult<FiniteF64> {
pub fn total(&self, unit: Unit, relative_to: Option<RelativeTo>) -> TemporalResult<FiniteF64> {
let provider = TZ_PROVIDER
.lock()
.map_err(|_| TemporalError::general("Unable to acquire lock"))?;
Expand Down
171 changes: 79 additions & 92 deletions src/builtins/compiled/duration/tests.rs

Large diffs are not rendered by default.

12 changes: 5 additions & 7 deletions src/builtins/core/calendar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::{
Duration, PlainDate, PlainDateTime, PlainMonthDay, PlainYearMonth,
},
iso::IsoDate,
options::{ArithmeticOverflow, TemporalUnit},
options::{ArithmeticOverflow, Unit},
parsers::parse_allowed_calendar_formats,
TemporalError, TemporalResult,
};
Expand Down Expand Up @@ -328,7 +328,7 @@ impl Calendar {
// duration.[[Milliseconds]], duration.[[Microseconds]], duration.[[Nanoseconds]]).
// 9. Let balanceResult be BalanceTimeDuration(norm, "day").
let (balance_days, _) =
TimeDuration::from_normalized(duration.time().to_normalized(), TemporalUnit::Day)?;
TimeDuration::from_normalized(duration.time().to_normalized(), Unit::Day)?;

// 10. Let result be ? AddISODate(date.[[ISOYear]], date.[[ISOMonth]], date.[[ISODay]], duration.[[Years]],
// duration.[[Months]], duration.[[Weeks]], duration.[[Days]] + balanceResult.[[Days]], overflow).
Expand All @@ -353,7 +353,7 @@ impl Calendar {
&self,
one: &IsoDate,
two: &IsoDate,
largest_unit: TemporalUnit,
largest_unit: Unit,
) -> TemporalResult<Duration> {
if self.is_iso() {
let date_duration = one.diff_iso_date(two, largest_unit)?;
Expand Down Expand Up @@ -673,7 +673,7 @@ impl From<PlainYearMonth> for Calendar {

#[cfg(test)]
mod tests {
use crate::{iso::IsoDate, options::TemporalUnit};
use crate::{iso::IsoDate, options::Unit};
use core::str::FromStr;

use super::Calendar;
Expand Down Expand Up @@ -952,9 +952,7 @@ mod tests {
for test in tests {
let first = IsoDate::new_unchecked(test.0 .0, test.0 .1, test.0 .2);
let second = IsoDate::new_unchecked(test.1 .0, test.1 .1, test.1 .2);
let result = calendar
.date_until(&first, &second, TemporalUnit::Year)
.unwrap();
let result = calendar.date_until(&first, &second, Unit::Year).unwrap();
assert_eq!(
result.years().0 as i32,
test.2 .0,
Expand Down
16 changes: 8 additions & 8 deletions src/builtins/core/date.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use crate::{
iso::{IsoDate, IsoDateTime, IsoTime},
options::{
ArithmeticOverflow, DifferenceOperation, DifferenceSettings, Disambiguation,
DisplayCalendar, ResolvedRoundingOptions, TemporalUnit, UnitGroup,
DisplayCalendar, ResolvedRoundingOptions, Unit, UnitGroup,
},
parsers::{parse_date_time, IxdtfStringBuilder},
primitive::FiniteF64,
Expand Down Expand Up @@ -236,7 +236,7 @@ impl PlainDate {
// 6. Let days be duration.[[Days]] + BalanceTimeDuration(norm,
// "day").[[Days]].
let days = duration.days().checked_add(
&TimeDuration::from_normalized(duration.time().to_normalized(), TemporalUnit::Day)?.0,
&TimeDuration::from_normalized(duration.time().to_normalized(), Unit::Day)?.0,
)?;

// 7. Let result be ? AddISODate(plainDate.[[ISOYear]], plainDate.[[ISOMonth]], plainDate.[[ISODay]], 0, 0, 0, days, overflow).
Expand Down Expand Up @@ -265,7 +265,7 @@ impl PlainDate {
pub(crate) fn internal_diff_date(
&self,
other: &Self,
largest_unit: TemporalUnit,
largest_unit: Unit,
) -> TemporalResult<Duration> {
if self.iso.year == other.iso.year
&& self.iso.month == other.iso.month
Expand All @@ -274,7 +274,7 @@ impl PlainDate {
return Ok(Duration::default());
}

if largest_unit == TemporalUnit::Day {
if largest_unit == Unit::Day {
let days = self.days_until(other);
return Ok(Duration::from(DateDuration::new(
FiniteF64::default(),
Expand Down Expand Up @@ -310,8 +310,8 @@ impl PlainDate {
settings,
op,
UnitGroup::Date,
TemporalUnit::Day,
TemporalUnit::Day,
Unit::Day,
Unit::Day,
)?;

// 6. If temporalDate.[[ISOYear]] = other.[[ISOYear]], and temporalDate.[[ISOMonth]] = other.[[ISOMonth]],
Expand All @@ -330,7 +330,7 @@ impl PlainDate {
let mut duration = NormalizedDurationRecord::from_date_duration(*result.date())?;
// 11. If settings.[[SmallestUnit]] is "day" and settings.[[RoundingIncrement]] = 1, let roundingGranularityIsNoop be true; else let roundingGranularityIsNoop be false.
let rounding_granularity_is_noop =
resolved.smallest_unit == TemporalUnit::Day && resolved.increment.get() == 1;
resolved.smallest_unit == Unit::Day && resolved.increment.get() == 1;
// 12. If roundingGranularityIsNoop is false, then
if !rounding_granularity_is_noop {
// a. Let destEpochNs be GetUTCEpochNanoseconds(other.[[ISOYear]], other.[[ISOMonth]], other.[[ISODay]], 0, 0, 0, 0, 0, 0).
Expand All @@ -348,7 +348,7 @@ impl PlainDate {
resolved,
)?
}
let result = Duration::from_normalized(duration, TemporalUnit::Day)?;
let result = Duration::from_normalized(duration, Unit::Day)?;
// 13. Return ! CreateTemporalDuration(sign × duration.[[Years]], sign × duration.[[Months]], sign × duration.[[Weeks]], sign × duration.[[Days]], 0, 0, 0, 0, 0, 0).
match op {
DifferenceOperation::Until => Ok(result),
Expand Down
58 changes: 23 additions & 35 deletions src/builtins/core/datetime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ use crate::{
iso::{IsoDate, IsoDateTime, IsoTime},
options::{
ArithmeticOverflow, DifferenceOperation, DifferenceSettings, Disambiguation,
DisplayCalendar, ResolvedRoundingOptions, RoundingOptions, TemporalUnit,
ToStringRoundingOptions, UnitGroup,
DisplayCalendar, ResolvedRoundingOptions, RoundingOptions, ToStringRoundingOptions, Unit,
UnitGroup,
},
parsers::{parse_date_time, IxdtfStringBuilder},
primitive::FiniteF64,
Expand Down Expand Up @@ -158,8 +158,8 @@ impl PlainDateTime {
settings,
op,
UnitGroup::DateTime,
TemporalUnit::Day,
TemporalUnit::Nanosecond,
Unit::Day,
Unit::Nanosecond,
)?;

// Step 7-8 combined.
Expand Down Expand Up @@ -201,7 +201,7 @@ impl PlainDateTime {
.diff(&other.iso, &self.calendar, options.largest_unit)?;

// 4. If smallestUnit is nanosecond and roundingIncrement = 1, return diff.
if options.smallest_unit == TemporalUnit::Nanosecond && options.increment.get() == 1 {
if options.smallest_unit == Unit::Nanosecond && options.increment.get() == 1 {
return Ok(diff);
}

Expand All @@ -217,11 +217,7 @@ impl PlainDateTime {
}

// 5.5.14 DifferencePlainDateTimeWithTotal ( isoDateTime1, isoDateTime2, calendar, unit )
pub(crate) fn diff_dt_with_total(
&self,
other: &Self,
unit: TemporalUnit,
) -> TemporalResult<FiniteF64> {
pub(crate) fn diff_dt_with_total(&self, other: &Self, unit: Unit) -> TemporalResult<FiniteF64> {
// 1. If CompareISODateTime(isoDateTime1, isoDateTime2) = 0, then
// a. Return 0.
if matches!(self.iso.cmp(&other.iso), Ordering::Equal) {
Expand All @@ -234,7 +230,7 @@ impl PlainDateTime {
// 3. Let diff be DifferenceISODateTime(isoDateTime1, isoDateTime2, calendar, unit).
let diff = self.iso.diff(&other.iso, &self.calendar, unit)?;
// 4. If unit is nanosecond, return diff.[[Time]].
if unit == TemporalUnit::Nanosecond {
if unit == Unit::Nanosecond {
return FiniteF64::try_from(diff.normalized_time_duration().0);
}
// 5. Let destEpochNs be GetUTCEpochNanoseconds(isoDateTime2).
Expand Down Expand Up @@ -799,8 +795,8 @@ mod tests {
},
iso::{IsoDate, IsoDateTime, IsoTime},
options::{
DifferenceSettings, DisplayCalendar, RoundingIncrement, RoundingOptions,
TemporalRoundingMode, TemporalUnit, ToStringRoundingOptions,
DifferenceSettings, DisplayCalendar, RoundingIncrement, RoundingMode, RoundingOptions,
ToStringRoundingOptions, Unit,
},
parsers::Precision,
primitive::FiniteF64,
Expand Down Expand Up @@ -1099,9 +1095,9 @@ mod tests {
}

fn create_diff_setting(
smallest: TemporalUnit,
smallest: Unit,
increment: u32,
rounding_mode: TemporalRoundingMode,
rounding_mode: RoundingMode,
) -> DifferenceSettings {
DifferenceSettings {
largest_unit: None,
Expand All @@ -1120,14 +1116,13 @@ mod tests {
PlainDateTime::try_new(2021, 9, 7, 12, 39, 40, 987, 654, 321, Calendar::default())
.unwrap();

let settings = create_diff_setting(TemporalUnit::Hour, 3, TemporalRoundingMode::HalfExpand);
let settings = create_diff_setting(Unit::Hour, 3, RoundingMode::HalfExpand);
let result = earlier.until(&later, settings).unwrap();

assert_eq!(result.days(), 973.0);
assert_eq!(result.hours(), 3.0);

let settings =
create_diff_setting(TemporalUnit::Minute, 30, TemporalRoundingMode::HalfExpand);
let settings = create_diff_setting(Unit::Minute, 30, RoundingMode::HalfExpand);
let result = earlier.until(&later, settings).unwrap();

assert_eq!(result.days(), 973.0);
Expand All @@ -1144,14 +1139,13 @@ mod tests {
PlainDateTime::try_new(2021, 9, 7, 12, 39, 40, 987, 654, 321, Calendar::default())
.unwrap();

let settings = create_diff_setting(TemporalUnit::Hour, 3, TemporalRoundingMode::HalfExpand);
let settings = create_diff_setting(Unit::Hour, 3, RoundingMode::HalfExpand);
let result = later.since(&earlier, settings).unwrap();

assert_eq!(result.days(), 973.0);
assert_eq!(result.hours(), 3.0);

let settings =
create_diff_setting(TemporalUnit::Minute, 30, TemporalRoundingMode::HalfExpand);
let settings = create_diff_setting(Unit::Minute, 30, RoundingMode::HalfExpand);
let result = later.since(&earlier, settings).unwrap();

assert_eq!(result.days(), 973.0);
Expand All @@ -1174,7 +1168,7 @@ mod tests {
assert_eq!(dt.nanosecond(), expected.8);
};

let gen_rounding_options = |smallest: TemporalUnit, increment: u32| -> RoundingOptions {
let gen_rounding_options = |smallest: Unit, increment: u32| -> RoundingOptions {
RoundingOptions {
largest_unit: None,
smallest_unit: Some(smallest),
Expand All @@ -1186,33 +1180,27 @@ mod tests {
PlainDateTime::try_new(1976, 11, 18, 14, 23, 30, 123, 456, 789, Calendar::default())
.unwrap();

let result = dt
.round(gen_rounding_options(TemporalUnit::Hour, 4))
.unwrap();
let result = dt.round(gen_rounding_options(Unit::Hour, 4)).unwrap();
assert_datetime(result, (1976, 11, 18, 16, 0, 0, 0, 0, 0));

let result = dt
.round(gen_rounding_options(TemporalUnit::Minute, 15))
.unwrap();
let result = dt.round(gen_rounding_options(Unit::Minute, 15)).unwrap();
assert_datetime(result, (1976, 11, 18, 14, 30, 0, 0, 0, 0));

let result = dt
.round(gen_rounding_options(TemporalUnit::Second, 30))
.unwrap();
let result = dt.round(gen_rounding_options(Unit::Second, 30)).unwrap();
assert_datetime(result, (1976, 11, 18, 14, 23, 30, 0, 0, 0));

let result = dt
.round(gen_rounding_options(TemporalUnit::Millisecond, 10))
.round(gen_rounding_options(Unit::Millisecond, 10))
.unwrap();
assert_datetime(result, (1976, 11, 18, 14, 23, 30, 120, 0, 0));

let result = dt
.round(gen_rounding_options(TemporalUnit::Microsecond, 10))
.round(gen_rounding_options(Unit::Microsecond, 10))
.unwrap();
assert_datetime(result, (1976, 11, 18, 14, 23, 30, 123, 460, 0));

let result = dt
.round(gen_rounding_options(TemporalUnit::Nanosecond, 10))
.round(gen_rounding_options(Unit::Nanosecond, 10))
.unwrap();
assert_datetime(result, (1976, 11, 18, 14, 23, 30, 123, 456, 790));
}
Expand All @@ -1226,7 +1214,7 @@ mod tests {
let bad_options = RoundingOptions {
largest_unit: None,
smallest_unit: None,
rounding_mode: Some(TemporalRoundingMode::Ceil),
rounding_mode: Some(RoundingMode::Ceil),
increment: Some(RoundingIncrement::ONE),
};

Expand Down
Loading