// Copyright (c) 2017, 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 E reduce(E combine(E value, E element))
 * Otherwise this method starts with the first element from the iterator, and
 * then combines it with the remaining elements in iteration order.
 * @description Checks that elements are combined in iteration order.
 * @author iarkh@unipro.ru
 */
import "../../../Utils/expect.dart";
import "dart:collection";
import "LinkedList.lib.dart";

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

main() {
  check(["1", "2", "-3"], (value, element) => value + element, "12-3");
  check(["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"],
      (value, element) => value + element, "abcdefghijklmn");
  check(["test", " ", "me", " ", "now", "!"],
      (value, element) => value + element, "test me now!");
}
