You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
4.4 KiB
168 lines
4.4 KiB
var levenshtien = require("./../index"); |
|
|
|
var assert = require("assert"); |
|
|
|
describe("Damerau - Levenshtein", function() { |
|
describe("Equality", function() { |
|
it("returns 0 steps for equal strings", function() { |
|
assert.deepEqual(levenshtien("test", "test"), { |
|
steps: 0, |
|
relative: 0, |
|
similarity: 1 |
|
}); |
|
}); |
|
}); |
|
|
|
describe("Additions", function() { |
|
it("returns 1 step when appending one char", function() { |
|
assert.deepEqual(levenshtien("test", "tests"), { |
|
steps: 1, |
|
relative: 1 / 5, |
|
similarity: 1 - 1 / 5 |
|
}); |
|
}); |
|
|
|
it("returns 1 step when prepending one char", function() { |
|
assert.deepEqual(levenshtien("test", "stest"), { |
|
steps: 1, |
|
relative: 1 / 5, |
|
similarity: 1 - 1 / 5 |
|
}); |
|
}); |
|
|
|
it("returns 2 steps when appending two char", function() { |
|
assert.deepEqual(levenshtien("test", "mytest"), { |
|
steps: 2, |
|
relative: 2 / 6, |
|
similarity: 1 - 2 / 6 |
|
}); |
|
}); |
|
|
|
it("returns 7 steps when appending seven char", function() { |
|
assert.deepEqual(levenshtien("test", "mycrazytest"), { |
|
steps: 7, |
|
relative: 7 / 11, |
|
similarity: 1 - 7 / 11 |
|
}); |
|
}); |
|
|
|
it("returns 9 steps when prepend two chars and append seven chars", function() { |
|
assert.deepEqual(levenshtien("test", "mytestiscrazy"), { |
|
steps: 9, |
|
relative: 9 / 13, |
|
similarity: 1 - 9 / 13 |
|
}); |
|
}); |
|
}); |
|
|
|
|
|
describe("Addition of repeated chars", function() { |
|
it("returns 1 step when repeating a character", function() { |
|
assert.deepEqual(levenshtien("test", "teest"), { |
|
steps: 1, |
|
relative: 1 / 5, |
|
similarity: 1 - 1 / 5 |
|
}); |
|
}); |
|
|
|
it("returns 2 step when repeating a character twice", function() { |
|
assert.deepEqual(levenshtien("test", "teeest"), { |
|
steps: 2, |
|
relative: 2 / 6, |
|
similarity: 1 - 2 / 6 |
|
}); |
|
}); |
|
}); |
|
|
|
|
|
describe("#Deletion", function() { |
|
it("returns 1 step when removing one char", function() { |
|
assert.deepEqual(levenshtien("test", "tst"), { |
|
steps: 1, |
|
relative: 1 / 4, |
|
similarity: 1 - 1 / 4 |
|
}); |
|
}); |
|
}); |
|
|
|
|
|
describe("Transposition", function() { |
|
it("returns 1 step when transposing one char", function() { |
|
assert.deepEqual(levenshtien("test", "tset"), { |
|
steps: 1, |
|
relative: 1 / 4, |
|
similarity: 1 - 1 / 4 |
|
}); |
|
}); |
|
}); |
|
|
|
|
|
describe("Addition with transposition", function() { |
|
it("returns 2 step when transposing one char and append another", function() { |
|
assert.deepEqual(levenshtien("test", "tsets"), { |
|
steps: 2, |
|
relative: 2 / 5, |
|
similarity: 1 - 2 / 5 |
|
}); |
|
}); |
|
it("returns 2 step when transposing a char and repeating it", function() { |
|
assert.deepEqual(levenshtien("test", "tsset"), { |
|
steps: 2, |
|
relative: 2 / 5, |
|
similarity: 1 - 2 / 5 |
|
}); |
|
}); |
|
}); |
|
|
|
describe("Transposition of multiple chars", function() { |
|
it("returns 1 step when transposing two neighbouring characters", function() { |
|
assert.deepEqual(levenshtien("banana", "banaan"), { |
|
steps: 1, |
|
relative: 1 / 6, |
|
similarity: 1 - 1 / 6 |
|
}); |
|
}); |
|
|
|
it("returns 2 step when transposing two neighbouring characters by two places", function() { |
|
assert.deepEqual(levenshtien("banana", "nabana"), { |
|
steps: 2, |
|
relative: 2 / 6, |
|
similarity: 1 - 2 / 6 |
|
}); |
|
}); |
|
|
|
it("returns 2 step when transposing two pairs of characters", function() { |
|
assert.deepEqual(levenshtien("banana", "abnaan"), { |
|
steps: 2, |
|
relative: 2 / 6, |
|
similarity: 1 - 2 / 6 |
|
}); |
|
}); |
|
}); |
|
|
|
describe("Empty strings", function() { |
|
it("returns 0 step and 0 relative when both are empty", function() { |
|
assert.deepEqual(levenshtien("", ""), { |
|
steps: 0, |
|
relative: 0, |
|
similarity: 1 |
|
}); |
|
}); |
|
|
|
it("returns steps equal to first string lenght when second string is empty", function() { |
|
assert.deepEqual(levenshtien("test", ""), { |
|
steps: 4, |
|
relative: 4 / 4, |
|
similarity: 0 |
|
}); |
|
}); |
|
|
|
it("returns steps equal to second string lenght when first string is empty", function() { |
|
assert.deepEqual(levenshtien("", "test"), { |
|
steps: 4, |
|
relative: 1, |
|
similarity: 0 |
|
}); |
|
}); |
|
}); |
|
});
|
|
|