format-en.js 24.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --harmony-intl-relative-time-format

// The following test are not part of the comformance. Just some output in
// English to verify the format does return something reasonable for English.
// It may be changed when we update the CLDR data.
// NOTE: These are UNSPECIFIED behavior in
// http://tc39.github.io/proposal-intl-relative-time/

let longAuto = new Intl.RelativeTimeFormat(
    "en", {style: "long", localeMatcher: 'lookup', numeric: 'auto'});

16 17 18
assertEquals('3 seconds ago', longAuto.format(-3, 'second'));
assertEquals('2 seconds ago', longAuto.format(-2, 'second'));
assertEquals('1 second ago', longAuto.format(-1, 'second'));
19 20
assertEquals('now', longAuto.format(0, 'second'));
assertEquals('now', longAuto.format(-0, 'second'));
21 22
assertEquals('in 1 second', longAuto.format(1, 'second'));
assertEquals('in 2 seconds', longAuto.format(2, 'second'));
23 24
assertEquals('in 345 seconds', longAuto.format(345, 'second'));

25 26 27 28 29 30 31
assertEquals('3 minutes ago', longAuto.format(-3, 'minute'));
assertEquals('2 minutes ago', longAuto.format(-2, 'minute'));
assertEquals('1 minute ago', longAuto.format(-1, 'minute'));
assertEquals('in 0 minutes', longAuto.format(0, 'minute'));
assertEquals('0 minutes ago', longAuto.format(-0, 'minute'));
assertEquals('in 1 minute', longAuto.format(1, 'minute'));
assertEquals('in 2 minutes', longAuto.format(2, 'minute'));
32 33
assertEquals('in 345 minutes', longAuto.format(345, 'minute'));

34 35 36 37 38 39 40
assertEquals('3 hours ago', longAuto.format(-3, 'hour'));
assertEquals('2 hours ago', longAuto.format(-2, 'hour'));
assertEquals('1 hour ago', longAuto.format(-1, 'hour'));
assertEquals('in 0 hours', longAuto.format(0, 'hour'));
assertEquals('0 hours ago', longAuto.format(-0, 'hour'));
assertEquals('in 1 hour', longAuto.format(1, 'hour'));
assertEquals('in 2 hours', longAuto.format(2, 'hour'));
41 42
assertEquals('in 345 hours', longAuto.format(345, 'hour'));

43 44
assertEquals('3 days ago', longAuto.format(-3, 'day'));
assertEquals('2 days ago', longAuto.format(-2, 'day'));
45 46 47 48
assertEquals('yesterday', longAuto.format(-1, 'day'));
assertEquals('today', longAuto.format(0, 'day'));
assertEquals('today', longAuto.format(-0, 'day'));
assertEquals('tomorrow', longAuto.format(1, 'day'));
49
assertEquals('in 2 days', longAuto.format(2, 'day'));
50 51
assertEquals('in 345 days', longAuto.format(345, 'day'));

52 53
assertEquals('3 weeks ago', longAuto.format(-3, 'week'));
assertEquals('2 weeks ago', longAuto.format(-2, 'week'));
54 55 56 57
assertEquals('last week', longAuto.format(-1, 'week'));
assertEquals('this week', longAuto.format(0, 'week'));
assertEquals('this week', longAuto.format(-0, 'week'));
assertEquals('next week', longAuto.format(1, 'week'));
58
assertEquals('in 2 weeks', longAuto.format(2, 'week'));
59 60
assertEquals('in 345 weeks', longAuto.format(345, 'week'));

61 62
assertEquals('3 months ago', longAuto.format(-3, 'month'));
assertEquals('2 months ago', longAuto.format(-2, 'month'));
63 64 65 66
assertEquals('last month', longAuto.format(-1, 'month'));
assertEquals('this month', longAuto.format(0, 'month'));
assertEquals('this month', longAuto.format(-0, 'month'));
assertEquals('next month', longAuto.format(1, 'month'));
67
assertEquals('in 2 months', longAuto.format(2, 'month'));
68 69
assertEquals('in 345 months', longAuto.format(345, 'month'));

