// 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) {
  "use asm";

  var fround = stdlib.Math.fround;

  // f: double -> float
  function f(a) {
    a = +a;
    return fround(a);
  }

  return { f: f };
}

var f = Module({ Math: Math }).f;

assertTrue(isNaN(f(NaN)));
assertTrue(isNaN(f(undefined)));
assertTrue(isNaN(f(function() {})));

assertEquals("Infinity", String(1/f(0)));
assertEquals("-Infinity", String(1/f(-0)));
assertEquals("Infinity", String(f(Infinity)));
assertEquals("-Infinity", String(f(-Infinity)));
assertEquals("Infinity", String(f(1E200)));
assertEquals("-Infinity", String(f(-1E200)));
assertEquals("Infinity", String(1/f(1E-300)));
assertEquals("-Infinity", String(1/f(-1E-300)));

assertEquals(0,                  f(0));
assertEquals(1,                  f(1));
assertEquals(1.5,                f(1.5));
assertEquals(1.3370000123977661, f(1.337));
assertEquals(-4.300000190734863, f(-4.3));