int64.js
5.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
var assert = require('assert')
var ref = require('../')
describe('int64', function () {
var JS_MAX_INT = +9007199254740992
var JS_MIN_INT = -9007199254740992
it('should allow simple ints to be written and read', function () {
var buf = new Buffer(ref.sizeof.int64)
var val = 123456789
ref.writeInt64(buf, 0, val)
var rtn = ref.readInt64(buf, 0)
assert.equal(val, rtn)
})
it('should allow INT64_MAX to be written and read', function () {
var buf = new Buffer(ref.sizeof.int64)
var val = '9223372036854775807'
ref.writeInt64(buf, 0, val)
var rtn = ref.readInt64(buf, 0)
assert.equal(val, rtn)
})
it('should allow a hex String to be input (signed)', function () {
var buf = new Buffer(ref.sizeof.int64)
var val = '-0x1234567890'
ref.writeInt64(buf, 0, val)
var rtn = ref.readInt64(buf, 0)
assert.equal(parseInt(val, 16), rtn)
})
it('should allow an octal String to be input (signed)', function () {
var buf = new Buffer(ref.sizeof.int64)
var val = '-0777'
ref.writeInt64(buf, 0, val)
var rtn = ref.readInt64(buf, 0)
assert.equal(parseInt(val, 8), rtn)
})
it('should allow a hex String to be input (unsigned)', function () {
var buf = new Buffer(ref.sizeof.uint64)
var val = '0x1234567890'
ref.writeUInt64(buf, 0, val)
var rtn = ref.readUInt64(buf, 0)
assert.equal(parseInt(val, 16), rtn)
})
it('should allow an octal String to be input (unsigned)', function () {
var buf = new Buffer(ref.sizeof.uint64)
var val = '0777'
ref.writeUInt64(buf, 0, val)
var rtn = ref.readUInt64(buf, 0)
assert.equal(parseInt(val, 8), rtn)
})
it('should return a Number when reading JS_MIN_INT', function () {
var buf = new Buffer(ref.sizeof.int64)
ref.writeInt64(buf, 0, JS_MIN_INT)
var rtn = ref.readInt64(buf, 0)
assert.equal('number', typeof rtn)
assert.equal(JS_MIN_INT, rtn)
})
it('should return a Number when reading JS_MAX_INT', function () {
var buf = new Buffer(ref.sizeof.int64)
ref.writeInt64(buf, 0, JS_MAX_INT)
var rtn = ref.readInt64(buf, 0)
assert.equal('number', typeof rtn)
assert.equal(JS_MAX_INT, rtn)
})
it('should return a String when reading JS_MAX_INT+1', function () {
var buf = new Buffer(ref.sizeof.int64)
var plus_one = '9007199254740993'
ref.writeInt64(buf, 0, plus_one)
var rtn = ref.readInt64(buf, 0)
assert.equal('string', typeof rtn)
assert.equal(plus_one, rtn)
})
it('should return a String when reading JS_MIN_INT-1', function () {
var buf = new Buffer(ref.sizeof.int64)
var minus_one = '-9007199254740993'
ref.writeInt64(buf, 0, minus_one)
var rtn = ref.readInt64(buf, 0)
assert.equal('string', typeof rtn)
assert.equal(minus_one, rtn)
})
it('should return a Number when reading 0, even when written as a String', function () {
var buf = new Buffer(ref.sizeof.int64)
var zero = '0'
ref.writeInt64(buf, 0, zero)
var rtn = ref.readInt64(buf, 0)
assert.equal('number', typeof rtn)
assert.equal(0, rtn)
})
it('should throw a "no digits" Error when writing an invalid String (signed)', function () {
assert.throws(function () {
var buf = new Buffer(ref.sizeof.int64)
ref.writeInt64(buf, 0, 'foo')
}, /no digits we found in input String/)
})
it('should throw a "no digits" Error when writing an invalid String (unsigned)', function () {
assert.throws(function () {
var buf = new Buffer(ref.sizeof.uint64)
ref.writeUInt64(buf, 0, 'foo')
}, /no digits we found in input String/)
})
it('should throw an "out of range" Error when writing an invalid String (signed)', function () {
var e;
try {
var buf = new Buffer(ref.sizeof.int64)
ref.writeInt64(buf, 0, '10000000000000000000000000')
} catch (_e) {
e = _e;
}
assert(/input String numerical value out of range/.test(e.message));
})
it('should throw an "out of range" Error when writing an invalid String (unsigned)', function () {
var e;
try {
var buf = new Buffer(ref.sizeof.uint64)
ref.writeUInt64(buf, 0, '10000000000000000000000000')
} catch (_e) {
e = _e;
}
assert(/input String numerical value out of range/.test(e.message));
})
it('should throw an Error when reading an int64_t from the NULL pointer', function () {
assert.throws(function () {
ref.readInt64(ref.NULL)
})
})
it('should throw an Error when reading an uint64_t from the NULL pointer', function () {
assert.throws(function () {
ref.readUInt64(ref.NULL)
})
})
;['LE', 'BE'].forEach(function (endianness) {
describe(endianness, function () {
it('should read and write a signed ' + endianness + ' 64-bit integer', function () {
var val = -123456789
var buf = new Buffer(ref.sizeof.int64)
ref['writeInt64' + endianness](buf, 0, val)
assert.equal(val, ref['readInt64' + endianness](buf, 0))
})
it('should read and write an unsigned ' + endianness + ' 64-bit integer', function () {
var val = 123456789
var buf = new Buffer(ref.sizeof.uint64)
ref['writeUInt64' + endianness](buf, 0, val)
assert.equal(val, ref['readUInt64' + endianness](buf, 0))
})
})
})
})