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

// @dart = 2.9

/// @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!");
}
