-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathtest.js
156 lines (128 loc) · 3.55 KB
/
test.js
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
var varint = require('./index')
, test = require('tape')
, decode = varint.decode
, encode = varint.encode
, encodingLength = varint.encodingLength
test('fuzz test', function(assert) {
var expect
, encoded
for(var i = 0, len = 100; i < len; ++i) {
expect = randint(0x7FFFFFFF)
encoded = encode(expect)
var data = decode(encoded)
assert.equal(expect, data, 'fuzz test: ' + expect.toString())
assert.equal(decode.bytes, encoded.length)
}
assert.end()
})
test('test single byte works as expected', function(assert) {
var buf = new Uint8Array(2)
buf[0] = 172
buf[1] = 2
var data = decode(buf)
assert.equal(data, 300, 'should equal 300')
assert.equal(decode.bytes, 2)
assert.end()
})
test('test encode works as expected', function(assert) {
var out = []
assert.deepEqual(encode(300), [0xAC, 0x02])
assert.end()
})
test('test decode single bytes', function(assert) {
var expected = randint(parseInt('1111111', '2'))
var buf = new Uint8Array(1)
buf[0] = expected
var data = decode(buf)
assert.equal(data, expected)
assert.equal(decode.bytes, 1)
assert.end()
})
test('test decode multiple bytes with zero', function(assert) {
var expected = randint(parseInt('1111111', '2'))
var buf = new Uint8Array(2)
buf[0] = 128
buf[1] = expected
var data = decode(buf)
assert.equal(data, expected << 7)
assert.equal(decode.bytes, 2)
assert.end()
})
test('encode single byte', function(assert) {
var expected = randint(parseInt('1111111', '2'))
assert.deepEqual(encode(expected), [expected])
assert.equal(encode.bytes, 1)
assert.end()
})
test('encode multiple byte with zero first byte', function(assert) {
var expected = 0x0F00
assert.deepEqual(encode(expected), [0x80, 0x1E])
assert.equal(encode.bytes, 2)
assert.end()
})
test('big integers', function (assert) {
var bigs = []
for(var i = 32; i <= 53; i++) (function (i) {
bigs.push(Math.pow(2, i) - 1)
})(i)
bigs.forEach(function (n) {
var data = encode(n)
console.error(n, '->', data)
assert.equal(decode(data), n)
assert.notEqual(decode(data), n - 1)
})
assert.end()
})
test('fuzz test - big', function(assert) {
var expect
, encoded
var MAX_INTD = Number.MAX_SAFE_INTEGER
var MAX_INT = Math.pow(2, 31)
for(var i = 0, len = 100; i < len; ++i) {
expect = randint(MAX_INTD - MAX_INT) + MAX_INT
encoded = encode(expect)
var data = decode(encoded)
assert.equal(expect, data, 'fuzz test: ' + expect.toString())
assert.equal(decode.bytes, encoded.length)
}
assert.end()
})
test('encodingLength', function (assert) {
for(var i = 0; i <= 53; i++) {
var n = Math.pow(2, i) - 1
assert.equal(encode(n).length, encodingLength(n))
}
assert.end()
})
test('buffer too short', function (assert) {
var value = encode(9812938912312)
var buffer = encode(value)
var l = buffer.length
while(l--) {
try {
var val = decode(buffer.slice(0, l))
} catch (err) {
assert.equal(err.constructor, RangeError)
assert.equal(decode.bytes, 0)
}
}
assert.end()
})
test('buffer too long', function (assert) {
var buffer = Uint8Array.from(
Array.from({length: 150}, function () { return 0xff })
.concat(Array.from({length: 1}, function () { return 0x1 }))
)
try {
var val = decode(buffer)
encode(val)
assert.fail('expected an error received value instead: ' + val)
} catch (err) {
assert.equal(err.constructor, RangeError)
assert.equal(decode.bytes, 0)
}
assert.end()
})
function randint(range) {
return Math.floor(Math.random() * range)
}