1'use strict'; 2 3require('../common'); 4const assert = require('assert'); 5 6// Test 32 bit float 7const buffer = Buffer.alloc(4); 8 9buffer[0] = 0; 10buffer[1] = 0; 11buffer[2] = 0x80; 12buffer[3] = 0x3f; 13assert.strictEqual(buffer.readFloatBE(0), 4.600602988224807e-41); 14assert.strictEqual(buffer.readFloatLE(0), 1); 15 16buffer[0] = 0; 17buffer[1] = 0; 18buffer[2] = 0; 19buffer[3] = 0xc0; 20assert.strictEqual(buffer.readFloatBE(0), 2.6904930515036488e-43); 21assert.strictEqual(buffer.readFloatLE(0), -2); 22 23buffer[0] = 0xff; 24buffer[1] = 0xff; 25buffer[2] = 0x7f; 26buffer[3] = 0x7f; 27assert.ok(Number.isNaN(buffer.readFloatBE(0))); 28assert.strictEqual(buffer.readFloatLE(0), 3.4028234663852886e+38); 29 30buffer[0] = 0xab; 31buffer[1] = 0xaa; 32buffer[2] = 0xaa; 33buffer[3] = 0x3e; 34assert.strictEqual(buffer.readFloatBE(0), -1.2126478207002966e-12); 35assert.strictEqual(buffer.readFloatLE(0), 0.3333333432674408); 36 37buffer[0] = 0; 38buffer[1] = 0; 39buffer[2] = 0; 40buffer[3] = 0; 41assert.strictEqual(buffer.readFloatBE(0), 0); 42assert.strictEqual(buffer.readFloatLE(0), 0); 43assert.ok(1 / buffer.readFloatLE(0) >= 0); 44 45buffer[3] = 0x80; 46assert.strictEqual(buffer.readFloatBE(0), 1.793662034335766e-43); 47assert.strictEqual(buffer.readFloatLE(0), -0); 48assert.ok(1 / buffer.readFloatLE(0) < 0); 49 50buffer[0] = 0; 51buffer[1] = 0; 52buffer[2] = 0x80; 53buffer[3] = 0x7f; 54assert.strictEqual(buffer.readFloatBE(0), 4.609571298396486e-41); 55assert.strictEqual(buffer.readFloatLE(0), Infinity); 56 57buffer[0] = 0; 58buffer[1] = 0; 59buffer[2] = 0x80; 60buffer[3] = 0xff; 61assert.strictEqual(buffer.readFloatBE(0), 4.627507918739843e-41); 62assert.strictEqual(buffer.readFloatLE(0), -Infinity); 63 64['readFloatLE', 'readFloatBE'].forEach((fn) => { 65 66 // Verify that default offset works fine. 67 buffer[fn](undefined); 68 buffer[fn](); 69 70 ['', '0', null, {}, [], () => {}, true, false].forEach((off) => { 71 assert.throws( 72 () => buffer[fn](off), 73 { code: 'ERR_INVALID_ARG_TYPE' } 74 ); 75 }); 76 77 [Infinity, -1, 1].forEach((offset) => { 78 assert.throws( 79 () => buffer[fn](offset), 80 { 81 code: 'ERR_OUT_OF_RANGE', 82 name: 'RangeError', 83 message: 'The value of "offset" is out of range. ' + 84 `It must be >= 0 and <= 0. Received ${offset}` 85 }); 86 }); 87 88 assert.throws( 89 () => Buffer.alloc(1)[fn](1), 90 { 91 code: 'ERR_BUFFER_OUT_OF_BOUNDS', 92 name: 'RangeError', 93 message: 'Attempt to access memory outside buffer bounds' 94 }); 95 96 [NaN, 1.01].forEach((offset) => { 97 assert.throws( 98 () => buffer[fn](offset), 99 { 100 code: 'ERR_OUT_OF_RANGE', 101 name: 'RangeError', 102 message: 'The value of "offset" is out of range. ' + 103 `It must be an integer. Received ${offset}` 104 }); 105 }); 106}); 107