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

// @dart = 2.9

/// @assertion dynamic fold(initialValue, combine(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.
/// @description Checks that the result is correct for simple functions.
/// @author kaigorodov

import "dart:math";
import "dart:collection";
import "../../../Utils/expect.dart";
import "LinkedList.lib.dart";

check(List a0, num init, combine, num expected) {
  LinkedList<MyLinkedListEntry> a = toLinkedList(a0);
  num actual = a.fold(init, (previousValue, MyLinkedListEntry entry) =>
      combine(previousValue, entry.value));
  Expect.equals(expected, actual);
}	

main() {
  check([1, 2, -3], 0, (value, element) => value + element, 0);
  check([1, 2, -3], 1, (value, element) => value * element, -6);
  check([0, 2, -3], 1, (value, element) => value * element, 0);
  check(const[1, 2, -5, -6], -1000,
      (num value, num element) => max(value, element), 2);
}
