/*
 * Copyright (c) 2013, 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 T fold<T>(T initialValue, T 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 returned value is correct.
 * @author msyabro
 */

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

Float32x4 pack(v) => new Float32x4.splat(v);

checkInt(List<Float32x4> list, int expected) {
  var l = new Float32x4List.fromList(list);
  var res = l.fold(
      0, (dynamic prev, cur) => prev + cur.x + cur.y + cur.z + cur.w);
  Expect.equals(expected, res);
}

checkConst(List<Float32x4> list, int expected) {
  var l = new Float32x4List.fromList(list);
  var res = l.fold(0, (prev, cur) => 1);
  Expect.equals(expected, res);
}


main() {
  checkInt([], 0);
  checkInt([
    pack(1.0), pack(2.0), pack(3.0), pack(4.0), pack(5.0), pack(6.0),
    pack(7.0), pack(8.0), pack(9.0), pack(10.0)
  ], 220);
  checkInt([pack(10.0), pack(-1.0), pack(-2.0), pack(-3.0), pack(-4.0)], 0);

  checkConst([], 0);
  checkConst([pack(1.0), pack(2.0), pack(3.0)], 1);
}
