// 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-add-calendar-numbering-system

let invalidNumberingSystem = [
  "invalid",
  "abce",
  "finance",
  "native",
  "traditio",
];

// https://tc39.github.io/ecma402/#table-numbering-system-digits
let validNumberingSystem= [
  "arab",
  "arabext",
  "bali",
  "beng",
  "deva",
  "fullwide",
  "gujr",
  "guru",
  "hanidec",
  "khmr",
  "knda",
  "laoo",
  "latn",
  "limb",
  "mlym",
  "mong",
  "mymr",
  "orya",
  "tamldec",
  "telu",
  "thai",
  "tibt",
];

let locales = [
  "en",
  "ar",
];


invalidNumberingSystem.forEach(function(numberingSystem) {
  assertThrows(
      () => new Intl.NumberFormat(["en"], {numberingSystem}),
      RangeError);
}
);

let value = 1234567.89;
validNumberingSystem.forEach(function(numberingSystem) {
  locales.forEach(function(base) {
    let l = base + "-u-nu-" + numberingSystem;
    let nf = new Intl.NumberFormat([base], {numberingSystem});
    assertEquals(l, nf.resolvedOptions().locale);
    assertEquals(numberingSystem, nf.resolvedOptions().numberingSystem);

    // Test the formatting result is the same as passing in via u-nu-
    // in the locale.
    let nf2 = new Intl.NumberFormat([l]);
    assertEquals(nf2.format(value), nf.format(value));
  });
}
);
