// 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.

/**
 * @assertion abstract void setRange(int start, int end, Iterable<E> iterable,
 * [int skipCount = 0])
 * It is an error if start.. end is not a valid range pointing into the this.
 * @description Checks that RangeError is thrown if there is lack of space in
 * dst.
 * @author iefremov
 */
library setRange_A02_t01;

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

checkList(dst, dstOffset, count, src) {
  Expect.throws(() {dst.setRange(dstOffset, dstOffset+count, src, 0);},
      (e) => e is RangeError);
}

test(List<E> create<E>([int length, E fill])) {
  void check(int dstSize, int srcSize, int dstOffset, int count) {
    List src = create(srcSize, 0);
    List dst = create(dstSize, 0);
    checkList(dst, dstOffset, count, src);

    src = create();
    src.length = srcSize;
    dst = create();
    dst.length = dstSize;
    checkList(dst, dstOffset, count, src);
  }

  check(0, 1, 0, 1);
  check(41, 42, 0, 42);
  check(2, 2, 1, 2);
  check(10, 10, 9, 10);    
}
