diff --git a/test/built-ins/Temporal/ZonedDateTime/from/argument-string-start-of-day-not-valid-epoch-nanoseconds.js b/test/built-ins/Temporal/ZonedDateTime/from/argument-string-start-of-day-not-valid-epoch-nanoseconds.js new file mode 100644 index 0000000000..580f314e5b --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/from/argument-string-start-of-day-not-valid-epoch-nanoseconds.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.from +description: > + Start-of-day is outside the valid epoch nanoseconds limits. +info: | + Temporal.ZonedDateTime.from ( item [ , options ] ) + + 1. Return ? ToTemporalZonedDateTime(item, options). + + ToTemporalZonedDateTime ( item [ , options ] ) + + ... + 8. Let epochNanoseconds be ? InterpretISODateTimeOffset(isoDate, time, + offsetBehaviour, offsetNanoseconds, timeZone, disambiguation, offsetOption, + matchBehaviour). + ... + + InterpretISODateTimeOffset ( isoDate, time, offsetBehaviour, offsetNanoseconds, + timeZone, disambiguation, offsetOption, matchBehaviour ) + + 1. If time is start-of-day, then + a. Assert: offsetBehaviour is wall. + b. Assert: offsetNanoseconds is 0. + c. Return ? GetStartOfDay(timeZone, isoDate). + ... +features: [Temporal] +---*/ + +assert.throws( + RangeError, + () => Temporal.ZonedDateTime.from("-271821-04-20[+01]"), + "From '-271821-04-20[+01]'" +); + +assert.throws( + RangeError, + () => Temporal.ZonedDateTime.from("+275760-09-13[-01]"), + "From '+275760-09-13[-01]'" +); diff --git a/test/built-ins/Temporal/ZonedDateTime/get-prototype-from-constructor-throws.js b/test/built-ins/Temporal/ZonedDateTime/get-prototype-from-constructor-throws.js new file mode 100644 index 0000000000..b33cc534ab --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/get-prototype-from-constructor-throws.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime +description: > + OrdinaryCreateFromConstructor returns with an abrupt completion. +info: | + CreateTemporalZonedDateTime ( epochNanoseconds, timeZone, calendar [ , newTarget ] ) + + ... + 3. Let object be ? OrdinaryCreateFromConstructor(newTarget, + "%Temporal.ZonedDateTime.prototype%", « [[InitializedTemporalZonedDateTime]], + [[EpochNanoseconds]], [[TimeZone]], [[Calendar]] »). + ... + + OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] ) + + ... + 2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto). + ... + + GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto ) + + ... + 2. Let proto be ? Get(constructor, "prototype"). + ... + +features: [Temporal] +---*/ + +var newTarget = Object.defineProperty(function(){}.bind(), "prototype", { + get() { + throw new Test262Error(); + } +}); + +assert.throws(Test262Error, function() { + Reflect.construct(Temporal.ZonedDateTime, [0n, "UTC"], newTarget) +}); diff --git a/test/built-ins/Temporal/ZonedDateTime/limits.js b/test/built-ins/Temporal/ZonedDateTime/limits.js new file mode 100644 index 0000000000..1079275dc4 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/limits.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime +description: > + RangeError thrown when epoch nanoseconds not valid. +info: | + Temporal.ZonedDateTime ( epochNanoseconds, timeZone [ , calendar ] ) + + 2. Set epochNanoseconds to ? ToBigInt(epochNanoseconds). + 3. If IsValidEpochNanoseconds(epochNanoseconds) is false, throw a RangeError exception. + ... +features: [Temporal] +---*/ + +var nsMaxInstant = 864n * 10n ** 19n; +var nsMinInstant = -nsMaxInstant; + +var invalidEpochNanoseconds = [ + nsMaxInstant + 1n, + nsMinInstant - 1n, + 2n ** 128n, + -(2n ** 128n), +]; + +var timeZones = [ + "UTC", + "+00", + "+01", + "-01", +]; + +for (var timeZone of timeZones) { + for (var epochNs of invalidEpochNanoseconds) { + assert.throws( + RangeError, + () => new Temporal.ZonedDateTime(epochNs, timeZone), + `epochNs = ${epochNs}, timeZone = ${timeZone}` + ); + } +} diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/add/throw-when-intermediate-datetime-outside-valid-limits.js b/test/built-ins/Temporal/ZonedDateTime/prototype/add/throw-when-intermediate-datetime-outside-valid-limits.js new file mode 100644 index 0000000000..3b3cc38ff3 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/add/throw-when-intermediate-datetime-outside-valid-limits.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.add +description: > + Throws RangeError when intermediate date-time is outside valid limits. +info: | + Temporal.ZonedDateTime.prototype.add ( temporalDurationLike [ , options ] ) + + ... + 3. Return ? AddDurationToZonedDateTime(add, zonedDateTime, temporalDurationLike, options). + + AddDurationToZonedDateTime ( operation, zonedDateTime, temporalDurationLike, options ) + + ... + 8. Let epochNanoseconds be ? AddZonedDateTime(zonedDateTime.[[EpochNanoseconds]], timeZone, calendar, internalDuration, overflow). + ... + + AddZonedDateTime ( epochNanoseconds, timeZone, calendar, duration, overflow ) + + ... + 4. Let intermediateDateTime be CombineISODateAndTimeRecord(addedDate, isoDateTime.[[Time]]). + 5. If ISODateTimeWithinLimits(intermediateDateTime) is false, throw a RangeError exception. + ... +features: [Temporal] +---*/ + +var nsMaxInstant = 864n * 10n**19n; +var nsMinInstant = -nsMaxInstant; + +var epochNs = nsMinInstant; +var zdt = new Temporal.ZonedDateTime(epochNs, "UTC"); + +assert.throws(RangeError, () => zdt.add({days: -1})); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/hoursInDay/basic.js b/test/built-ins/Temporal/ZonedDateTime/prototype/hoursInDay/basic.js new file mode 100644 index 0000000000..97b9df2260 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/hoursInDay/basic.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.hoursinday +description: > + Basic tests for hoursInDay. +features: [Temporal] +---*/ + +var nsPerDay = 24n * 60n * 60n * 1000n * 1000n * 1000n; + +var epochNanoseconds = [ + 0n, + nsPerDay, + -nsPerDay, +]; + +var timeZones = [ + "UTC", + "+00", + "+01", + "-01", +]; + +for (var timeZone of timeZones) { + for (var epochNs of epochNanoseconds) { + var zdt = new Temporal.ZonedDateTime(epochNs, timeZone); + assert.sameValue(zdt.hoursInDay, 24, `epochNs = ${epochNs}, timeZone = ${timeZone}`); + } +} diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/hoursInDay/get-start-of-day-throws.js b/test/built-ins/Temporal/ZonedDateTime/prototype/hoursInDay/get-start-of-day-throws.js new file mode 100644 index 0000000000..242126742f --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/hoursInDay/get-start-of-day-throws.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.hoursinday +description: > + GetStartOfDay throws a RangeError for values outside the valid limits. +info: | + get Temporal.ZonedDateTime.prototype.hoursInDay + + ... + 7. Let todayNs be ? GetStartOfDay(timeZone, today). + 8. Let tomorrowNs be ? GetStartOfDay(timeZone, tomorrow). + ... +features: [Temporal] +---*/ + +var zdt; + +// GetStartOfDay for |today| fails. +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "-01"); +assert.throws(RangeError, () => zdt.hoursInDay); + +// GetStartOfDay for |today| fails. +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "+01"); +assert.throws(RangeError, () => zdt.hoursInDay); + +// GetStartOfDay for |tomorrow| fails. +zdt = new Temporal.ZonedDateTime(864n * 10n**19n, "-01"); +assert.throws(RangeError, () => zdt.hoursInDay); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/round/get-start-of-day-throws.js b/test/built-ins/Temporal/ZonedDateTime/prototype/round/get-start-of-day-throws.js new file mode 100644 index 0000000000..3653c1dacd --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/round/get-start-of-day-throws.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.round +description: > + GetStartOfDay throws a RangeError for values outside the valid limits. +info: | + Temporal.ZonedDateTime.prototype.round ( roundTo ) + + ... + 18. If smallestUnit is day, then + ... + c. Let startNs be ? GetStartOfDay(timeZone, dateStart). + ... + e. Let endNs be ? GetStartOfDay(timeZone, dateEnd). + ... +features: [Temporal] +---*/ + +var roundTo = {smallestUnit: "days"}; + +var zdt; + +// GetStartOfDay for |dateStart| fails. +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "-01"); +assert.throws(RangeError, () => zdt.round(roundTo)); + +// GetStartOfDay for |dateStart| fails. +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "+01"); +assert.throws(RangeError, () => zdt.round(roundTo)); + +// GetStartOfDay for |dateEnd| fails. +zdt = new Temporal.ZonedDateTime(864n * 10n**19n, "-01"); +assert.throws(RangeError, () => zdt.round(roundTo)); + +// GetStartOfDay for |dateEnd| fails. +zdt = new Temporal.ZonedDateTime(864n * 10n**19n, "+00"); +assert.throws(RangeError, () => zdt.round(roundTo)); + +// GetStartOfDay for |dateEnd| fails. +zdt = new Temporal.ZonedDateTime(864n * 10n**19n, "+01"); +assert.throws(RangeError, () => zdt.round(roundTo)); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/round/rounded-date-time-outside-valid-limits.js b/test/built-ins/Temporal/ZonedDateTime/prototype/round/rounded-date-time-outside-valid-limits.js new file mode 100644 index 0000000000..0fceb9bafa --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/round/rounded-date-time-outside-valid-limits.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.round +description: > + Throws RangeError when rounded ISO date-time is outside the valid limits. +info: | + Temporal.ZonedDateTime.prototype.round ( roundTo ) + + ... + 18. If smallestUnit is day, then + ... + 19. Else, + a. Let roundResult be RoundISODateTime(isoDateTime, roundingIncrement, + smallestUnit, roundingMode). + ... + c. Let epochNanoseconds be ? InterpretISODateTimeOffset(roundResult.[[ISODate]], + roundResult.[[Time]], option, offsetNanoseconds, timeZone, compatible, prefer, + match-exactly). + ... +features: [Temporal] +---*/ + +var nsMaxInstant = 864n * 10n**19n; + +var epochNs = nsMaxInstant; +var zdt = new Temporal.ZonedDateTime(epochNs, "+23:59"); + +var roundTo = { + smallestUnit: "minutes", + roundingIncrement: 10, + roundingMode: "ceil", +}; + +// |isoDateTime| is +275760-09-13T23:59. +// |roundResult| is +275760-09-14T00:00, which is outside the valid limits. +assert.throws(RangeError, () => zdt.round(roundTo)); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/since/same-epoch-nanoseconds.js b/test/built-ins/Temporal/ZonedDateTime/prototype/since/same-epoch-nanoseconds.js new file mode 100644 index 0000000000..2bdc35cc5d --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/since/same-epoch-nanoseconds.js @@ -0,0 +1,69 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.since +description: > + Returns a blank duration when epoch nanoseconds are equal. +info: | + Temporal.ZonedDateTime.prototype.since ( other [ , options ] ) + + 3. Return ? DifferenceTemporalZonedDateTime(since, zonedDateTime, other, options). + + DifferenceTemporalZonedDateTime ( operation, zonedDateTime, other, options ) + + ... + 8. If zonedDateTime.[[EpochNanoseconds]] = other.[[EpochNanoseconds]], then + a. Return ! CreateTemporalDuration(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). + ... +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +var epochNanoseconds = [ + 0n, + 1n, + -1n, +]; + +var timeZones = [ + "UTC", + "+00", + "+01", + "-01", +]; + +var units = [ + "years", + "months", + "weeks", + "days", + "hours", + "minutes", + "seconds", + "milliseconds", + "microseconds", + "nanoseconds", +]; + +for (var timeZone of timeZones) { + for (var epochNs of epochNanoseconds) { + var zdt = new Temporal.ZonedDateTime(epochNs, timeZone); + var other = new Temporal.ZonedDateTime(epochNs, timeZone); + + for (var i = 0; i < units.length; ++i) { + for (var j = i; j < units.length; ++j) { + var options = { + largestUnit: units[i], + smallestUnit: units[j], + }; + + TemporalHelpers.assertDuration( + zdt.since(other, options), + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + `epochNs = ${epochNs}, timeZone = ${timeZone}, options = ${JSON.stringify(options)})` + ); + } + } + } +} diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/startOfDay/throws-if-epoch-nanoseconds-outside-valid-limits.js b/test/built-ins/Temporal/ZonedDateTime/prototype/startOfDay/throws-if-epoch-nanoseconds-outside-valid-limits.js new file mode 100644 index 0000000000..fec4106a08 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/startOfDay/throws-if-epoch-nanoseconds-outside-valid-limits.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.startofday +description: > + GetStartOfDay throws a RangeError for values outside the valid limits. +info: | + Temporal.ZonedDateTime.prototype.startOfDay ( ) + + ... + 6. Let epochNanoseconds be ? GetStartOfDay(timeZone, isoDateTime.[[ISODate]]). + ... +features: [Temporal] +---*/ + +var zdt; + +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "-01"); +assert.throws(RangeError, () => zdt.startOfDay()); + +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "+01"); +assert.throws(RangeError, () => zdt.startOfDay()); + +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "+00"); +assert(zdt.startOfDay().equals(zdt)); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/throw-when-intermediate-datetime-outside-valid-limits.js b/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/throw-when-intermediate-datetime-outside-valid-limits.js new file mode 100644 index 0000000000..eac82ed901 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/subtract/throw-when-intermediate-datetime-outside-valid-limits.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.subtract +description: > + Throws RangeError when intermediate date-time is outside valid limits. +info: | + Temporal.ZonedDateTime.prototype.subtract ( temporalDurationLike [ , options ] ) + + ... + 3. Return ? AddDurationToZonedDateTime(subtract, zonedDateTime, temporalDurationLike, options). + + AddDurationToZonedDateTime ( operation, zonedDateTime, temporalDurationLike, options ) + + ... + 8. Let epochNanoseconds be ? AddZonedDateTime(zonedDateTime.[[EpochNanoseconds]], timeZone, calendar, internalDuration, overflow). + ... + + AddZonedDateTime ( epochNanoseconds, timeZone, calendar, duration, overflow ) + + ... + 4. Let intermediateDateTime be CombineISODateAndTimeRecord(addedDate, isoDateTime.[[Time]]). + 5. If ISODateTimeWithinLimits(intermediateDateTime) is false, throw a RangeError exception. + ... +features: [Temporal] +---*/ + +var nsMaxInstant = 864n * 10n**19n; +var nsMinInstant = -nsMaxInstant; + +var epochNs = nsMinInstant; +var zdt = new Temporal.ZonedDateTime(epochNs, "UTC"); + +assert.throws(RangeError, () => zdt.subtract({days: 1})); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/until/same-epoch-nanoseconds.js b/test/built-ins/Temporal/ZonedDateTime/prototype/until/same-epoch-nanoseconds.js new file mode 100644 index 0000000000..b728aec860 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/until/same-epoch-nanoseconds.js @@ -0,0 +1,69 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.until +description: > + Returns a blank duration when epoch nanoseconds are equal. +info: | + Temporal.ZonedDateTime.prototype.until ( other [ , options ] ) + + 3. Return ? DifferenceTemporalZonedDateTime(until, zonedDateTime, other, options). + + DifferenceTemporalZonedDateTime ( operation, zonedDateTime, other, options ) + + ... + 8. If zonedDateTime.[[EpochNanoseconds]] = other.[[EpochNanoseconds]], then + a. Return ! CreateTemporalDuration(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). + ... +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +var epochNanoseconds = [ + 0n, + 1n, + -1n, +]; + +var timeZones = [ + "UTC", + "+00", + "+01", + "-01", +]; + +var units = [ + "years", + "months", + "weeks", + "days", + "hours", + "minutes", + "seconds", + "milliseconds", + "microseconds", + "nanoseconds", +]; + +for (var timeZone of timeZones) { + for (var epochNs of epochNanoseconds) { + var zdt = new Temporal.ZonedDateTime(epochNs, timeZone); + var other = new Temporal.ZonedDateTime(epochNs, timeZone); + + for (var i = 0; i < units.length; ++i) { + for (var j = i; j < units.length; ++j) { + var options = { + largestUnit: units[i], + smallestUnit: units[j], + }; + + TemporalHelpers.assertDuration( + zdt.until(other, options), + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + `epochNs = ${epochNs}, timeZone = ${timeZone}, options = ${JSON.stringify(options)})` + ); + } + } + } +} diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/get-start-of-day-throws.js b/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/get-start-of-day-throws.js new file mode 100644 index 0000000000..12288fe068 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/get-start-of-day-throws.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.withplaintime +description: > + GetStartOfDay throws a RangeError for values outside the valid limits. +info: | + Temporal.ZonedDateTime.prototype.withPlainTime ( [ plainTimeLike ] ) + + ... + 6. If plainTimeLike is undefined, then + a. Let epochNs be ? GetStartOfDay(timeZone, isoDateTime.[[ISODate]]). + ... +features: [Temporal] +---*/ + +var zdt; + +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "-01"); +assert.throws(RangeError, () => zdt.withPlainTime()); + +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "+01"); +assert.throws(RangeError, () => zdt.withPlainTime()); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/throws-if-epoch-nanoseconds-outside-valid-limits.js b/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/throws-if-epoch-nanoseconds-outside-valid-limits.js new file mode 100644 index 0000000000..bbcb963f52 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/throws-if-epoch-nanoseconds-outside-valid-limits.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.withplaintime +description: > + Throws a RangeError for values outside the valid limits. +info: | + Temporal.ZonedDateTime.prototype.withPlainTime ( [ plainTimeLike ] ) + + ... + 7. Else, + ... + c. Let epochNs be ? GetEpochNanosecondsFor(timeZone, resultISODateTime, compatible). + ... +features: [Temporal] +---*/ + +var zdt; + +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "-01"); +assert.throws(RangeError, () => zdt.withPlainTime("00:00")); + +zdt = new Temporal.ZonedDateTime(-864n * 10n**19n, "+01"); +assert.throws(RangeError, () => zdt.withPlainTime("00:00")); + +zdt = new Temporal.ZonedDateTime(864n * 10n**19n, "UTC"); +assert.throws(RangeError, () => zdt.withPlainTime("01:00")); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/yearOfWeek/basic.js b/test/built-ins/Temporal/ZonedDateTime/prototype/yearOfWeek/basic.js new file mode 100644 index 0000000000..ea10097b46 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/yearOfWeek/basic.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-get-temporal.zoneddatetime.prototype.yearofweek +description: > + Basic tests for yearOfWeek. +features: [Temporal] +---*/ + +var nsPerDay = 864n * 10n ** 11n; + +var zdt; + +zdt = new Temporal.ZonedDateTime(0n, "UTC"); +assert.sameValue(zdt.yearOfWeek, 1970); + +zdt = new Temporal.ZonedDateTime(-3n * nsPerDay, "UTC") +assert.sameValue(zdt.yearOfWeek, 1970); + +zdt = new Temporal.ZonedDateTime(-4n * nsPerDay, "UTC") +assert.sameValue(zdt.yearOfWeek, 1969); + +zdt = new Temporal.ZonedDateTime(367n * nsPerDay, "UTC") +assert.sameValue(zdt.yearOfWeek, 1970); + +zdt = new Temporal.ZonedDateTime(368n * nsPerDay, "UTC") +assert.sameValue(zdt.yearOfWeek, 1971);