fcoin/test/bloom-test.js
Christopher Jeffrey cf041e1fad
Revert "hash bloom"
This reverts commit f7dd8a6e8a.
2016-05-21 17:38:06 -07:00

120 lines
3.6 KiB
JavaScript

var bcoin = require('../').set('main');
var assert = require('assert');
describe('Bloom', function() {
this.timeout(20000);
it('should do proper murmur3', function() {
var murmur3 = bcoin.bloom.murmur3;
assert.equal(murmur3(new Buffer('', 'ascii'), 0), 0);
assert.equal(murmur3(new Buffer('', 'ascii'), 0xfba4c795), 0x6a396f08);
assert.equal(murmur3(new Buffer('00', 'ascii'), 0xfba4c795), 0x2a101837);
assert.equal(murmur3(new Buffer('hello world', 'ascii'), 0), 0x5e928f0f);
});
it('should test and add stuff', function() {
var b = new bcoin.bloom(512, 10, 156);
b.add('hello', 'ascii');
assert(b.test('hello', 'ascii'));
assert(!b.test('hello!', 'ascii'));
assert(!b.test('ping', 'ascii'));
b.add('hello!', 'ascii');
assert(b.test('hello!', 'ascii'));
assert(!b.test('ping', 'ascii'));
b.add('ping', 'ascii');
assert(b.test('ping', 'ascii'));
});
it('should test regular filter', function() {
var filter = bcoin.bloom.fromRate(210000, 0.00001, -1);
filter.tweak = 0xdeadbeef;
// ~1m operations
for (var i = 0; i < 1000; i++) {
var str = 'foobar' + i;
filter.add(str, 'ascii');
var j = i;
do {
var str = 'foobar' + j;
assert(filter.test(str, 'ascii') === true);
assert(filter.test(str + '-', 'ascii') === false);
} while (j--);
}
});
it('should test rolling filter', function() {
var filter = new bcoin.bloom.rolling(210000, 0.00001);
filter.tweak = 0xdeadbeef;
// ~1m operations
for (var i = 0; i < 1000; i++) {
var str = 'foobar' + i;
filter.add(str, 'ascii');
var j = i;
do {
var str = 'foobar' + j;
assert(filter.test(str, 'ascii') === true);
assert(filter.test(str + '-', 'ascii') === false);
} while (j--);
}
});
it('should handle rolling generations', function() {
var filter = new bcoin.bloom.rolling(50, 0.00001);
filter.tweak = 0xdeadbeee;
for (var i = 0; i < 25; i++) {
var str = 'foobar' + i;
filter.add(str, 'ascii');
var j = i;
do {
var str = 'foobar' + j;
assert(filter.test(str, 'ascii') === true);
assert(filter.test(str + '-', 'ascii') === false);
} while (j--);
}
for (var i = 25; i < 50; i++) {
var str = 'foobar' + i;
filter.add(str, 'ascii');
var j = i;
do {
var str = 'foobar' + j;
assert(filter.test(str, 'ascii') === true, str);
assert(filter.test(str + '-', 'ascii') === false, str);
} while (j--);
}
for (var i = 50; i < 75; i++) {
var str = 'foobar' + i;
filter.add(str, 'ascii');
var j = i;
do {
var str = 'foobar' + j;
assert(filter.test(str, 'ascii') === true, str);
assert(filter.test(str + '-', 'ascii') === false, str);
} while (j--);
}
for (var i = 75; i < 100; i++) {
var str = 'foobar' + i;
filter.add(str, 'ascii');
var j = i;
do {
var str = 'foobar' + j;
assert(filter.test(str, 'ascii') === true, str);
assert(filter.test(str + '-', 'ascii') === false, str);
} while (j-- > 25);
assert(filter.test('foobar 24', 'ascii') === false);
}
for (var i = 100; i < 125; i++) {
var str = 'foobar' + i;
filter.add(str, 'ascii');
var j = i;
do {
var str = 'foobar' + j;
assert(filter.test(str, 'ascii') === true, str);
assert(filter.test(str + '-', 'ascii') === false, str);
} while (j-- > 50);
}
assert(filter.test('foobar 49', 'ascii') === false);
});
});