70 71
assertEquals('3 quarters ago', longAuto.format(-3, 'quarter'));
assertEquals('2 quarters ago', longAuto.format(-2, 'quarter'));
72 73 74 75
assertEquals('last quarter', longAuto.format(-1, 'quarter'));
assertEquals('this quarter', longAuto.format(0, 'quarter'));
assertEquals('this quarter', longAuto.format(-0, 'quarter'));
assertEquals('next quarter', longAuto.format(1, 'quarter'));
76
assertEquals('in 2 quarters', longAuto.format(2, 'quarter'));
77 78
assertEquals('in 345 quarters', longAuto.format(345, 'quarter'));

79 80
assertEquals('3 years ago', longAuto.format(-3, 'year'));
assertEquals('2 years ago', longAuto.format(-2, 'year'));
81 82 83 84
assertEquals('last year', longAuto.format(-1, 'year'));
assertEquals('this year', longAuto.format(0, 'year'));
assertEquals('this year', longAuto.format(-0, 'year'));
assertEquals('next year', longAuto.format(1, 'year'));
85
assertEquals('in 2 years', longAuto.format(2, 'year'));
86 87 88 89 90
assertEquals('in 345 years', longAuto.format(345, 'year'));

let shortAuto = new Intl.RelativeTimeFormat(
    "en", {style: "short", localeMatcher: 'lookup', numeric: 'auto'});

91 92 93
assertEquals('3 sec. ago', shortAuto.format(-3, 'second'));
assertEquals('2 sec. ago', shortAuto.format(-2, 'second'));
assertEquals('1 sec. ago', shortAuto.format(-1, 'second'));
94 95
assertEquals('now', shortAuto.format(0, 'second'));
assertEquals('now', shortAuto.format(-0, 'second'));
96 97
assertEquals('in 1 sec.', shortAuto.format(1, 'second'));
assertEquals('in 2 sec.', shortAuto.format(2, 'second'));
98 99
assertEquals('in 345 sec.', shortAuto.format(345, 'second'));

100 101 102 103 104 105 106
assertEquals('3 min. ago', shortAuto.format(-3, 'minute'));
assertEquals('2 min. ago', shortAuto.format(-2, 'minute'));
assertEquals('1 min. ago', shortAuto.format(-1, 'minute'));
assertEquals('in 0 min.', shortAuto.format(0, 'minute'));
assertEquals('0 min. ago', shortAuto.format(-0, 'minute'));
assertEquals('in 1 min.', shortAuto.format(1, 'minute'));
assertEquals('in 2 min.', shortAuto.format(2, 'minute'));
107 108
assertEquals('in 345 min.', shortAuto.format(345, 'minute'));

109 110 111 112 113 114 115
assertEquals('3 hr. ago', shortAuto.format(-3, 'hour'));
assertEquals('2 hr. ago', shortAuto.format(-2, 'hour'));
assertEquals('1 hr. ago', shortAuto.format(-1, 'hour'));
assertEquals('in 0 hr.', shortAuto.format(0, 'hour'));
assertEquals('0 hr. ago', shortAuto.format(-0, 'hour'));
assertEquals('in 1 hr.', shortAuto.format(1, 'hour'));
assertEquals('in 2 hr.', shortAuto.format(2, 'hour'));
116 117
assertEquals('in 345 hr.', shortAuto.format(345, 'hour'));

118 119
assertEquals('3 days ago', shortAuto.format(-3, 'day'));
assertEquals('2 days ago', shortAuto.format(-2, 'day'));
120 121 122 123
assertEquals('yesterday', shortAuto.format(-1, 'day'));
assertEquals('today', shortAuto.format(0, 'day'));
assertEquals('today', shortAuto.format(-0, 'day'));
assertEquals('tomorrow', shortAuto.format(1, 'day'));
124
assertEquals('in 2 days', shortAuto.format(2, 'day'));
125 126
assertEquals('in 345 days', shortAuto.format(345, 'day'));

