// Copyright 2019 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-numberformat-unified

// Test default.
let nf = new Intl.NumberFormat();
assertEquals("auto", nf.resolvedOptions().signDisplay);

nf = new Intl.NumberFormat("en");
assertEquals("auto", nf.resolvedOptions().signDisplay);

const testData = [
    ["auto",        "-123",  "-0",  "0",  "123"],
    ["always",      "-123",  "-0", "+0", "+123"],
    ["never",       "123",   "0",  "0",  "123"],
    ["exceptZero",  "-123",  "-0",  "0",  "+123"],
];

for (const [signDisplay, neg, negZero, zero, pos] of testData) {
  nf = new Intl.NumberFormat("en", {signDisplay});
  assertEquals(signDisplay, nf.resolvedOptions().signDisplay);
  assertEquals(neg, nf.format(-123));
  assertEquals(negZero, nf.format(-0));
  assertEquals(zero, nf.format(0));
  assertEquals(pos, nf.format(123));
}
