mirror of https://github.com/tc39/test262.git
Temporal: Port Demitasse PlainDateTime `round` tests (#3478)
Co-authored-by: Ms2ger <Ms2ger@gmail.com>
This commit is contained in:
parent
9055521fc7
commit
5f1aba63ee
|
@ -0,0 +1,19 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Rounding balances to the next smallest unit
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 23, 59, 59, 999, 999, 999);
|
||||
|
||||
["day", "hour", "minute", "second", "millisecond", "microsecond"].forEach((smallestUnit) => {
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit }),
|
||||
1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0,
|
||||
`balances to next ${smallestUnit}`
|
||||
);
|
||||
});
|
53
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-divides.js
vendored
Normal file
53
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-divides.js
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Rounding increment should properly divide the relevant time unit
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
[1, 2, 3, 4, 6, 8, 12].forEach((roundingIncrement) => {
|
||||
assert.sameValue(
|
||||
dt.round({ smallestUnit: "hour", roundingIncrement }) instanceof Temporal.PlainDateTime,
|
||||
true,
|
||||
`valid hour increments divide into 24 (rounding increment = ${roundingIncrement})`);
|
||||
});
|
||||
|
||||
["minute", "second"].forEach((smallestUnit) => {
|
||||
[1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30].forEach((roundingIncrement) => {
|
||||
assert.sameValue(
|
||||
dt.round({ smallestUnit, roundingIncrement }) instanceof Temporal.PlainDateTime,
|
||||
true,
|
||||
`valid ${smallestUnit} increments divide into 60 (rounding increment = ${roundingIncrement})`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
["millisecond", "microsecond", "nanosecond"].forEach((smallestUnit) => {
|
||||
[1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500].forEach((roundingIncrement) => {
|
||||
assert.sameValue(
|
||||
dt.round({ smallestUnit, roundingIncrement }) instanceof Temporal.PlainDateTime,
|
||||
true,
|
||||
`valid ${smallestUnit} increments divide into 1000 (rounding increment = ${roundingIncrement})`);
|
||||
});
|
||||
});
|
||||
|
||||
const nextIncrements = {
|
||||
"hour": 24,
|
||||
"minute": 60,
|
||||
"second": 60,
|
||||
"millisecond": 1000,
|
||||
"microsecond": 1000,
|
||||
"nanosecond": 1000
|
||||
};
|
||||
|
||||
Object.entries(nextIncrements).forEach(([unit, next]) => {
|
||||
assert.throws(
|
||||
RangeError,
|
||||
() => dt.round({ smallestUnit: unit, roundingIncrement: next }),
|
||||
`throws on increments that are equal to the next highest (unit = ${unit}, increment = ${next})`
|
||||
);
|
||||
});
|
18
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-does-not-divide.js
vendored
Normal file
18
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-does-not-divide.js
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Throw exception if the rounding unit does not properly divide the relevant time unit
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
const units = ["day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond"];
|
||||
units.forEach((unit) => {
|
||||
assert.throws(
|
||||
RangeError,
|
||||
() => dt.round({ smallestUnit: unit, roundingIncrement: 29 }),
|
||||
`throws on increments that do not divide evenly into the next highest (unit = ${unit})`
|
||||
);
|
||||
});
|
17
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-one-day.js
vendored
Normal file
17
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-one-day.js
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: One day is a valid rounding increment
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit: "day", roundingIncrement: 1 }),
|
||||
1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0,
|
||||
"1 day is a valid increment"
|
||||
);
|
|
@ -0,0 +1,47 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Basic checks for rounding mode
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit: "hour", roundingIncrement: 4 }),
|
||||
1976, 11, "M11", 18, 16, 0, 0, 0, 0, 0,
|
||||
"rounds to an increment of hours"
|
||||
);
|
||||
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit: "minute", roundingIncrement: 15 }),
|
||||
1976, 11, "M11", 18, 14, 30, 0, 0, 0, 0,
|
||||
"rounds to an increment of minutes"
|
||||
);
|
||||
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit: "second", roundingIncrement: 30 }),
|
||||
1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0,
|
||||
"rounds to an increment of seconds"
|
||||
);
|
||||
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit: "millisecond", roundingIncrement: 10 }),
|
||||
1976, 11, "M11", 18, 14, 23, 30, 120, 0, 0,
|
||||
"rounds to an increment of milliseconds"
|
||||
);
|
||||
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit: "microsecond", roundingIncrement: 10 }),
|
||||
1976, 11, "M11", 18, 14, 23, 30, 123, 460, 0,
|
||||
"rounds to an increment of microseconds"
|
||||
);
|
||||
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit: "nanosecond", roundingIncrement: 10 }),
|
||||
1976, 11, "M11", 18, 14, 23, 30, 123, 456, 790,
|
||||
"rounds to an increment of nanoseconds"
|
||||
);
|
30
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-ceil-basic.js
vendored
Normal file
30
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-ceil-basic.js
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Basic checks for ceiling rounding mode
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
const incrementOneCeil = {
|
||||
"day": [1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0],
|
||||
"hour": [1976, 11, "M11", 18, 15, 0, 0, 0, 0, 0],
|
||||
"minute": [1976, 11, "M11", 18, 14, 24, 0, 0, 0, 0],
|
||||
"second": [1976, 11, "M11", 18, 14, 23, 31, 0, 0, 0],
|
||||
"millisecond": [1976, 11, "M11", 18, 14, 23, 30, 124, 0, 0],
|
||||
"microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 457, 0],
|
||||
"nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789]
|
||||
};
|
||||
|
||||
Object.entries(incrementOneCeil).forEach(([smallestUnit, expected]) => {
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit, roundingMode: "ceil" }),
|
||||
...expected,
|
||||
`rounds up to ${smallestUnit} (ceil)`,
|
||||
undefined
|
||||
);
|
||||
});
|
29
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-floor-basic.js
vendored
Normal file
29
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-floor-basic.js
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Basic checks for the floor rounding mode
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
const incrementOneFloor = {
|
||||
"day": [1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0],
|
||||
"hour": [1976, 11, "M11", 18, 14, 0, 0, 0, 0, 0],
|
||||
"minute": [1976, 11, "M11", 18, 14, 23, 0, 0, 0, 0],
|
||||
"second": [1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0],
|
||||
"millisecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 0, 0],
|
||||
"microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 0],
|
||||
"nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789]
|
||||
};
|
||||
|
||||
Object.entries(incrementOneFloor).forEach(([smallestUnit, expected]) => {
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit, roundingMode: "floor" }),
|
||||
...expected,
|
||||
`rounds down to ${smallestUnit} (floor)`
|
||||
);
|
||||
});
|
30
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-basic.js
vendored
Normal file
30
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-basic.js
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Basic checks for half-expand rounding mode
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
const incrementOneNearest = {
|
||||
"day": [1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0],
|
||||
"hour": [1976, 11, "M11", 18, 14, 0, 0, 0, 0, 0],
|
||||
"minute": [1976, 11, "M11", 18, 14, 24, 0, 0, 0, 0],
|
||||
"second": [1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0],
|
||||
"millisecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 0, 0],
|
||||
"microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 457, 0],
|
||||
"nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789]
|
||||
};
|
||||
|
||||
Object.entries(incrementOneNearest).forEach(([smallestUnit, expected]) => {
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit, roundingMode: "halfExpand" }),
|
||||
...expected,
|
||||
`rounds to nearest ${smallestUnit} (half-expand)`,
|
||||
undefined
|
||||
);
|
||||
});
|
31
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-is-default.js
vendored
Normal file
31
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-halfexpand-is-default.js
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Half-expand is the default rounding mode
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
const units = {
|
||||
"day": [1976, 11, "M11", 19, 0, 0, 0, 0, 0, 0],
|
||||
"hour": [1976, 11, "M11", 18, 14, 0, 0, 0, 0, 0],
|
||||
"minute": [1976, 11, "M11", 18, 14, 24, 0, 0, 0, 0],
|
||||
"second": [1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0],
|
||||
"millisecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 0, 0],
|
||||
"microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 457, 0],
|
||||
"nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789]
|
||||
};
|
||||
|
||||
const expected = [1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0];
|
||||
|
||||
Object.entries(units).forEach(([unit, expected]) => {
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit: unit }),
|
||||
...expected,
|
||||
`halfExpand is the default (smallest unit = ${unit}, rounding mode absent)`
|
||||
);
|
||||
});
|
29
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-trunc-basic.js
vendored
Normal file
29
test/built-ins/Temporal/PlainDateTime/prototype/round/roundingmode-trunc-basic.js
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Basic checks for truncation rounding mode
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
const incrementOneFloor = {
|
||||
"day": [1976, 11, "M11", 18, 0, 0, 0, 0, 0, 0],
|
||||
"hour": [1976, 11, "M11", 18, 14, 0, 0, 0, 0, 0],
|
||||
"minute": [1976, 11, "M11", 18, 14, 23, 0, 0, 0, 0],
|
||||
"second": [1976, 11, "M11", 18, 14, 23, 30, 0, 0, 0],
|
||||
"millisecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 0, 0],
|
||||
"microsecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 0],
|
||||
"nanosecond": [1976, 11, "M11", 18, 14, 23, 30, 123, 456, 789]
|
||||
};
|
||||
|
||||
Object.entries(incrementOneFloor).forEach(([smallestUnit, expected]) => {
|
||||
TemporalHelpers.assertPlainDateTime(
|
||||
dt.round({ smallestUnit, roundingMode: "trunc" }),
|
||||
...expected,
|
||||
`truncates to ${smallestUnit}`
|
||||
);
|
||||
});
|
|
@ -0,0 +1,16 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Throw if smallest unit is missing from argument
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
assert.throws(
|
||||
RangeError,
|
||||
() => dt.round({ roundingIncrement: 1, roundingMode: "ceil" }),
|
||||
"throws without required smallestUnit parameter"
|
||||
);
|
16
test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object.js
vendored
Normal file
16
test/built-ins/Temporal/PlainDateTime/prototype/round/throws-argument-object.js
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Throw if argument is an empty plain object
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
assert.throws(
|
||||
RangeError,
|
||||
() => dt.round({}),
|
||||
"throws on empty object"
|
||||
);
|
|
@ -0,0 +1,16 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Throw if no arguments at all are given
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
assert.throws(
|
||||
TypeError,
|
||||
() => dt.round(),
|
||||
"throws without any parameters"
|
||||
);
|
|
@ -0,0 +1,16 @@
|
|||
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.plaindatetime.prototype.round
|
||||
description: Throw if sole argument is undefined
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const dt = new Temporal.PlainDateTime(1976, 11, 18, 14, 23, 30, 123, 456, 789);
|
||||
|
||||
assert.throws(
|
||||
TypeError,
|
||||
() => dt.round(undefined),
|
||||
"throws without undefined as sole parameter"
|
||||
);
|
Loading…
Reference in New Issue