// 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 operator []=(int index, E value)
/// Sets the value at the given index in the list to value.
/// @description Checks that needed element is correctly assigned in extendable
/// lists.
/// @author kaigorodov

library operator_subscripted_assignment_A01_t02;

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

test(List<E> create<E>([int length, E fill])) {
  List from(List content) {
    List res = create(content.length, 0);
    res.setRange(0, content.length, content);
    return res;
  }
  
  List a = from([0]);
  a[0] = 1;
  Expect.identical(1, a[0]);
  a[0] = null;
  Expect.isTrue(null == a[0]);
  a[0] = a;
  Expect.identical(a, a[0]);

  a = from([1, 2, 3]);
  a[1] = null;
  Expect.listEquals([1, null, 3], a);
  a[2] = null;
  Expect.listEquals([1, null, null], a);
  a[0] = null;
  Expect.listEquals([null, null, null], a);
  a[1] = 100500;
  Expect.listEquals([null, 100500, null], a);
}
