// 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 checkValidRange(int start, int end, int length,
/// [String startName, String endName, String message])
/// ...
/// The startName and endName defaults to "start" and "end", respectively.
/// @description Checks that startName and endName defaults to "start" and "end",
/// respectively.
/// @issue 28116
/// @author sgrekhov@unipro.ru

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

check(int start, int end, int length) {
  try {
    RangeError.checkValidRange(start, end, length);
    Expect.fail("RangeError expected");
  } on RangeError catch (e) {
    if (start < 0 || start > length) {
      Expect.equals("start", e.name);
    } else {
      Expect.equals("end", e.name);
    }
  } catch (e) {
    Expect.fail("Wrong exception type $e");
  }
}

main() {
  // start value breaks the range
  check(-1, 2, 5);

  // end value breaks the range
  check(0, 20, 5);
}
