garbage
Version:
generate garbage json data
101 lines (85 loc) • 2.37 kB
JavaScript
var garbage = module.exports = function (count) {
if (!count) count = 20;
return generate(count)[1];
};
garbage.json = garbage;
function generate (count) {
if (count === undefined) count = 20;
var types = [ 'array', 'object', 'string', 'number', 'boolean' ];
var ix = Math.floor(Math.random() * types.length);
var type = types[ix];
return generate[type](count);
}
garbage.size = function () {
var m = Math.random(), n = Math.random();
return Math.abs(Math.floor(5 / (1 - n * n) - 5 + m * 5));
};
generate.boolean = function () {
var n = Math.random();
return [ 1, n > 0.5 ];
};
garbage.boolean = function () {
return generate.boolean(count)[1];
};
generate.number = function () {
var n = Math.random();
return [ 1, Math.tan((n - 0.5) * Math.PI) ];
};
garbage.number = function () {
return generate.number(count)[1];
};
generate.array = function (count) {
var res = [];
if (count <= 0) return res;
var len = garbage.size();
var size = 1;
for (var i = 0; i < len && size < count; i++) {
var x = generate(--count - len);
res.push(x[1]);
size += x[0];
}
return [ size, res ];
};
garbage.array = function (count) {
return generate.array(count)[1];
};
generate.object = function (count) {
if (count === undefined) count = 20;
var res = {};
if (count <= 0) return res;
var len = garbage.size();
var size = 1;
for (var i = 0; i < len && size < count; i++) {
var key = generate.string()[1];
var x = generate(--count - len);
res[key] = x[1];
size += x[0];
}
return [ size, res ];
};
garbage.object = function (count) {
return generate.object(count)[1];
};
generate.string = function () {
var len = Math.floor(
Math.random() * Math.random() * 20
+ Math.random() * 2
);
var res = [];
for (var i = 0; i < len; i++) {
var c = garbage.char();
res.push(c);
}
return [ 1, res.join('') ];
};
garbage.string = function () {
return generate.string()[1];
};
garbage.char = function () {
var charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ 'abcdefghijklmnopqrstuvwxyz'
+ '0123456789`~!@#$%^&*()-_=+[]{}|\\:;'
+ '\'",.<>?/ \t\n'
;
return charset.charAt(Math.floor(Math.random() * charset.length));
};