// Copyright (c) 2011, 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.

import "package:expect/expect.dart";

main() {
  var list = [];
  list.insertRange(-1, 0);
  Expect.listEquals([], list);
  list.insertRange(0, 0);
  Expect.listEquals([], list);
  list.insertRange(0, 0, 2);
  Expect.listEquals([], list);
  list.insertRange(0, 0, 2);
  Expect.listEquals([], list);

  expectIOORE(() { [1, 2].insertRange(-1, 1); });
  expectIOORE(() { [1, 2].insertRange(3, 1); });
  expectIAE(() { [1, 2].insertRange(0, -1); });

  list = []; list.insertRange(0, 3);
  Expect.listEquals([null, null, null], list);

  list = []; list.insertRange(0, 3, 1);
  Expect.listEquals([1, 1, 1], list);

  list = [1, 1]; list.insertRange(1, 1, 2);
  Expect.listEquals([1, 2, 1], list);

  list = [1, 1]; list.insertRange(2, 2, 9);
  Expect.listEquals([1, 1, 9, 9], list);

  list = [1, 1]; list.insertRange(2, 1);
  Expect.listEquals([1, 1, null], list);

  list = [1, 1]; list.insertRange(0, 3, 3);
  Expect.listEquals([3, 3, 3, 1, 1], list);
}

void expectIOORE(Function f) {
  Expect.throws(f, (e) => e is RangeError);
}

void expectIAE(Function f) {
  Expect.throws(f, (e) => e is ArgumentError);
}