127 128
assertEquals('3 wk. ago', shortAuto.format(-3, 'week'));
assertEquals('2 wk. ago', shortAuto.format(-2, 'week'));
129 130 131 132
assertEquals('last wk.', shortAuto.format(-1, 'week'));
assertEquals('this wk.', shortAuto.format(0, 'week'));
assertEquals('this wk.', shortAuto.format(-0, 'week'));
assertEquals('next wk.', shortAuto.format(1, 'week'));
133
assertEquals('in 2 wk.', shortAuto.format(2, 'week'));
134 135
assertEquals('in 345 wk.', shortAuto.format(345, 'week'));

136 137
assertEquals('3 mo. ago', shortAuto.format(-3, 'month'));
assertEquals('2 mo. ago', shortAuto.format(-2, 'month'));
138 139 140 141
assertEquals('last mo.', shortAuto.format(-1, 'month'));
assertEquals('this mo.', shortAuto.format(0, 'month'));
assertEquals('this mo.', shortAuto.format(-0, 'month'));
assertEquals('next mo.', shortAuto.format(1, 'month'));
142
assertEquals('in 2 mo.', shortAuto.format(2, 'month'));
143 144
assertEquals('in 345 mo.', shortAuto.format(345, 'month'));

145 146
assertEquals('3 qtrs. ago', shortAuto.format(-3, 'quarter'));
assertEquals('2 qtrs. ago', shortAuto.format(-2, 'quarter'));
147 148 149 150
assertEquals('last qtr.', shortAuto.format(-1, 'quarter'));
assertEquals('this qtr.', shortAuto.format(0, 'quarter'));
assertEquals('this qtr.', shortAuto.format(-0, 'quarter'));
assertEquals('next qtr.', shortAuto.format(1, 'quarter'));
151
assertEquals('in 2 qtrs.', shortAuto.format(2, 'quarter'));
152 153
assertEquals('in 345 qtrs.', shortAuto.format(345, 'quarter'));

154 155
assertEquals('3 yr. ago', shortAuto.format(-3, 'year'));
assertEquals('2 yr. ago', shortAuto.format(-2, 'year'));
156 157 158 159
assertEquals('last yr.', shortAuto.format(-1, 'year'));
assertEquals('this yr.', shortAuto.format(0, 'year'));
assertEquals('this yr.', shortAuto.format(-0, 'year'));
assertEquals('next yr.', shortAuto.format(1, 'year'));
160
assertEquals('in 2 yr.', shortAuto.format(2, 'year'));
161 162 163 164 165 166
assertEquals('in 345 yr.', shortAuto.format(345, 'year'));

// Somehow in the 'en' locale, there are no valeu for -narrow
let narrowAuto = new Intl.RelativeTimeFormat(
    "en", {style: "narrow", localeMatcher: 'lookup', numeric: 'auto'});

167 168 169
assertEquals('3 sec. ago', narrowAuto.format(-3, 'second'));
assertEquals('2 sec. ago', narrowAuto.format(-2, 'second'));
assertEquals('1 sec. ago', narrowAuto.format(-1, 'second'));
170 171
assertEquals('now', narrowAuto.format(0, 'second'));
assertEquals('now', narrowAuto.format(-0, 'second'));
172 173
assertEquals('in 1 sec.', narrowAuto.format(1, 'second'));
assertEquals('in 2 sec.', narrowAuto.format(2, 'second'));
174 175
assertEquals('in 345 sec.', narrowAuto.format(345, 'second'));

176 177 178 179 180 181 182
assertEquals('3 min. ago', narrowAuto.format(-3, 'minute'));
assertEquals('2 min. ago', narrowAuto.format(-2, 'minute'));
assertEquals('1 min. ago', narrowAuto.format(-1, 'minute'));
assertEquals('in 0 min.', narrowAuto.format(0, 'minute'));
assertEquals('0 min. ago', narrowAuto.format(-0, 'minute'));
assertEquals('in 1 min.', narrowAuto.format(1, 'minute'));
assertEquals('in 2 min.', narrowAuto.format(2, 'minute'));
183 184
assertEquals('in 345 min.', narrowAuto.format(345, 'minute'));

