// 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 Float32x4 reciprocal()
/// Returns the reciprocal of [this].
/// @description Checks that the returned value contains reciprocals of
/// corresponding lanes of [this].
/// @Issue 43255
/// @author msyabro


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

check(x, y, z, w) {
  var obj = new Float32x4(x,y,z,w);
  var res = obj.reciprocal();
  Expect.approxEquals(1 / obj.x, res.x, (res.x / 1e7).abs());
  Expect.approxEquals(1 / obj.y, res.y, (res.y / 1e7).abs());
  Expect.approxEquals(1 / obj.z, res.z, (res.z / 1e7).abs());
  Expect.approxEquals(1 / obj.w, res.w, (res.w / 1e7).abs());
}

main() {
  check(1.0, 1.0, 1.0, 1.0);
  check(2.0, 2.0, 2.0, 2.0);
  check(0.5, 0.5, 0.5, 0.5);
  check(1e-10, 2.43e-14, 0.23e3, 9.31e18);
}
