| 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 |
| }); |
| }); |
| }); |
| }); |