// 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 E reduce(E combine(E value, E element))
/// Reduces a collection to a single value by iteratively combining elements
/// of the collection using the provided function.
/// @description Checks that the result is correct for simple functions.
/// @author kaigorodov

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

check(List<int> a, combine, num expected) {
  LinkedList<MyLinkedListEntry<int>> llist = toLinkedList(a);
  MyLinkedListEntry<int> combine2(
      MyLinkedListEntry<int> value, MyLinkedListEntry<int> element) =>
        new MyLinkedListEntry<int>(combine(value.value, element.value));
  int actual = llist.reduce(combine2).value;
  Expect.equals(expected, actual);
}	

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