// Copyright 2022 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-number-format-v3

// Check the rounding behavior.
// Based on https://tc39.es/proposal-intl-numberformat-v3/out/numberformat/diff.html#table-intl-rounding-modes
let inputs = [-1.5, 0.4, 0.5, 0.6, 1.5];
let expectations = {
  "ceil":       ["-1", "1", "1", "1", "2"],
  "floor":      ["-2", "0", "0", "0", "1"],
  "expand":     ["-2", "1", "1", "1", "2"],
  "trunc":      ["-1", "0", "0", "0", "1"],
  "halfCeil":   ["-1", "0", "1", "1", "2"],
  "halfFloor":  ["-2", "0", "0", "1", "1"],
  "halfExpand": ["-2", "0", "1", "1", "2"],
  "halfTrunc":  ["-1", "0", "0", "1", "1"],
  "halfEven":   ["-2", "0", "0", "1", "2"],
};
Object.keys(expectations).forEach(function(roundingMode) {
  let exp = expectations[roundingMode];
  let idx = 0;
  let nf = new Intl.NumberFormat("en", {roundingMode, maximumFractionDigits: 0});
  assertEquals(roundingMode, nf.resolvedOptions().roundingMode);
  inputs.forEach(function(input) {
    let msg = "input: " + input + " with roundingMode: " + roundingMode;
    assertEquals(exp[idx++], nf.format(input), msg);
  })
});
