1// Copyright 2014 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5function Module(stdlib) { 6 "use asm"; 7 8 var abs = stdlib.Math.abs; 9 10 // f: double -> double 11 function f(a) { 12 a = +a; 13 return +abs(a); 14 } 15 16 // g: unsigned -> double 17 function g(a) { 18 a = a>>>0; 19 return +abs(a); 20 } 21 22 // h: signed -> double 23 function h(a) { 24 a = a|0; 25 return +abs(a); 26 } 27 28 return { f: f, g: g, h: h }; 29} 30 31var m = Module({ Math: Math }); 32var f = m.f; 33var g = m.g; 34var h = m.h; 35 36assertTrue(isNaN(f(NaN))); 37assertTrue(isNaN(f(undefined))); 38assertTrue(isNaN(f(function() {}))); 39 40assertEquals("Infinity", String(1/f(0))); 41assertEquals("Infinity", String(1/f(-0))); 42assertEquals("Infinity", String(f(Infinity))); 43assertEquals("Infinity", String(f(-Infinity))); 44 45assertEquals(0, f(0)); 46assertEquals(0.1, f(0.1)); 47assertEquals(0.5, f(0.5)); 48assertEquals(0.1, f(-0.1)); 49assertEquals(0.5, f(-0.5)); 50assertEquals(1, f(1)); 51assertEquals(1.1, f(1.1)); 52assertEquals(1.5, f(1.5)); 53assertEquals(1, f(-1)); 54assertEquals(1.1, f(-1.1)); 55assertEquals(1.5, f(-1.5)); 56 57assertEquals(0, g(0)); 58assertEquals(0, g(0.1)); 59assertEquals(0, g(0.5)); 60assertEquals(0, g(-0.1)); 61assertEquals(0, g(-0.5)); 62assertEquals(1, g(1)); 63assertEquals(1, g(1.1)); 64assertEquals(1, g(1.5)); 65assertEquals(4294967295, g(-1)); 66assertEquals(4294967295, g(-1.1)); 67assertEquals(4294967295, g(-1.5)); 68 69assertEquals(0, h(0)); 70assertEquals(0, h(0.1)); 71assertEquals(0, h(0.5)); 72assertEquals(0, h(-0.1)); 73assertEquals(0, h(-0.5)); 74assertEquals(1, h(1)); 75assertEquals(1, h(1.1)); 76assertEquals(1, h(1.5)); 77assertEquals(1, h(-1)); 78assertEquals(1, h(-1.1)); 79assertEquals(1, h(-1.5)); 80 81assertEquals(Number.MIN_VALUE, f(Number.MIN_VALUE)); 82assertEquals(Number.MIN_VALUE, f(-Number.MIN_VALUE)); 83assertEquals(Number.MAX_VALUE, f(Number.MAX_VALUE)); 84assertEquals(Number.MAX_VALUE, f(-Number.MAX_VALUE)); 85