NewsBlur/node/node_modules/wuzzy/tests/ngram.js
2019-04-13 14:44:10 -04:00

114 lines
No EOL
1.7 KiB
JavaScript

/* Tests for the n-gram edit logic. */
var expect = require('chai').expect;
var wuzzy = require('../index');
describe('n-gram tests', function () {
it('should correctly calcuate the n-gram distance', function () {
var tests = [
{
a: ['M', 'A', 'R', 'T', 'H', 'A'],
b: ['M', 'A', 'R', 'H', 'T', 'A'],
exp: .667
},
{
a: 'MARTHA',
b: 'MARHTA',
exp: .667
},
{
a: ['D', 'W', 'A', 'Y', 'N', 'E'],
b: ['D', 'U', 'A', 'N', 'E'],
exp: .583
},
{
a: 'DWAYNE',
b: 'DUANE',
exp: .583
},
{
a: ['D', 'I', 'X', 'O', 'N'],
b: ['D', 'I', 'C', 'K', 'S', 'O', 'N', 'X'],
exp: .5
},
{
a: 'DIXON',
b: 'DICKSONX',
exp: .5
},
{
a: ['A', 'B', 'C', 'V', 'W', 'X', 'Y', 'Z'],
b: ['C', 'A', 'B', 'V', 'W', 'X', 'Y', 'Z'],
exp: .625
},
{
a: 'ABCVWXYZ',
b: 'CABVWXYZ',
exp: .625
},
{
a: ['A', 'L'],
b: ['A', 'L'],
exp: 1
},
{
a: 'AL',
b: 'AL',
exp: 1
},
{
a: ['A'],
b: ['A', 'A'],
exp: .5
},
{
a: 'A',
b: 'AA',
exp: .5
},
{
a: ['A'],
b: ['A'],
exp: 1
},
{
a: 'A',
b: 'A',
exp: 1
},
{
a: ['A'],
b: ['B'],
exp: 0
},
{
a: 'A',
b: 'B',
exp: 0
},
{
a: ['J', 'O', 'E'],
b: ['M', 'A', 'T', 'T'],
exp: 0
},
{
a: 'JOE',
b: 'MATT',
exp: 0
},
{
a: ['J', 'O', 'E'],
b: ['J', 'O', 'E'],
exp: 1
},
{
a: 'JOE',
b: 'JOE',
exp: 1
}
];
tests.forEach(function (el) {
var actual = Math.round(wuzzy.ngram(el.a, el.b) * 1000) / 1000;
expect(actual).to.equal(el.exp);
});
});
});