// 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})
/// 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);
  }
}
