stringzy
Version:
A versatile string manipulation library providing a range of text utilities for JavaScript and Node.js applications.
62 lines (61 loc) • 4.66 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_test_1 = require("node:test");
const node_assert_1 = __importDefault(require("node:assert"));
const stringSimilarity_1 = require("../../analyzing/stringSimilarity");
(0, node_test_1.describe)('stringSimilarity', () => {
(0, node_test_1.describe)('Param error handling', () => {
(0, node_test_1.it)('should throw if text arguments are not a string', () => {
node_assert_1.default.throws(() => (0, stringSimilarity_1.stringSimilarity)(123, 'abc'), /Both text arguments must be strings/i);
node_assert_1.default.throws(() => (0, stringSimilarity_1.stringSimilarity)('abc', null), /Both text arguments must be strings/i);
});
(0, node_test_1.it)('should throw if algorithm argument is invalid', () => {
node_assert_1.default.throws(() => (0, stringSimilarity_1.stringSimilarity)('abc', 'abc', 'invalid'), /Invalid optional algorithm param. Should be 'Levenshtein' or 'Damerau-Levenshtein'/i);
});
});
(0, node_test_1.describe)('Basic similarity cases', () => {
(0, node_test_1.it)('should return 100% for identical strings', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('abc', 'abc', 'Levenshtein'), 100.0);
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('abc', 'abc', 'Damerau-Levenshtein'), 100.0);
});
(0, node_test_1.it)('should return 100% for two empty strings', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('', '', 'Levenshtein'), 100.0);
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('', '', 'Damerau-Levenshtein'), 100.0);
});
(0, node_test_1.it)('should return 0% for empty vs non-empty string', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('abc', '', 'Levenshtein'), 0.0);
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('abc', '', 'Damerau-Levenshtein'), 0.0);
});
(0, node_test_1.it)('should return 0% for same letters with different case (case-sensitive)', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('ABC', 'abc', 'Levenshtein'), 0.0);
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('ABC', 'abc', 'Damerau-Levenshtein'), 0.0);
});
(0, node_test_1.it)('should return 0% for completely different strings (abc vs xyz)', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('abc', 'xyz', 'Levenshtein'), 0.0);
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('abc', 'xyz', 'Damerau-Levenshtein'), 0.0);
});
});
(0, node_test_1.describe)('Algorithm comparison: Levenshtein vs Damerau-Levenshtein', () => {
(0, node_test_1.it)('should return 0% for transposition using Levenshtein (ab vs ba)', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('ab', 'ba', 'Levenshtein'), 0.0);
});
(0, node_test_1.it)('should return 50% for transposition using Damerau-Levenshtein (ab vs ba)', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('ab', 'ba', 'Damerau-Levenshtein'), 50.0);
});
(0, node_test_1.it)('should return 50% for near transposition using Levenshtein (acbd vs abcd)', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('acbd', 'abcd', 'Levenshtein'), 50.0);
});
(0, node_test_1.it)('should return 75% for near transposition using Damerau-Levenshtein (acbd vs abcd)', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('acbd', 'abcd', 'Damerau-Levenshtein'), 75.0);
});
(0, node_test_1.it)('should return 75% for single insertion using Levenshtein (abc vs abcd)', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('abc', 'abcd', 'Levenshtein'), 75.0);
});
(0, node_test_1.it)('should return 75% for single deletion using Levenshtein (abcd vs abc)', () => {
node_assert_1.default.strictEqual((0, stringSimilarity_1.stringSimilarity)('abcd', 'abc', 'Levenshtein'), 75.0);
});
});
});
;