185 186 187 188 189 190 191
assertEquals('3 hr. ago', narrowAuto.format(-3, 'hour'));
assertEquals('2 hr. ago', narrowAuto.format(-2, 'hour'));
assertEquals('1 hr. ago', narrowAuto.format(-1, 'hour'));
assertEquals('in 0 hr.', narrowAuto.format(0, 'hour'));
assertEquals('0 hr. ago', narrowAuto.format(-0, 'hour'));
assertEquals('in 1 hr.', narrowAuto.format(1, 'hour'));
assertEquals('in 2 hr.', narrowAuto.format(2, 'hour'));
192 193
assertEquals('in 345 hr.', narrowAuto.format(345, 'hour'));

194 195
assertEquals('3 days ago', narrowAuto.format(-3, 'day'));
assertEquals('2 days ago', narrowAuto.format(-2, 'day'));
196 197 198 199
assertEquals('yesterday', narrowAuto.format(-1, 'day'));
assertEquals('today', narrowAuto.format(0, 'day'));
assertEquals('today', narrowAuto.format(-0, 'day'));
assertEquals('tomorrow', narrowAuto.format(1, 'day'));
200
assertEquals('in 2 days', narrowAuto.format(2, 'day'));
201 202
assertEquals('in 345 days', narrowAuto.format(345, 'day'));

203 204
assertEquals('3 wk. ago', narrowAuto.format(-3, 'week'));
assertEquals('2 wk. ago', narrowAuto.format(-2, 'week'));
205 206 207 208
assertEquals('last wk.', narrowAuto.format(-1, 'week'));
assertEquals('this wk.', narrowAuto.format(0, 'week'));
assertEquals('this wk.', narrowAuto.format(-0, 'week'));
assertEquals('next wk.', narrowAuto.format(1, 'week'));
209
assertEquals('in 2 wk.', narrowAuto.format(2, 'week'));
210 211
assertEquals('in 345 wk.', narrowAuto.format(345, 'week'));

212 213
assertEquals('3 mo. ago', narrowAuto.format(-3, 'month'));
assertEquals('2 mo. ago', narrowAuto.format(-2, 'month'));
214 215 216 217
assertEquals('last mo.', narrowAuto.format(-1, 'month'));
assertEquals('this mo.', narrowAuto.format(0, 'month'));
assertEquals('this mo.', narrowAuto.format(-0, 'month'));
assertEquals('next mo.', narrowAuto.format(1, 'month'));
218
assertEquals('in 2 mo.', narrowAuto.format(2, 'month'));
219 220
assertEquals('in 345 mo.', narrowAuto.format(345, 'month'));

221 222
assertEquals('3 qtrs. ago', narrowAuto.format(-3, 'quarter'));
assertEquals('2 qtrs. ago', narrowAuto.format(-2, 'quarter'));
223 224 225 226
assertEquals('last qtr.', narrowAuto.format(-1, 'quarter'));
assertEquals('this qtr.', narrowAuto.format(0, 'quarter'));
assertEquals('this qtr.', narrowAuto.format(-0, 'quarter'));
assertEquals('next qtr.', narrowAuto.format(1, 'quarter'));
227
assertEquals('in 2 qtrs.', narrowAuto.format(2, 'quarter'));
228 229
assertEquals('in 345 qtrs.', narrowAuto.format(345, 'quarter'));

230 231
assertEquals('3 yr. ago', narrowAuto.format(-3, 'year'));
assertEquals('2 yr. ago', narrowAuto.format(-2, 'year'));
232 233 234 235
assertEquals('last yr.', narrowAuto.format(-1, 'year'));
assertEquals('this yr.', narrowAuto.format(0, 'year'));
assertEquals('this yr.', narrowAuto.format(-0, 'year'));
assertEquals('next yr.', narrowAuto.format(1, 'year'));
236
assertEquals('in 2 yr.', narrowAuto.format(2, 'year'));
237 238 239 240 241
assertEquals('in 345 yr.', narrowAuto.format(345, 'year'));

let longAlways = new Intl.RelativeTimeFormat(
    "en", {style: "long", localeMatcher: 'lookup', numeric: 'always'});

242 243 244 245 246 247 248
assertEquals('3 seconds ago', longAlways.format(-3, 'second'));
assertEquals('2 seconds ago', longAlways.format(-2, 'second'));
assertEquals('1 second ago', longAlways.format(-1, 'second'));
assertEquals('in 0 seconds', longAlways.format(0, 'second'));
assertEquals('0 seconds ago', longAlways.format(-0, 'second'));
assertEquals('in 1 second', longAlways.format(1, 'second'));
assertEquals('in 2 seconds', longAlways.format(2, 'second'));
249 250
assertEquals('in 345 seconds', longAlways.format(345, 'second'));

