emscripten/third_party/lzma.js/test-full.js

79 строки
1.9 KiB
JavaScript

// js -m -n -e "load('lzma-full.js')" test-full.js
function assertEq(a, b) {
if (a !== b) {
throw 'Should have been equal: ' + a + ' : ' + b;
}
return false;
}
function assertNeq(a, b) {
try {
assertEq(a, b);
} catch(e) {
return;
}
throw 'Should have not been equal: ' + a + ' : ' + b;
}
function byteCompare(a, b) {
assertEq(a.length, b.length);
for (var i = 0; i < a.length; i++) {
assertEq(a[i]&255, b[i]&255);
}
}
function testSimple() {
print('testing simple..');
var data = [100, 200, 200, 200, 200, 200, 200, 100, 100, 200, 200, 200, 200, 0, 1];
var compressed = LZMA.compress(data);
var decompressed = LZMA.decompress(compressed);
byteCompare(data, decompressed);
assertNeq(data.length, compressed.length);
}
function testBig() {
print('testing big..');
var seed1 = 100;
var seed2 = 200;
var last = 255;
function fakeRandom() {
// numbers from http://triptico.com/docs/sp_random.html
seed1 = ((seed1 * 58321) + 11113) | 0;
var ret = (seed1 >> 16) & 255;
seed2 = ((seed2 * 58321) + 11113) | 0;
if (seed2 % 5) {
return last;
}
last = ret;
return last;
}
print(' ..generating data..');
var size = 1*1024*1024;
var data = new Array(size);
for (var i = 0; i < size; i++) {
data[i] = fakeRandom();
}
print(' ..compressing ' + data.length + ' bytes..');
var t = Date.now();
var compressed = LZMA.compress(data);
print(' ..took ' + ((Date.now() - t)/1000).toFixed(2) + ' secs');
print(' ..decompressing ' + compressed.length + ' bytes..');
t = Date.now();
var decompressed = LZMA.decompress(compressed);
print(' ..took ' + ((Date.now() - t)/1000).toFixed(2) + ' secs');
print(' ..got ' + decompressed.length + ' bytes..');
byteCompare(data, decompressed);
assertNeq(data.length, compressed.length);
print(' ..decompressed == original');
}
testSimple();
testBig();
print('ok.');