• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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