251 252 253 254 255 256 257
assertEquals('3 minutes ago', longAlways.format(-3, 'minute'));
assertEquals('2 minutes ago', longAlways.format(-2, 'minute'));
assertEquals('1 minute ago', longAlways.format(-1, 'minute'));
assertEquals('in 0 minutes', longAlways.format(0, 'minute'));
assertEquals('0 minutes ago', longAlways.format(-0, 'minute'));
assertEquals('in 1 minute', longAlways.format(1, 'minute'));
assertEquals('in 2 minutes', longAlways.format(2, 'minute'));
258 259
assertEquals('in 345 minutes', longAlways.format(345, 'minute'));

260 261 262 263 264 265 266
assertEquals('3 hours ago', longAlways.format(-3, 'hour'));
assertEquals('2 hours ago', longAlways.format(-2, 'hour'));
assertEquals('1 hour ago', longAlways.format(-1, 'hour'));
assertEquals('in 0 hours', longAlways.format(0, 'hour'));
assertEquals('0 hours ago', longAlways.format(-0, 'hour'));
assertEquals('in 1 hour', longAlways.format(1, 'hour'));
assertEquals('in 2 hours', longAlways.format(2, 'hour'));
267 268
assertEquals('in 345 hours', longAlways.format(345, 'hour'));

269 270 271 272 273 274 275
assertEquals('3 days ago', longAlways.format(-3, 'day'));
assertEquals('2 days ago', longAlways.format(-2, 'day'));
assertEquals('1 day ago', longAlways.format(-1, 'day'));
assertEquals('in 0 days', longAlways.format(0, 'day'));
assertEquals('0 days ago', longAlways.format(-0, 'day'));
assertEquals('in 1 day', longAlways.format(1, 'day'));
assertEquals('in 2 days', longAlways.format(2, 'day'));
276 277
assertEquals('in 345 days', longAlways.format(345, 'day'));

278 279 280 281 282 283 284
assertEquals('3 weeks ago', longAlways.format(-3, 'week'));
assertEquals('2 weeks ago', longAlways.format(-2, 'week'));
assertEquals('1 week ago', longAlways.format(-1, 'week'));
assertEquals('in 0 weeks', longAlways.format(0, 'week'));
assertEquals('0 weeks ago', longAlways.format(-0, 'week'));
assertEquals('in 1 week', longAlways.format(1, 'week'));
assertEquals('in 2 weeks', longAlways.format(2, 'week'));
285 286
assertEquals('in 345 weeks', longAlways.format(345, 'week'));

287 288 289 290 291 292 293
assertEquals('3 months ago', longAlways.format(-3, 'month'));
assertEquals('2 months ago', longAlways.format(-2, 'month'));
assertEquals('1 month ago', longAlways.format(-1, 'month'));
assertEquals('in 0 months', longAlways.format(0, 'month'));
assertEquals('0 months ago', longAlways.format(-0, 'month'));
assertEquals('in 1 month', longAlways.format(1, 'month'));
assertEquals('in 2 months', longAlways.format(2, 'month'));
294 295
assertEquals('in 345 months', longAlways.format(345, 'month'));

296 297 298 299 300 301 302
assertEquals('3 quarters ago', longAlways.format(-3, 'quarter'));
assertEquals('2 quarters ago', longAlways.format(-2, 'quarter'));
assertEquals('1 quarter ago', longAlways.format(-1, 'quarter'));
assertEquals('in 0 quarters', longAlways.format(0, 'quarter'));
assertEquals('0 quarters ago', longAlways.format(-0, 'quarter'));
assertEquals('in 1 quarter', longAlways.format(1, 'quarter'));
assertEquals('in 2 quarters', longAlways.format(2, 'quarter'));
303 304
assertEquals('in 345 quarters', longAlways.format(345, 'quarter'));

