// 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 Completer<T> A way to produce Future objects and to complete
/// them later with a value or error.
/// @description Check methods and properties, inherited from Object
/// @author a.semenov@unipro.ru

import "../../core/Object/allTests.lib.dart" as object;
import "dart:async";

Object create() => new Completer();

List<Object> createEqual(int number) =>
  new List.filled(number, new Completer(), growable:false);

List<Object> createNonEqual(int number) =>
  new List.generate(number, (_) => new Completer(), growable:false);

main() {
  object.test(create, createEqual, createNonEqual);
}
