// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

function Module(stdlib, foreign, heap) {
  "use asm";
  function f1(i) {
    i = +i;
    return +(i * -1);
  }
  function f2(i) {
    i = +i;
    return +(-1 * i);
  }
  function f3(i) {
    i = +i;
    return +(-i);
  }
  return { f1: f1, f2: f2, f3: f3 };
}

var m = Module(this, {}, new ArrayBuffer(64 * 1024));

assertEquals(NaN, m.f1(NaN));
assertEquals(NaN, m.f2(NaN));
assertEquals(NaN, m.f3(NaN));
assertEquals(Infinity, 1 / m.f1(-0));
assertEquals(Infinity, 1 / m.f2(-0));
assertEquals(Infinity, 1 / m.f3(-0));
assertEquals(Infinity, m.f1(-Infinity));
assertEquals(Infinity, m.f2(-Infinity));
assertEquals(Infinity, m.f3(-Infinity));
assertEquals(-Infinity, 1 / m.f1(0));
assertEquals(-Infinity, 1 / m.f2(0));
assertEquals(-Infinity, 1 / m.f3(0));
assertEquals(-Infinity, m.f1(Infinity));
assertEquals(-Infinity, m.f2(Infinity));
assertEquals(-Infinity, m.f3(Infinity));
for (var i = -2147483648; i < 2147483648; i += 3999777) {
  assertEquals(-i, m.f1(i));
  assertEquals(-i, m.f2(i));
  assertEquals(-i, m.f3(i));
}