305 306 307 308 309 310 311
assertEquals('3 years ago', longAlways.format(-3, 'year'));
assertEquals('2 years ago', longAlways.format(-2, 'year'));
assertEquals('1 year ago', longAlways.format(-1, 'year'));
assertEquals('in 0 years', longAlways.format(0, 'year'));
assertEquals('0 years ago', longAlways.format(-0, 'year'));
assertEquals('in 1 year', longAlways.format(1, 'year'));
assertEquals('in 2 years', longAlways.format(2, 'year'));
312 313 314 315 316
assertEquals('in 345 years', longAlways.format(345, 'year'));

let shortAlways = new Intl.RelativeTimeFormat(
    "en", {style: "short", localeMatcher: 'lookup', numeric: 'always'});

317 318 319 320 321 322 323
assertEquals('3 sec. ago', shortAlways.format(-3, 'second'));
assertEquals('2 sec. ago', shortAlways.format(-2, 'second'));
assertEquals('1 sec. ago', shortAlways.format(-1, 'second'));
assertEquals('in 0 sec.', shortAlways.format(0, 'second'));
assertEquals('0 sec. ago', shortAlways.format(-0, 'second'));
assertEquals('in 1 sec.', shortAlways.format(1, 'second'));
assertEquals('in 2 sec.', shortAlways.format(2, 'second'));
324 325
assertEquals('in 345 sec.', shortAlways.format(345, 'second'));

326 327 328 329 330 331 332
assertEquals('3 min. ago', shortAlways.format(-3, 'minute'));
assertEquals('2 min. ago', shortAlways.format(-2, 'minute'));
assertEquals('1 min. ago', shortAlways.format(-1, 'minute'));
assertEquals('in 0 min.', shortAlways.format(0, 'minute'));
assertEquals('0 min. ago', shortAlways.format(-0, 'minute'));
assertEquals('in 1 min.', shortAlways.format(1, 'minute'));
assertEquals('in 2 min.', shortAlways.format(2, 'minute'));
333 334
assertEquals('in 345 min.', shortAlways.format(345, 'minute'));

335 336 337 338 339 340 341
assertEquals('3 hr. ago', shortAlways.format(-3, 'hour'));
assertEquals('2 hr. ago', shortAlways.format(-2, 'hour'));
assertEquals('1 hr. ago', shortAlways.format(-1, 'hour'));
assertEquals('in 0 hr.', shortAlways.format(0, 'hour'));
assertEquals('0 hr. ago', shortAlways.format(-0, 'hour'));
assertEquals('in 1 hr.', shortAlways.format(1, 'hour'));
assertEquals('in 2 hr.', shortAlways.format(2, 'hour'));
342 343
assertEquals('in 345 hr.', shortAlways.format(345, 'hour'));

344 345 346 347 348 349 350
assertEquals('3 days ago', shortAlways.format(-3, 'day'));
assertEquals('2 days ago', shortAlways.format(-2, 'day'));
assertEquals('1 day ago', shortAlways.format(-1, 'day'));
assertEquals('in 0 days', shortAlways.format(0, 'day'));
assertEquals('0 days ago', shortAlways.format(-0, 'day'));
assertEquals('in 1 day', shortAlways.format(1, 'day'));
assertEquals('in 2 days', shortAlways.format(2, 'day'));
351 352
assertEquals('in 345 days', shortAlways.format(345, 'day'));

353 354 355 356 357 358 359
assertEquals('3 wk. ago', shortAlways.format(-3, 'week'));
assertEquals('2 wk. ago', shortAlways.format(-2, 'week'));
assertEquals('1 wk. ago', shortAlways.format(-1, 'week'));
assertEquals('in 0 wk.', shortAlways.format(0, 'week'));
assertEquals('0 wk. ago', shortAlways.format(-0, 'week'));
assertEquals('in 1 wk.', shortAlways.format(1, 'week'));
assertEquals('in 2 wk.', shortAlways.format(2, 'week'));
360 361
assertEquals('in 345 wk.', shortAlways.format(345, 'week'));

