// 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 Future<S> fold<S>(S initialValue, S combine(S previous, T element))
 * Reduces a sequence of values by repeatedly applying combine.
 * @description Checks that the result is correct.
 * @author kaigorodov
 */
library fold_A01_t01;
import "dart:async";
import "../../../Utils/expect.dart";

void check<T,S>(Stream<T> s, S initialValue, S combine(S previous, T element),
    S expected) {
  AsyncExpect.value(expected, s.fold(initialValue, combine));
}

void test(CreateStreamFunction create) {
  check(create([1, 2, 3, 4]), 0,
      (int previous, int element) => previous + element, 10);
  check(create([1, 2, 3, 4]), 1,
      (int previous, int element) => previous * element, 24);
}
