// 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))
/// Reduces a collection to a single value by iteratively combining elements of
/// the collection using the provided function.
/// ...
/// If it has only one element, that element is returned.
/// @description Checks that the returned value is correct.
/// @author ngl@unipro.ru


import "dart:typed_data";
import "../../../Utils/expect.dart";

Int32x4 i32x4p(n) => new Int32x4(n, n + 1, n + 2, n + 3);

equal(o1, o2) => o1.x == o2.x && o1.y == o2.y && o1.z == o2.z && o1.w == o2.w;

void check(list, expected) {
  var l = new Int32x4List.fromList(list);
  var res = l.reduce((prev, cur) => prev + cur);
  Expect.isTrue(equal(expected, res));
}

void checkConst(list, expected) {
  var l = new Int32x4List.fromList(list);
  var res = l.reduce((prev, cur) => i32x4p(1));
  Expect.isTrue(equal(expected, res));
}

main() {
  check([i32x4p(1)], i32x4p(1));
  check([i32x4p(1), i32x4p(5), i32x4p(9), i32x4p(13)],
      new Int32x4(28, 32, 36, 40));

  checkConst([i32x4p(2)], i32x4p(2));
  checkConst([i32x4p(1), i32x4p(5), i32x4p(9), i32x4p(13)], i32x4p(1));
}