362 363 364 365 366 367 368
assertEquals('3 mo. ago', shortAlways.format(-3, 'month'));
assertEquals('2 mo. ago', shortAlways.format(-2, 'month'));
assertEquals('1 mo. ago', shortAlways.format(-1, 'month'));
assertEquals('in 0 mo.', shortAlways.format(0, 'month'));
assertEquals('0 mo. ago', shortAlways.format(-0, 'month'));
assertEquals('in 1 mo.', shortAlways.format(1, 'month'));
assertEquals('in 2 mo.', shortAlways.format(2, 'month'));
369 370
assertEquals('in 345 mo.', shortAlways.format(345, 'month'));

371 372 373 374
assertEquals('3 qtrs. ago', shortAlways.format(-3, 'quarter'));
assertEquals('2 qtrs. ago', shortAlways.format(-2, 'quarter'));
assertEquals('1 qtr. ago', shortAlways.format(-1, 'quarter'));
assertEquals('in 0 qtrs.', shortAlways.format(0, 'quarter'));
375
assertEquals('0 qtrs. ago', shortAlways.format(-0, 'quarter'));
376 377
assertEquals('in 1 qtr.', shortAlways.format(1, 'quarter'));
assertEquals('in 2 qtrs.', shortAlways.format(2, 'quarter'));
378 379
assertEquals('in 345 qtrs.', shortAlways.format(345, 'quarter'));

380 381 382 383 384 385 386
assertEquals('3 yr. ago', shortAlways.format(-3, 'year'));
assertEquals('2 yr. ago', shortAlways.format(-2, 'year'));
assertEquals('1 yr. ago', shortAlways.format(-1, 'year'));
assertEquals('in 0 yr.', shortAlways.format(0, 'year'));
assertEquals('0 yr. ago', shortAlways.format(-0, 'year'));
assertEquals('in 1 yr.', shortAlways.format(1, 'year'));
assertEquals('in 2 yr.', shortAlways.format(2, 'year'));
387 388 389 390 391 392
assertEquals('in 345 yr.', shortAlways.format(345, 'year'));

// Somehow in the 'en' locale, there are no valeu for -narrow
let narrowAlways = new Intl.RelativeTimeFormat(
    "en", {style: "narrow", localeMatcher: 'lookup', numeric: 'always'});

393 394 395 396 397 398 399
assertEquals('3 sec. ago', narrowAlways.format(-3, 'second'));
assertEquals('2 sec. ago', narrowAlways.format(-2, 'second'));
assertEquals('1 sec. ago', narrowAlways.format(-1, 'second'));
assertEquals('in 0 sec.', narrowAlways.format(0, 'second'));
assertEquals('0 sec. ago', narrowAlways.format(-0, 'second'));
assertEquals('in 1 sec.', narrowAlways.format(1, 'second'));
assertEquals('in 2 sec.', narrowAlways.format(2, 'second'));
400 401
assertEquals('in 345 sec.', narrowAlways.format(345, 'second'));

402 403 404 405 406 407 408
assertEquals('3 min. ago', narrowAlways.format(-3, 'minute'));
assertEquals('2 min. ago', narrowAlways.format(-2, 'minute'));
assertEquals('1 min. ago', narrowAlways.format(-1, 'minute'));
assertEquals('in 0 min.', narrowAlways.format(0, 'minute'));
assertEquals('0 min. ago', narrowAlways.format(-0, 'minute'));
assertEquals('in 1 min.', narrowAlways.format(1, 'minute'));
assertEquals('in 2 min.', narrowAlways.format(2, 'minute'));
409 410
assertEquals('in 345 min.', narrowAlways.format(345, 'minute'));

411 412 413 414 415 416 417
assertEquals('3 hr. ago', narrowAlways.format(-3, 'hour'));
assertEquals('2 hr. ago', narrowAlways.format(-2, 'hour'));
assertEquals('1 hr. ago', narrowAlways.format(-1, 'hour'));
assertEquals('in 0 hr.', narrowAlways.format(0, 'hour'));
assertEquals('0 hr. ago', narrowAlways.format(-0, 'hour'));
assertEquals('in 1 hr.', narrowAlways.format(1, 'hour'));
assertEquals('in 2 hr.', narrowAlways.format(2, 'hour'));
418 419
assertEquals('in 345 hr.', narrowAlways.format(345, 'hour'));

