// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// @assertion int parse(String source, {int radix, int onError(String source)})
/// Parse source as a, possibly signed, integer literal and return its value.
///
/// The source must be a non-empty sequence of base-radix digits, optionally
/// prefixed with a minus or plus sign ('-' or '+').
///
/// The radix must be in the range 2..36. The digits used are first the decimal
/// digits 0..9, and then the letters 'a'..'z' with values 10 through 35. Also
/// accepts upper-case letters with the same values as the lower-case ones.
/// ...
/// @description Checks that radix argument must be in the range 2..36
/// @author sgrekhov@unipro.ru

import "../../../Utils/expect.dart";

main() {
  Expect.throws(() {int.parse("1", radix: 1);});
  Expect.throws(() {int.parse("1", radix: 0);});
  Expect.throws(() {int.parse("1", radix: -1);});
  Expect.throws(() {int.parse("1", radix: -20);});
  Expect.throws(() {int.parse("1", radix: 37);});
  Expect.throws(() {int.parse("1", radix: -37);});
  Expect.throws(() {int.parse("1", radix: 9007199254740991);});

  for (int i = 2; i <= 36; i++) {
    int.parse("1", radix: i);
  }
}
