Skip to content

Commit 8172ab7

Browse files
authored
Merge branch 'master' into benchmarks
2 parents c3c1424 + 4835dc7 commit 8172ab7

File tree

3 files changed

+76
-29
lines changed

3 files changed

+76
-29
lines changed

.travis.yml

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
language: node_js
2-
sudo: false
32
node_js:
43
- stable
4+
- 8
55
- 6
66
- 4
7-
- "0.12"
8-
- "0.10"
9-
branches:
10-
only:
11-
- master
12-
script: npm test
7+
script:
8+
- npm test

lib/encode.js

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,28 @@ function encode (data, buffer, offset) {
2525
encode.bytes = -1
2626
encode._floatConversionDetected = false
2727

28-
encode._encode = function (buffers, data) {
29-
if (Buffer.isBuffer(data)) {
30-
buffers.push(Buffer.from(data.length + ':'))
31-
buffers.push(data)
32-
return
33-
}
28+
encode.getType = function (value) {
29+
if (Buffer.isBuffer(value)) return 'buffer'
30+
if (Array.isArray(value)) return 'array'
31+
if (ArrayBuffer.isView(value)) return 'typedarray'
32+
if (value instanceof Number) return 'number'
33+
if (value instanceof Boolean) return 'boolean'
34+
if (value instanceof ArrayBuffer) return 'arraybuffer'
35+
return typeof value
36+
}
3437

38+
encode._encode = function (buffers, data) {
3539
if (data == null) { return }
3640

37-
switch (typeof data) {
38-
case 'string':
39-
encode.buffer(buffers, data)
40-
break
41-
case 'number':
42-
encode.number(buffers, data)
43-
break
44-
case 'object':
45-
data.constructor === Array
46-
? encode.list(buffers, data)
47-
: encode.dict(buffers, data)
48-
break
49-
case 'boolean':
50-
encode.number(buffers, data ? 1 : 0)
51-
break
41+
switch (encode.getType(data)) {
42+
case 'buffer': encode.buffer(buffers, data); break
43+
case 'object': encode.dict(buffers, data); break
44+
case 'array': encode.list(buffers, data); break
45+
case 'string': encode.string(buffers, data); break
46+
case 'number': encode.number(buffers, data); break
47+
case 'boolean': encode.number(buffers, data); break
48+
case 'typedarray': encode.buffer(buffers, Buffer.from(data.buffer)); break
49+
case 'arraybuffer': encode.buffer(buffers, Buffer.from(data)); break
5250
}
5351
}
5452

@@ -57,6 +55,10 @@ var buffD = Buffer.from('d')
5755
var buffL = Buffer.from('l')
5856

5957
encode.buffer = function (buffers, data) {
58+
buffers.push(new Buffer(data.length + ':'), data)
59+
}
60+
61+
encode.string = function (buffers, data) {
6062
buffers.push(Buffer.from(Buffer.byteLength(data) + ':' + data))
6163
}
6264

@@ -90,7 +92,7 @@ encode.dict = function (buffers, data) {
9092
for (; j < kl; j++) {
9193
k = keys[j]
9294
if (data[k] == null) continue
93-
encode.buffer(buffers, k)
95+
encode.string(buffers, k)
9496
encode._encode(buffers, data[k])
9597
}
9698

test/encode.test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,53 @@ test('bencode#encode()', function (t) {
116116
t.equal(bencode.encode({'a': '45', 'b': 45}).toString(), 'd1:a2:451:bi45ee')
117117
t.equal(bencode.encode({'a': Buffer.from('bc')}).toString(), 'd1:a2:bce')
118118
})
119+
120+
t.test('should encode new Number(1) as number', function (t) {
121+
var data = new Number(1) // eslint-disable-line
122+
var result = bencode.decode(bencode.encode(data))
123+
var expected = 1
124+
t.plan(1)
125+
t.strictEqual(result, expected)
126+
})
127+
128+
t.test('should encode new Boolean(true) as number', function (t) {
129+
var data = new Boolean(true) // eslint-disable-line
130+
var result = bencode.decode(bencode.encode(data))
131+
var expected = 1
132+
t.plan(1)
133+
t.strictEqual(result, expected)
134+
})
135+
136+
t.test('should encode Uint8Array as buffer', function (t) {
137+
var data = new Uint8Array([ 1, 2, 3, 4, 5, 6, 7, 8, 9 ])
138+
var result = bencode.decode(bencode.encode(data))
139+
var expected = Buffer.from(data.buffer)
140+
t.plan(1)
141+
t.deepEqual(result, expected)
142+
})
143+
144+
t.test('should encode Uint32Array as buffer', function (t) {
145+
var data = new Uint32Array([ 0xF, 0xFF, 0xFFF, 0xFFFF, 0xFFFFF, 0xFFFFFF, 0xFFFFFFF, 0xFFFFFFFF ])
146+
var result = bencode.decode(bencode.encode(data))
147+
var expected = Buffer.from(data.buffer)
148+
t.plan(1)
149+
t.deepEqual(result, expected)
150+
})
151+
152+
t.test('should encode ArrayBuffer as buffer', function (t) {
153+
var data = new Uint32Array([ 0xF, 0xFF, 0xFFF, 0xFFFF, 0xFFFFF, 0xFFFFFF, 0xFFFFFFF, 0xFFFFFFFF ])
154+
var result = bencode.decode(bencode.encode(data.buffer))
155+
var expected = Buffer.from(data.buffer)
156+
t.plan(1)
157+
t.deepEqual(result, expected)
158+
})
159+
160+
t.test('should encode Float32Array as buffer', function (t) {
161+
var data = new Float32Array([ 1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8, 8.9, 9.0 ])
162+
var result = bencode.decode(bencode.encode(data))
163+
var expected = Buffer.from(data.buffer)
164+
console.log(result)
165+
t.plan(1)
166+
t.deepEqual(result, expected)
167+
})
119168
})

0 commit comments

Comments
 (0)