// 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 bool remove(Object value)
/// Removes value from the list. Returns true if value was in the list. Returns
/// false otherwise. The method has no effect if value value was not in the list.
/// @author kaigorodov

library remove_A01_t01;

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

test(List<E> create<E>([int length, E fill])) {

  check(List a0, Object value, bool expected) {
    List a = create();
    a.addAll(a0);
  
    bool r = a.remove(value);
    Expect.isTrue(r is bool, "remove returned: ${r.runtimeType} ${r}, not bool");
    if (r) {
      Expect.isTrue(expected);
      Expect.equals(a0.length-1, a.length);
    } else {
      Expect.isFalse(expected);
      Expect.equals(a0.length, a.length);
    }
  }

  check([], 1, false);
  check([1], 1, true);
  check(new List.from([]), true, false);
  List a = new List.empty(growable: true);
  check(a, 2, false);
  a.add(2);
  check(a, 2, true);
}
