out-of-range.js (3496B)
1 // |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally 2 // Copyright (C) 2023 Igalia, S.L. All rights reserved. 3 // This code is governed by the BSD license found in the LICENSE file. 4 5 /*--- 6 esid: sec-temporal.duration 7 description: Various arguments to the Duration constructor that are out of range 8 features: [Temporal] 9 ---*/ 10 11 // 2^32 = 4294967296 12 assert.throws(RangeError, () => new Temporal.Duration(4294967296), "years > max"); 13 assert.throws(RangeError, () => new Temporal.Duration(-4294967296), "years < min"); 14 assert.throws(RangeError, () => new Temporal.Duration(0, 4294967296), "months > max"); 15 assert.throws(RangeError, () => new Temporal.Duration(0, -4294967296), "months < min"); 16 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 4294967296), "weeks > max"); 17 assert.throws(RangeError, () => new Temporal.Duration(0, 0, -4294967296), "weeks < min"); 18 19 // ceil(max safe integer / 86400) = 104249991375 20 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 104249991375), "days > max"); 21 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 104249991374, 24), "hours balance into days > max"); 22 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, -104249991375), "days < min"); 23 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, -104249991374, -24), "hours balance into days < min"); 24 25 // ceil(max safe integer / 3600) = 2501999792984 26 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 2501999792984), "hours > max"); 27 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 2501999792983, 60), "minutes balance into hours > max"); 28 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, -2501999792984), "hours < min"); 29 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, -2501999792983, -60), "minutes balance into hours < min"); 30 31 // ceil(max safe integer / 60) = 150119987579017 32 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 150119987579017), "minutes > max"); 33 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 150119987579016, 60), "seconds balance into minutes > max"); 34 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, -150119987579017), "minutes < min"); 35 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, -150119987579016, -60), "seconds balance into minutes < min"); 36 37 // 2^53 = 9007199254740992 38 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 0, 9007199254740992), "seconds > max"); 39 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 0, 9007199254740991, 1000), "ms balance into seconds > max"); 40 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 0, 9007199254740991, 999, 1000), "µs balance into seconds > max"); 41 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 0, 9007199254740991, 999, 999, 1000), "ns balance into seconds > max"); 42 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 0, -9007199254740992), "seconds < min"); 43 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 0, -9007199254740991, -1000), "ms balance into seconds < min"); 44 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 0, -9007199254740991, -999, -1000), "µs balance into seconds < min"); 45 assert.throws(RangeError, () => new Temporal.Duration(0, 0, 0, 0, 0, 0, -9007199254740991, -999, -999, -1000), "ns balance into seconds < min"); 46 47 reportCompare(0, 0);