// 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 set length(int newLength)
/// If [newLength] is greater than the current [length], entries are initialized
/// to [null].
/// @description Checks that entries are initialized to [null] 
/// if [newLength] is greater than the current [length].
/// @author vasya

library length_A02_t01;

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

void assertIsNull(List a, int oldLength) {
  for (int i = oldLength; i < a.length; i++) {
    Expect.isTrue(a[i] == null);
  }
}

test(List<E> create<E>([int length, E fill])) {
  List a = create();
  a.length = 100;
  assertIsNull(a, 0);
  a[99] = 100;

  a.length = 35674;
  assertIsNull(a, 100);

  a.length = 50000;
  assertIsNull(a, 35674);

  a = create();
  a.addAll([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]);
  var len = a.length;
  a.length = 1000;
  assertIsNull(a,len);
}
