From c911f7188821443d5dcc053f8411e582f1a10515 Mon Sep 17 00:00:00 2001 From: Kevin Gibbons Date: Sun, 27 Sep 2020 17:39:04 -0700 Subject: [PATCH] Coverage: Date arithmetic is floating point --- .../built-ins/Date/UTC/fp-evaluation-order.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 test/built-ins/Date/UTC/fp-evaluation-order.js diff --git a/test/built-ins/Date/UTC/fp-evaluation-order.js b/test/built-ins/Date/UTC/fp-evaluation-order.js new file mode 100644 index 0000000000..0207f96105 --- /dev/null +++ b/test/built-ins/Date/UTC/fp-evaluation-order.js @@ -0,0 +1,20 @@ +// Copyright (C) 2020 Kevin Gibbons. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-date.utc +description: arithmetic in Date is done on floating-point numbers +info: | + [...] + Return TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))). + + #sec-maketime + + Let _t_ be ((_h_ `*` msPerHour `+` _m_ `*` msPerMinute) `+` _s_ `*` msPerSecond) `+` _milli_, performing the arithmetic according to IEEE 754-2019 rules (that is, as if using the ECMAScript operators `*` and `+`). + + #sec-makedate + + Return day × msPerDay + time. +---*/ + +assert.sameValue(Date.UTC(1970, 0, 1, 80063993375, 29, 1, -288230376151711740), 29312, 'order of operations / precision in MakeTime'); +assert.sameValue(Date.UTC(1970, 0, 213503982336, 0, 0, 0, -18446744073709552000), 34447360, 'precision in MakeDate');