// 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])
/// Copies the elements of iterable, skipping the skipCount first elements into
/// the range start to end exclusive of this.
/// If start equals end and represent a legal range, this method has no effect.
/// It is an error if start.. end is not a valid range pointing into the this.
/// It is an error if the iterable does not have enough elements after skipping
/// skipCount elements.
/// @description Checks trivial copying: 0 and 1 elements.
/// @author iefremov

library setRange_A01_t01;

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

class A{A(){}}

test(List<E> create<E>([int length, E fill])) {
  var a = new A();
  List dst = create(1, 0);
  dst.setRange(0, 1, [a], 0);
  Expect.isTrue(dst[0] == a);
  Expect.identical(dst[0], a);
  Expect.isTrue(dst.length == 1);

  //zero case
  dst = create(0, 0);
  dst.setRange(0, 0, []);
  Expect.isTrue(dst.length == 0);
}
