// 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
/// T fold <T>(T initialValue, T combine(T previousValue, E element))
/// Reduces a collection to a single value by iteratively combining each element
/// of the collection with an existing value
/// Uses initialValue as the initial value, then iterates through the elements
/// and updates the value with each element using the combine function, as if by:
///
///  var value = initialValue;
///  for (E element in this) {
///      value = combine(value, element);
///  }
///  return value;
///  Example of calculating the sum of an iterable:
///  iterable.fold(0, (prev, element) => prev + element);
/// @description Checks that the result is correct for simple functions.
/// @author kaigorodov

library fold_A01_t01;
import "dart:math";
import "../../../Utils/expect.dart";

check(Iterable a, num init, combine, num expected) {
  num actual = a.fold(init, combine);
  Expect.equals(expected, actual);
}

test(Iterable create([Iterable content])) {
  check(create([1, 2, -3]), 0, (num value, element) => value + element, 0);
  check(create([1, 2, -3]), 1, (num value, element) => value * element, -6);
  check(create([0, 2, -3]), 1, (num value, element) => value * element, 0);
  check(create([1, 2, -5, -6]), -1000,
      (num value, element) => max(value, element as int), 2);
}