420 421 422 423 424 425 426
assertEquals('3 days ago', narrowAlways.format(-3, 'day'));
assertEquals('2 days ago', narrowAlways.format(-2, 'day'));
assertEquals('1 day ago', narrowAlways.format(-1, 'day'));
assertEquals('in 0 days', narrowAlways.format(0, 'day'));
assertEquals('0 days ago', narrowAlways.format(-0, 'day'));
assertEquals('in 1 day', narrowAlways.format(1, 'day'));
assertEquals('in 2 days', narrowAlways.format(2, 'day'));
427 428
assertEquals('in 345 days', narrowAlways.format(345, 'day'));

429 430 431 432 433 434 435
assertEquals('3 wk. ago', narrowAlways.format(-3, 'week'));
assertEquals('2 wk. ago', narrowAlways.format(-2, 'week'));
assertEquals('1 wk. ago', narrowAlways.format(-1, 'week'));
assertEquals('in 0 wk.', narrowAlways.format(0, 'week'));
assertEquals('0 wk. ago', narrowAlways.format(-0, 'week'));
assertEquals('in 1 wk.', narrowAlways.format(1, 'week'));
assertEquals('in 2 wk.', narrowAlways.format(2, 'week'));
436 437
assertEquals('in 345 wk.', narrowAlways.format(345, 'week'));

438 439 440 441 442 443 444
assertEquals('3 mo. ago', narrowAlways.format(-3, 'month'));
assertEquals('2 mo. ago', narrowAlways.format(-2, 'month'));
assertEquals('1 mo. ago', narrowAlways.format(-1, 'month'));
assertEquals('in 0 mo.', narrowAlways.format(0, 'month'));
assertEquals('0 mo. ago', narrowAlways.format(-0, 'month'));
assertEquals('in 1 mo.', narrowAlways.format(1, 'month'));
assertEquals('in 2 mo.', narrowAlways.format(2, 'month'));
445 446
assertEquals('in 345 mo.', narrowAlways.format(345, 'month'));

447 448 449 450
assertEquals('3 qtrs. ago', narrowAlways.format(-3, 'quarter'));
assertEquals('2 qtrs. ago', narrowAlways.format(-2, 'quarter'));
assertEquals('1 qtr. ago', narrowAlways.format(-1, 'quarter'));
assertEquals('in 0 qtrs.', narrowAlways.format(0, 'quarter'));
451
assertEquals('0 qtrs. ago', narrowAlways.format(-0, 'quarter'));
452 453
assertEquals('in 1 qtr.', narrowAlways.format(1, 'quarter'));
assertEquals('in 2 qtrs.', narrowAlways.format(2, 'quarter'));
454 455
assertEquals('in 345 qtrs.', narrowAlways.format(345, 'quarter'));

456 457 458 459 460 461 462
assertEquals('3 yr. ago', narrowAlways.format(-3, 'year'));
assertEquals('2 yr. ago', narrowAlways.format(-2, 'year'));
assertEquals('1 yr. ago', narrowAlways.format(-1, 'year'));
assertEquals('in 0 yr.', narrowAlways.format(0, 'year'));
assertEquals('0 yr. ago', narrowAlways.format(-0, 'year'));
assertEquals('in 1 yr.', narrowAlways.format(1, 'year'));
assertEquals('in 2 yr.', narrowAlways.format(2, 'year'));
463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483
assertEquals('in 345 yr.', narrowAlways.format(345, 'year'));

var styleNumericCombinations = [
    longAuto, shortAuto, narrowAuto, longAlways,
    shortAlways, narrowAlways ];
var validUnits = [
    'second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'];

// Test these all throw RangeError
for (var i = 0; i < styleNumericCombinations.length; i++) {
  for (var j = 0; j < validUnits.length; j++) {
    assertThrows(() => styleNumericCombinations[i].format(NaN, validUnits[j]),
        RangeError);
    assertThrows(() => styleNumericCombinations[i].format(NaN, validUnits[j] + 's'),
        RangeError);
    assertThrows(() => styleNumericCombinations[i].format(NaN, validUnits[j]),
        RangeError);
    assertThrows(() => styleNumericCombinations[i].format(NaN, validUnits[j] + 's'),
        RangeError);
  }
}