// 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.

library collection_test;

import "package:expect/expect.dart";
import 'dart:collection' show Queue;

class CollectionTest {
  CollectionTest(Iterable<int> iterable) {
    testFold(iterable);
  }

  void testFold(Iterable<int> iterable) {
    Expect.equals(
        28, iterable.fold/*<int>*/(0, (prev, element) => prev + element));
    Expect.equals(
        3024, iterable.fold/*<int>*/(1, (prev, element) => prev * element));
  }
}

main() {
  final TEST_ELEMENTS = const [4, 2, 6, 7, 9];
  // Const list.
  new CollectionTest(TEST_ELEMENTS);

  // Fixed size list.
  var fixedList = new List<int>(TEST_ELEMENTS.length);
  for (int i = 0; i < TEST_ELEMENTS.length; i++) {
    fixedList[i] = TEST_ELEMENTS[i];
  }
  new CollectionTest(fixedList);

  // Growable list.
  new CollectionTest(new List.from(TEST_ELEMENTS));

  // Set.
  new CollectionTest(new Set.from(TEST_ELEMENTS));

  // Queue.
  new CollectionTest(new Queue.from(TEST_ELEMENTS));
}
