msgpack-lite 0.1.26 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +44 -164
- package/dist/msgpack.min.js +1 -2
- package/lib/bufferish-buffer.js +1 -1
- package/lib/decode-stream.js +7 -3
- package/lib/encode-stream.js +12 -4
- package/lib/ext-unpacker.js +1 -1
- package/lib/write-type.js +5 -0
- package/package.json +30 -19
- package/.npmignore +0 -8
- package/.travis.yml +0 -26
- package/.zuul.yml +0 -20
- package/Makefile +0 -48
- package/bower.json +0 -34
- package/lib/benchmark-stream.js +0 -247
- package/lib/benchmark.js +0 -157
- package/test/10.encode.js +0 -218
- package/test/11.decode.js +0 -371
- package/test/12.encoder.js +0 -36
- package/test/13.decoder.js +0 -32
- package/test/14.codec.js +0 -95
- package/test/15.useraw.js +0 -92
- package/test/16.binarraybuffer.js +0 -91
- package/test/17.uint8array.js +0 -43
- package/test/18.utf8.js +0 -59
- package/test/20.roundtrip.js +0 -220
- package/test/21.ext.js +0 -85
- package/test/22.typedarray.js +0 -79
- package/test/23.extbuffer.js +0 -79
- package/test/24.int64.js +0 -76
- package/test/26.es6.js +0 -20
- package/test/27.usemap.js +0 -66
- package/test/30.stream.js +0 -119
- package/test/50.compat.js +0 -58
- package/test/61.encode-only.js +0 -26
- package/test/62.decode-only.js +0 -23
- package/test/63.module-deps.js +0 -77
- package/test/example.json +0 -52
- package/test/zuul/ie.html +0 -4
package/lib/benchmark-stream.js
DELETED
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
var PassThrough = require("stream").PassThrough;
|
|
4
|
-
var async = require("async");
|
|
5
|
-
|
|
6
|
-
var msgpack = require("../");
|
|
7
|
-
var Encoder = require("./encoder").Encoder;
|
|
8
|
-
var Decoder = require("./decoder").Decoder;
|
|
9
|
-
var notepack = require("notepack");
|
|
10
|
-
|
|
11
|
-
var pkg = require("../package.json");
|
|
12
|
-
|
|
13
|
-
// a sample fluentd message
|
|
14
|
-
var data = ["tag", [[1440949922, {"message": "hi there"}]]];
|
|
15
|
-
var packed = msgpack.encode(data); // 30 bytes per message
|
|
16
|
-
var packsize = packed.length;
|
|
17
|
-
var opcount = 1000000;
|
|
18
|
-
var joincount = 100;
|
|
19
|
-
var packjoin = repeatbuf(packed, joincount); // 3KB per chunk
|
|
20
|
-
var limit = 2;
|
|
21
|
-
|
|
22
|
-
var argv = Array.prototype.slice.call(process.argv, 2);
|
|
23
|
-
|
|
24
|
-
if (argv[0] === "-v") {
|
|
25
|
-
console.warn(pkg.name + " " + pkg.version);
|
|
26
|
-
process.exit(0);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (argv[0] - 0) limit = argv.shift() - 0;
|
|
30
|
-
|
|
31
|
-
var list = [
|
|
32
|
-
['stream.write(msgpack.encode(obj));', encode1],
|
|
33
|
-
['stream.write(notepack.encode(obj));', encode4],
|
|
34
|
-
['msgpack.Encoder().on("data",ondata).encode(obj);', encode2],
|
|
35
|
-
['msgpack.createEncodeStream().write(obj);', encode3],
|
|
36
|
-
['stream.write(msgpack.decode(buf));', decode1],
|
|
37
|
-
['stream.write(notepack.decode(buf));', decode4],
|
|
38
|
-
['msgpack.Decoder().on("data",ondata).decode(buf);', decode2],
|
|
39
|
-
['msgpack.createDecodeStream().write(buf);', decode3]
|
|
40
|
-
];
|
|
41
|
-
|
|
42
|
-
function encode1(callback) {
|
|
43
|
-
var stream = new PassThrough();
|
|
44
|
-
var cnt = counter(callback);
|
|
45
|
-
stream.on("data", cnt.buf);
|
|
46
|
-
stream.on("end", cnt.end);
|
|
47
|
-
for (var j = 0; j < opcount; j++) {
|
|
48
|
-
stream.write(msgpack.encode(data));
|
|
49
|
-
}
|
|
50
|
-
stream.end();
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function encode2(callback) {
|
|
54
|
-
var stream = new PassThrough();
|
|
55
|
-
var cnt = counter(callback);
|
|
56
|
-
stream.on("data", cnt.buf);
|
|
57
|
-
stream.on("end", cnt.end);
|
|
58
|
-
var encoder = Encoder();
|
|
59
|
-
encoder.on("data", function(chunk) {
|
|
60
|
-
stream.write(chunk);
|
|
61
|
-
});
|
|
62
|
-
encoder.on("end", function() {
|
|
63
|
-
stream.end();
|
|
64
|
-
});
|
|
65
|
-
for (var j = 0; j < opcount; j++) {
|
|
66
|
-
encoder.encode(data);
|
|
67
|
-
}
|
|
68
|
-
encoder.end();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function encode3(callback) {
|
|
72
|
-
var stream = msgpack.createEncodeStream();
|
|
73
|
-
var cnt = counter(callback);
|
|
74
|
-
stream.on("data", cnt.buf);
|
|
75
|
-
stream.on("end", cnt.end);
|
|
76
|
-
for (var j = 0; j < opcount; j++) {
|
|
77
|
-
stream.write(data);
|
|
78
|
-
}
|
|
79
|
-
stream.end();
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function encode4(callback) {
|
|
83
|
-
var stream = new PassThrough();
|
|
84
|
-
var cnt = counter(callback);
|
|
85
|
-
stream.on("data", cnt.buf);
|
|
86
|
-
stream.on("end", cnt.end);
|
|
87
|
-
for (var j = 0; j < opcount; j++) {
|
|
88
|
-
stream.write(notepack.encode(data));
|
|
89
|
-
}
|
|
90
|
-
stream.end();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function decode1(callback) {
|
|
94
|
-
var stream = new PassThrough({objectMode: true});
|
|
95
|
-
var cnt = counter(callback);
|
|
96
|
-
stream.on("data", cnt.inc);
|
|
97
|
-
stream.on("end", cnt.end);
|
|
98
|
-
for (var j = 0; j < opcount; j++) {
|
|
99
|
-
stream.write(msgpack.decode(packed));
|
|
100
|
-
}
|
|
101
|
-
stream.end();
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function decode2(callback) {
|
|
105
|
-
var stream = new PassThrough({objectMode: true});
|
|
106
|
-
var cnt = counter(callback);
|
|
107
|
-
stream.on("data", cnt.inc);
|
|
108
|
-
stream.on("end", cnt.end);
|
|
109
|
-
var decoder = Decoder();
|
|
110
|
-
decoder.on("data", function(chunk) {
|
|
111
|
-
stream.write(chunk);
|
|
112
|
-
});
|
|
113
|
-
decoder.on("end", function() {
|
|
114
|
-
stream.end();
|
|
115
|
-
});
|
|
116
|
-
for (var j = 0; j < opcount / joincount; j++) {
|
|
117
|
-
decoder.decode(packjoin);
|
|
118
|
-
}
|
|
119
|
-
decoder.end();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function decode3(callback) {
|
|
123
|
-
var stream = msgpack.createDecodeStream();
|
|
124
|
-
var cnt = counter(callback);
|
|
125
|
-
stream.on("data", cnt.inc);
|
|
126
|
-
stream.on("end", cnt.end);
|
|
127
|
-
for (var j = 0; j < opcount / joincount; j++) {
|
|
128
|
-
stream.write(packjoin);
|
|
129
|
-
}
|
|
130
|
-
stream.end();
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function decode4(callback) {
|
|
134
|
-
var stream = new PassThrough({objectMode: true});
|
|
135
|
-
var cnt = counter(callback);
|
|
136
|
-
stream.on("data", cnt.inc);
|
|
137
|
-
stream.on("end", cnt.end);
|
|
138
|
-
for (var j = 0; j < opcount; j++) {
|
|
139
|
-
stream.write(notepack.decode(packed));
|
|
140
|
-
}
|
|
141
|
-
stream.end();
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function rpad(str, len, chr) {
|
|
145
|
-
if (!chr) chr = " ";
|
|
146
|
-
str += "";
|
|
147
|
-
while (str.length < len) str += chr;
|
|
148
|
-
return str;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function lpad(str, len, chr) {
|
|
152
|
-
if (!chr) chr = " ";
|
|
153
|
-
str += "";
|
|
154
|
-
while (str.length < len) str = chr + str;
|
|
155
|
-
return str;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
function repeatbuf(buf, cnt) {
|
|
159
|
-
var array = [];
|
|
160
|
-
for (var i = 0; i < cnt; i++) {
|
|
161
|
-
array.push(buf);
|
|
162
|
-
}
|
|
163
|
-
return Buffer.concat(array);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
function counter(callback) {
|
|
167
|
-
var cnt = 0;
|
|
168
|
-
return {buf: b, inc: i, end: e};
|
|
169
|
-
|
|
170
|
-
function b(buf) {
|
|
171
|
-
cnt += buf.length / packsize;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
function i() {
|
|
175
|
-
cnt++;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function e() {
|
|
179
|
-
cnt = Math.round(cnt);
|
|
180
|
-
callback(null, cnt);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
function run() {
|
|
185
|
-
// task filter
|
|
186
|
-
if (argv.length) {
|
|
187
|
-
list = list.filter(function(pair) {
|
|
188
|
-
var name = pair[0];
|
|
189
|
-
var match = argv.filter(function(grep) {
|
|
190
|
-
return (name.indexOf(grep) > -1);
|
|
191
|
-
});
|
|
192
|
-
return match.length;
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// run tasks repeatedly
|
|
197
|
-
var tasks = [];
|
|
198
|
-
for (var i = 0; i < limit; i++) {
|
|
199
|
-
tasks.push(oneset);
|
|
200
|
-
}
|
|
201
|
-
async.series(tasks, end);
|
|
202
|
-
|
|
203
|
-
// run a series of tasks
|
|
204
|
-
function oneset(callback) {
|
|
205
|
-
async.eachSeries(list, bench, callback);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
// run a single benchmark
|
|
209
|
-
function bench(pair, callback) {
|
|
210
|
-
process.stdout.write(".");
|
|
211
|
-
var func = pair[1];
|
|
212
|
-
var start = new Date() - 0;
|
|
213
|
-
func(function(err, cnt) {
|
|
214
|
-
var end = new Date() - 0;
|
|
215
|
-
var array = pair[2] || (pair[2] = []);
|
|
216
|
-
array.push(end - start);
|
|
217
|
-
pair[3] = cnt;
|
|
218
|
-
setTimeout(callback, 100);
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// show result
|
|
223
|
-
function end() {
|
|
224
|
-
var title = "operation (" + opcount + " x " + limit + ")";
|
|
225
|
-
process.stdout.write("\n");
|
|
226
|
-
|
|
227
|
-
// table header
|
|
228
|
-
var COL1 = 48;
|
|
229
|
-
console.log(rpad(title, COL1), "|", " op ", "|", " ms ", "|", " op/s ");
|
|
230
|
-
console.log(rpad("", COL1, "-"), "|", "------:", "|", "----:", "|", "-----:");
|
|
231
|
-
|
|
232
|
-
// table body
|
|
233
|
-
list.forEach(function(pair) {
|
|
234
|
-
var name = pair[0];
|
|
235
|
-
var op = pair[3];
|
|
236
|
-
var array = pair[2];
|
|
237
|
-
array = array.sort(function(a, b) {
|
|
238
|
-
return a > b;
|
|
239
|
-
});
|
|
240
|
-
var fastest = array[0];
|
|
241
|
-
var score = Math.floor(opcount / fastest * 1000);
|
|
242
|
-
console.log(rpad(name, COL1), "|", lpad(op, 7), "|", lpad(fastest, 5), "|", lpad(score, 6));
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
run();
|
package/lib/benchmark.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
var msgpack_node = try_require("msgpack");
|
|
4
|
-
var msgpack_lite = try_require("../index");
|
|
5
|
-
var msgpack_js = try_require("msgpack-js");
|
|
6
|
-
var msgpack_js_v5 = try_require("msgpack-js-v5");
|
|
7
|
-
var msgpack5 = try_require("msgpack5");
|
|
8
|
-
var msgpack_unpack = try_require("msgpack-unpack");
|
|
9
|
-
var msgpack_codec = try_require("msgpack.codec");
|
|
10
|
-
var notepack = try_require("notepack");
|
|
11
|
-
|
|
12
|
-
msgpack5 = msgpack5 && msgpack5();
|
|
13
|
-
msgpack_codec = msgpack_codec && msgpack_codec.msgpack;
|
|
14
|
-
|
|
15
|
-
var pkg = require("../package.json");
|
|
16
|
-
var data = require("../test/example");
|
|
17
|
-
var packed = msgpack_lite.encode(data);
|
|
18
|
-
var expected = JSON.stringify(data);
|
|
19
|
-
|
|
20
|
-
var argv = Array.prototype.slice.call(process.argv, 2);
|
|
21
|
-
|
|
22
|
-
if (argv[0] === "-v") {
|
|
23
|
-
console.warn(pkg.name + " " + pkg.version);
|
|
24
|
-
process.exit(0);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
var limit = 5;
|
|
28
|
-
if (argv[0] - 0) limit = argv.shift() - 0;
|
|
29
|
-
limit *= 1000;
|
|
30
|
-
|
|
31
|
-
var COL1 = 57;
|
|
32
|
-
var COL2 = 6;
|
|
33
|
-
var COL3 = 5;
|
|
34
|
-
var COL4 = 6;
|
|
35
|
-
|
|
36
|
-
console.log(rpad("operation", COL1), "|", " op ", "|", " ms ", "|", " op/s ");
|
|
37
|
-
console.log(rpad("", COL1, "-"), "|", lpad(":", COL2, "-"), "|", lpad(":", COL3, "-"), "|", lpad(":", COL4, "-"));
|
|
38
|
-
|
|
39
|
-
var buf, obj;
|
|
40
|
-
|
|
41
|
-
if (JSON) {
|
|
42
|
-
buf = bench('buf = Buffer(JSON.stringify(obj));', JSON_stringify, data);
|
|
43
|
-
obj = bench('obj = JSON.parse(buf);', JSON.parse, buf);
|
|
44
|
-
test(obj);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (msgpack_lite) {
|
|
48
|
-
buf = bench('buf = require("msgpack-lite").encode(obj);', msgpack_lite.encode, data);
|
|
49
|
-
obj = bench('obj = require("msgpack-lite").decode(buf);', msgpack_lite.decode, packed);
|
|
50
|
-
test(obj);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (msgpack_node) {
|
|
54
|
-
buf = bench('buf = require("msgpack").pack(obj);', msgpack_node.pack, data);
|
|
55
|
-
obj = bench('obj = require("msgpack").unpack(buf);', msgpack_node.unpack, buf);
|
|
56
|
-
test(obj);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (msgpack_codec) {
|
|
60
|
-
buf = bench('buf = Buffer(require("msgpack.codec").msgpack.pack(obj));', msgpack_codec_pack, data);
|
|
61
|
-
obj = bench('obj = require("msgpack.codec").msgpack.unpack(buf);', msgpack_codec.unpack, buf);
|
|
62
|
-
test(obj);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (msgpack_js_v5) {
|
|
66
|
-
buf = bench('buf = require("msgpack-js-v5").encode(obj);', msgpack_js_v5.encode, data);
|
|
67
|
-
obj = bench('obj = require("msgpack-js-v5").decode(buf);', msgpack_js_v5.decode, buf);
|
|
68
|
-
test(obj);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (msgpack_js) {
|
|
72
|
-
buf = bench('buf = require("msgpack-js").encode(obj);', msgpack_js.encode, data);
|
|
73
|
-
obj = bench('obj = require("msgpack-js").decode(buf);', msgpack_js.decode, buf);
|
|
74
|
-
test(obj);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (msgpack5) {
|
|
78
|
-
buf = bench('buf = require("msgpack5")().encode(obj);', msgpack5.encode, data);
|
|
79
|
-
obj = bench('obj = require("msgpack5")().decode(buf);', msgpack5.decode, buf);
|
|
80
|
-
test(obj);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (notepack) {
|
|
84
|
-
buf = bench('buf = require("notepack").encode(obj);', notepack.encode, data);
|
|
85
|
-
obj = bench('obj = require("notepack").decode(buf);', notepack.decode, buf);
|
|
86
|
-
test(obj);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (msgpack_unpack) {
|
|
90
|
-
obj = bench('obj = require("msgpack-unpack").decode(buf);', msgpack_unpack, packed);
|
|
91
|
-
test(obj);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function JSON_stringify(src) {
|
|
95
|
-
return Buffer(JSON.stringify(src));
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function msgpack_codec_pack(data) {
|
|
99
|
-
return Buffer(msgpack_codec.pack(data));
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function bench(name, func, src) {
|
|
103
|
-
if (argv.length) {
|
|
104
|
-
var match = argv.filter(function(grep) {
|
|
105
|
-
return (name.indexOf(grep) > -1);
|
|
106
|
-
});
|
|
107
|
-
if (!match.length) return SKIP;
|
|
108
|
-
}
|
|
109
|
-
var ret, duration;
|
|
110
|
-
var start = new Date() - 0;
|
|
111
|
-
var count = 0;
|
|
112
|
-
while (1) {
|
|
113
|
-
var end = new Date() - 0;
|
|
114
|
-
duration = end - start;
|
|
115
|
-
if (duration >= limit) break;
|
|
116
|
-
while ((++count) % 100) ret = func(src);
|
|
117
|
-
}
|
|
118
|
-
name = rpad(name, COL1);
|
|
119
|
-
var score = Math.floor(count / duration * 1000);
|
|
120
|
-
count = lpad(count, COL2);
|
|
121
|
-
duration = lpad(duration, COL3);
|
|
122
|
-
score = lpad(score, COL4);
|
|
123
|
-
console.log(name, "|", count, "|", duration, "|", score);
|
|
124
|
-
return ret;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function rpad(str, len, chr) {
|
|
128
|
-
if (!chr) chr = " ";
|
|
129
|
-
while (str.length < len) str += chr;
|
|
130
|
-
return str;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function lpad(str, len, chr) {
|
|
134
|
-
if (!chr) chr = " ";
|
|
135
|
-
str += "";
|
|
136
|
-
while (str.length < len) str = chr + str;
|
|
137
|
-
return str;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function test(actual) {
|
|
141
|
-
if (actual === SKIP) return;
|
|
142
|
-
actual = JSON.stringify(actual);
|
|
143
|
-
if (actual === expected) return;
|
|
144
|
-
console.warn("expected: " + expected);
|
|
145
|
-
console.warn("actual: " + actual);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
function SKIP() {
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function try_require(name) {
|
|
152
|
-
try {
|
|
153
|
-
return require(name);
|
|
154
|
-
} catch (e) {
|
|
155
|
-
// ignore
|
|
156
|
-
}
|
|
157
|
-
}
|
package/test/10.encode.js
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env mocha -R spec
|
|
2
|
-
|
|
3
|
-
var assert = require("assert");
|
|
4
|
-
var msgpackJS = "../index";
|
|
5
|
-
var isBrowser = ("undefined" !== typeof window);
|
|
6
|
-
var msgpack = isBrowser && window.msgpack || require(msgpackJS);
|
|
7
|
-
var TITLE = __filename.replace(/^.*\//, "");
|
|
8
|
-
|
|
9
|
-
var HAS_UINT8ARRAY = ("undefined" !== typeof Uint8Array);
|
|
10
|
-
|
|
11
|
-
describe(TITLE, function() {
|
|
12
|
-
describe("Buffer", function() {
|
|
13
|
-
run_tests();
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
var describe_Uint8Array = HAS_UINT8ARRAY ? describe : describe.skip;
|
|
17
|
-
describe_Uint8Array("Uint8Array", function() {
|
|
18
|
-
run_tests({uint8array: true});
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
function run_tests(codecopt) {
|
|
23
|
-
var options;
|
|
24
|
-
|
|
25
|
-
if (codecopt) it(JSON.stringify(codecopt), function() {
|
|
26
|
-
var codec = msgpack.createCodec(codecopt);
|
|
27
|
-
assert.ok(codec);
|
|
28
|
-
options = {codec: codec};
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
// positive fixint -- 0x00 - 0x7f
|
|
32
|
-
it("00-7f: positive fixint", function() {
|
|
33
|
-
for (var i = 0; i <= 0x7F; i++) {
|
|
34
|
-
assert.deepEqual(toArray(msgpack.encode(i, options)), [i]);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
// fixmap -- 0x80 - 0x8f
|
|
39
|
-
it("80-8f: fixmap", function() {
|
|
40
|
-
var map = {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, o: 15, p: 16};
|
|
41
|
-
var src = {};
|
|
42
|
-
var exp = [0x80];
|
|
43
|
-
Object.keys(map).forEach(function(key) {
|
|
44
|
-
assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
|
|
45
|
-
src[key] = map[key];
|
|
46
|
-
exp[0]++;
|
|
47
|
-
exp.push(0xa1);
|
|
48
|
-
exp.push(key.charCodeAt(0));
|
|
49
|
-
exp.push(map[key]);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
// fixarray -- 0x90 - 0x9f
|
|
54
|
-
it("90-9f: fixarray", function() {
|
|
55
|
-
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
|
|
56
|
-
var src = [];
|
|
57
|
-
var exp = [0x90];
|
|
58
|
-
for (var i = 0; i < 16; i++) {
|
|
59
|
-
assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
|
|
60
|
-
src.push(array[i]);
|
|
61
|
-
exp[0]++;
|
|
62
|
-
exp.push(array[i]);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// fixstr -- 0xa0 - 0xbf
|
|
67
|
-
it("a0-bf: fixstr", function() {
|
|
68
|
-
assert.deepEqual(toArray(msgpack.encode("", options)), [0xa0]);
|
|
69
|
-
|
|
70
|
-
var str = "0123456789abcdefghijklmnopqrstu";
|
|
71
|
-
var exp = [0xa0];
|
|
72
|
-
for (var i = 0; i < 32; i++) {
|
|
73
|
-
var src = str.substr(0, i);
|
|
74
|
-
assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
|
|
75
|
-
exp[0]++;
|
|
76
|
-
exp.push(str.charCodeAt(i));
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// nil -- 0xc0
|
|
81
|
-
it("c0: nil (null)", function() {
|
|
82
|
-
assert.deepEqual(toArray(msgpack.encode(null, options)), [0xc0]);
|
|
83
|
-
});
|
|
84
|
-
it("c0: nil (undefined)", function() {
|
|
85
|
-
assert.deepEqual(toArray(msgpack.encode(undefined, options)), [0xc0]);
|
|
86
|
-
});
|
|
87
|
-
it("c0: nil (Function)", function() {
|
|
88
|
-
assert.deepEqual(toArray(msgpack.encode(NOP, options)), [0xc0]);
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
// false -- 0xc2
|
|
92
|
-
// true -- 0xc3
|
|
93
|
-
it("c2-c3: boolean", function() {
|
|
94
|
-
assert.deepEqual(toArray(msgpack.encode(false, options)), [0xc2]);
|
|
95
|
-
assert.deepEqual(toArray(msgpack.encode(true, options)), [0xc3]);
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
// bin 8 -- 0xc4
|
|
99
|
-
// bin 16 -- 0xc5
|
|
100
|
-
// bin 32 -- 0xc6
|
|
101
|
-
it("c4-c6: bin 8/16/32", function() {
|
|
102
|
-
this.timeout(30000);
|
|
103
|
-
var bin;
|
|
104
|
-
bin = Buffer(1);
|
|
105
|
-
bin.fill(0);
|
|
106
|
-
assert.deepEqual(toArray(msgpack.encode(bin, options)), concat([0xc4, 1], bin));
|
|
107
|
-
|
|
108
|
-
bin = Buffer(256);
|
|
109
|
-
bin.fill(0);
|
|
110
|
-
assert.deepEqual(toArray(msgpack.encode(bin, options)), concat([0xc5, 1, 0], bin));
|
|
111
|
-
|
|
112
|
-
bin = Buffer(65536);
|
|
113
|
-
bin.fill(0);
|
|
114
|
-
assert.deepEqual(toArray(msgpack.encode(bin, options)), concat([0xc6, 0, 1, 0, 0], bin));
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
// float 32 -- 0xca -- NOT SUPPORTED
|
|
118
|
-
// float 64 -- 0xcb
|
|
119
|
-
it("ca-cb: float 32/64", function() {
|
|
120
|
-
assert.deepEqual(toArray(msgpack.encode(0.5, options)), [0xcb, 63, 224, 0, 0, 0, 0, 0, 0]);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
// uint 8 -- 0xcc
|
|
124
|
-
// uint 16 -- 0xcd
|
|
125
|
-
// uint 32 -- 0xce
|
|
126
|
-
// uint 64 -- 0xcf -- NOT SUPPORTED
|
|
127
|
-
it("cc-cf: uint 8/16/32/64", function() {
|
|
128
|
-
assert.deepEqual(toArray(msgpack.encode(0xFF, options)), [0xcc, 0xFF]);
|
|
129
|
-
assert.deepEqual(toArray(msgpack.encode(0xFFFF, options)), [0xcd, 0xFF, 0xFF]);
|
|
130
|
-
assert.deepEqual(toArray(msgpack.encode(0x7FFFFFFF, options)), [0xce, 0x7F, 0xFF, 0xFF, 0xFF]);
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
// int 8 -- 0xd0
|
|
134
|
-
// int 16 -- 0xd1
|
|
135
|
-
// int 32 -- 0xd2
|
|
136
|
-
// int 64 -- 0xd3 -- NOT SUPPORTED
|
|
137
|
-
it("d0-d3: int 8/16/32/64", function() {
|
|
138
|
-
assert.deepEqual(toArray(msgpack.encode(-0x80, options)), [0xd0, 0x80]);
|
|
139
|
-
assert.deepEqual(toArray(msgpack.encode(-0x8000, options)), [0xd1, 0x80, 0x00]);
|
|
140
|
-
assert.deepEqual(toArray(msgpack.encode(-0x80000000, options)), [0xd2, 0x80, 0x00, 0x00, 0x00]);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
// str 8 -- 0xd9
|
|
144
|
-
// str 16 -- 0xda
|
|
145
|
-
// str 32 -- 0xdb
|
|
146
|
-
it("d9-db: str 8/16/32", function() {
|
|
147
|
-
this.timeout(30000);
|
|
148
|
-
var str, src = "a";
|
|
149
|
-
for (var i = 0; i < 17; i++) src += src;
|
|
150
|
-
|
|
151
|
-
str = src.substr(0, 0xFF);
|
|
152
|
-
assert.deepEqual(toArray(msgpack.encode(str, options)), concat([0xd9, 0xFF], Buffer(str)));
|
|
153
|
-
|
|
154
|
-
str = src.substr(0, 0x0100);
|
|
155
|
-
assert.deepEqual(toArray(msgpack.encode(str, options)), concat([0xda, 0x01, 0x00], Buffer(str)));
|
|
156
|
-
|
|
157
|
-
str = src.substr(0, 0xFFFF);
|
|
158
|
-
assert.deepEqual(toArray(msgpack.encode(str, options)), concat([0xda, 0xFF, 0xFF], Buffer(str)));
|
|
159
|
-
|
|
160
|
-
str = src.substr(0, 0x010000);
|
|
161
|
-
assert.deepEqual(toArray(msgpack.encode(str, options)), concat([0xdb, 0x00, 0x01, 0x00, 0x00], Buffer(str)));
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
// array 16 -- 0xdc
|
|
165
|
-
// array 32 -- 0xdd
|
|
166
|
-
it("dc-dd: array 16/32", function() {
|
|
167
|
-
this.timeout(30000);
|
|
168
|
-
var i, exp;
|
|
169
|
-
var src = new Array(256);
|
|
170
|
-
for (i = 0; i < 256; i++) src[i] = i & 0x7F;
|
|
171
|
-
exp = [0xdc, 0x01, 0x00].concat(src);
|
|
172
|
-
assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
|
|
173
|
-
|
|
174
|
-
for (i = 0; i < 8; i++) src = src.concat(src);
|
|
175
|
-
exp = [0xdd, 0x00, 0x01, 0x00, 0x00].concat(src);
|
|
176
|
-
assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
// map 16 -- 0xde
|
|
180
|
-
// map 32 -- 0xdf
|
|
181
|
-
it("de-df: map 16/32", function() {
|
|
182
|
-
this.timeout(30000);
|
|
183
|
-
var i, actual;
|
|
184
|
-
var map = {};
|
|
185
|
-
for (i = 0; i < 256; i++) map[i] = i;
|
|
186
|
-
actual = msgpack.encode(map, options);
|
|
187
|
-
// check only headers because order may vary
|
|
188
|
-
assert.equal(actual[0], 0xde);
|
|
189
|
-
assert.equal(actual[1], 1);
|
|
190
|
-
assert.equal(actual[2], 0);
|
|
191
|
-
|
|
192
|
-
for (i = 256; i < 65536; i++) map[i] = i;
|
|
193
|
-
actual = msgpack.encode(map, options);
|
|
194
|
-
assert.equal(actual[0], 0xdf);
|
|
195
|
-
assert.equal(actual[1], 0);
|
|
196
|
-
assert.equal(actual[2], 1);
|
|
197
|
-
assert.equal(actual[3], 0);
|
|
198
|
-
assert.equal(actual[4], 0);
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
// negative fixint -- 0xe0 - 0xff
|
|
202
|
-
it("e0-ff: negative fixint", function() {
|
|
203
|
-
for (var i = -32; i <= -1; i++) {
|
|
204
|
-
assert.deepEqual(toArray(msgpack.encode(i, options)), [i & 0xFF]);
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
function toArray(buffer) {
|
|
210
|
-
return Array.prototype.slice.call(buffer);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function concat(buf) {
|
|
214
|
-
return Array.prototype.concat.apply([], Array.prototype.map.call(arguments, toArray));
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
function NOP() {
|
|
218
|
-
}
|