Skip to content

Commit 222da53

Browse files
deleted float parser and added special test cases for Double
1 parent 210fc11 commit 222da53

File tree

4 files changed

+61
-160
lines changed

4 files changed

+61
-160
lines changed

src/float_parser.ts

Lines changed: 0 additions & 152 deletions
This file was deleted.

src/parser/serializer.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import type { Double } from '../double';
99
import { ensureBuffer } from '../ensure_buffer';
1010
import { BSONError, BSONTypeError } from '../error';
1111
import { isBSONType } from '../extended_json';
12-
import { writeIEEE754 } from '../float_parser';
1312
import type { Int32 } from '../int_32';
1413
import { Long } from '../long';
1514
import { Map } from '../map';
@@ -119,7 +118,7 @@ function serializeNumber(
119118
index = index + numberOfWrittenBytes;
120119
buffer[index++] = 0;
121120
// Write float
122-
writeIEEE754(buffer, value, index, 'little', 52, 8);
121+
buffer.writeDoubleLE(value, index);
123122
// Adjust index
124123
index = index + 8;
125124
}
@@ -487,7 +486,7 @@ function serializeDouble(
487486
buffer[index++] = 0;
488487

489488
// Write float
490-
writeIEEE754(buffer, value.value, index, 'little', 52, 8);
489+
buffer.writeDoubleLE(value.value, index); // little endian by default
491490

492491
// Adjust index
493492
index = index + 8;

test/node/bson_corpus.spec.test.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,6 @@ describe('BSON Corpus', function () {
121121
describe('valid-bson', function () {
122122
for (const v of valid) {
123123
it(v.description, function () {
124-
if (v.description === 'NaN with payload') {
125-
// TODO(NODE-3630): remove custom float parser so we can handle the NaN payload data
126-
this.skip();
127-
}
128-
129124
if (
130125
v.description === 'All BSON types' &&
131126
scenario._filename === 'multi-type-deprecated'

test/node/double_tests.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,63 @@ describe('Double', function () {
3535
});
3636
}
3737
});
38+
39+
describe('specialValues', () => {
40+
function twiceSerialized(value) {
41+
let serializedDouble = BSON.serialize({ d: new Double(value) });
42+
let deserializedDouble = BSON.deserialize(serializedDouble, { promoteValues: true });
43+
let newVal = deserializedDouble.d;
44+
return newVal;
45+
}
46+
47+
it('inf', () => {
48+
let value = Infinity;
49+
let orig = new Double(value).valueOf();
50+
let newVal = twiceSerialized(value);
51+
expect(orig).to.equal(newVal);
52+
});
53+
54+
it('-inf', () => {
55+
let value = -Infinity;
56+
let orig = new Double(value).valueOf();
57+
let newVal = twiceSerialized(value);
58+
expect(orig).to.equal(newVal);
59+
});
60+
61+
it('NaN', () => {
62+
let value = NaN;
63+
let newVal = twiceSerialized(value);
64+
expect(Number.isNaN(newVal)).to.equal(true);
65+
});
66+
67+
it('NaN with payload', () => {
68+
let buffer = Buffer.from('120000000000F87F', 'hex');
69+
let value = buffer.readDoubleLE(0);
70+
let serializedDouble = BSON.serialize({ d: new Double(value) });
71+
expect(serializedDouble.subarray(7, 15)).to.deep.equal(buffer);
72+
let { d: newVal } = BSON.deserialize(serializedDouble, { promoteValues: true });
73+
expect(Number.isNaN(newVal)).to.equal(true);
74+
});
75+
76+
it('0', () => {
77+
let value = 0;
78+
let orig = new Double(value).valueOf();
79+
let newVal = twiceSerialized(value);
80+
expect(orig).to.equal(newVal);
81+
});
82+
83+
it('-0', () => {
84+
let value = -0;
85+
let orig = new Double(value).valueOf();
86+
let newVal = twiceSerialized(value);
87+
expect(orig).to.equal(newVal);
88+
});
89+
90+
it('Number.EPSILON', () => {
91+
let value = Number.EPSILON;
92+
let orig = new Double(value).valueOf();
93+
let newVal = twiceSerialized(value);
94+
expect(orig).to.equal(newVal);
95+
});
96+
});
3897
});

0 commit comments

Comments
 (0)