From d7565098846d544aea01d34ba11b26f1b4e5cea6 Mon Sep 17 00:00:00 2001 From: rgizz Date: Tue, 21 Nov 2023 18:19:04 -0600 Subject: [PATCH 01/24] feat: add feat/hamming2 Beginning of addition of this feature --- .../base/distances/hamming2/lib/main.js | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js new file mode 100644 index 000000000000..010d2b995b6e --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js @@ -0,0 +1,68 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2023 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var isString = require( '@stdlib/assert/is-string' ).isPrimitive; +var format = require( '@stdlib/string/format' ); + + +// MAIN // + +/** +* Calculates the Hamming (edit) distance between two strings, which. +* must be of identical length. +* +* @param {string} s1 - first string value +* @param {string} s2 - second string value +* @throws {TypeError} first argument must be a string +* @throws {TypeError} second argument must be a string +* @returns {NonNegativeInteger} hamming distance, or -1 if +* strings are of unequal length +* +* @example +* var distance = levenshteinDistance( 'algorithm', 'altruistic' ); +* // throws +*/ +function hammingDistance( s1, s2 ) { + var hammdist = 0; + var i; + + if ( !isString( s1 ) ) { + throw new TypeError( format( 'invalid argument. First argument must be a string. Value: `%s`.', s1 ) ); + } + if ( !isString( s2 ) ) { + throw new TypeError( format( 'invalid argument. Second argument must be a string. Value: `%s`.', s2 ) ); + } + if ( s1.length !== s2.length ) { + return -1; + } + for (i = 0; i < s1.length; i++) { + if (s1[i] !== s2[i]) { + hammdist += 1; + } + } + return hammdist; +} + + +// EXPORTS // + +module.exports = hammingDistance; From e0a1024df54d5989bb3cc7d6cd6dc5b0ea54e2cd Mon Sep 17 00:00:00 2001 From: rgizz Date: Wed, 22 Nov 2023 13:24:11 -0600 Subject: [PATCH 02/24] feat: add left-out export line fix minor bug --- .../@stdlib/string/base/distances/hamming2/lib/main.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js index 010d2b995b6e..8b7aafd89a0d 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js @@ -66,3 +66,4 @@ function hammingDistance( s1, s2 ) { // EXPORTS // module.exports = hammingDistance; + From 64e79e313e0be7241ace9ed387a87c1426120527 Mon Sep 17 00:00:00 2001 From: rgizz Date: Fri, 24 Nov 2023 19:51:13 -0600 Subject: [PATCH 03/24] feat: add test.js file Adding test.js --- .../base/distances/hamming2/test/test.js | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js new file mode 100644 index 000000000000..2f4460ea24ce --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js @@ -0,0 +1,150 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2023 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var hammingDistance = require( './../lib' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof hammingDistance, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function throws an error if not provided a string as its first argument', function test( t ) { + var values; + var i; + + values = [ + 5, + NaN, + true, + false, + null, + void 0, + [], + {}, + function noop() {} + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[i] ), TypeError, 'throws an error when provided '+values[i] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + hammingDistance( value, 'dummy' ); + }; + } +}); + +tape( 'the function throws an error if not provided a string as its second argument', function test( t ) { + var values; + var i; + + values = [ + 5, + NaN, + true, + false, + null, + void 0, + [], + {}, + function noop() {} + ]; + + for ( i = 0; i < values.length; i++ ) { + t.throws( badValue( values[i] ), TypeError, 'throws an error when provided '+values[i] ); + } + t.end(); + + function badValue( value ) { + return function badValue() { + hammingDistance( 'dummy', value ); + }; + } +}); + +tape( 'the function returns -1 as a sentinel value if provided with strings of unequal length', function test( t ) { + var expected = -1; + var arg1 = 'length'; + var arg2 = 'differs'; + t.strictEqual( hammingDistance( arg1, arg2 ), expected, 'returns expected value' ); + t.end(); +}); + +tape( 'the function calculates the Hamming (edit) distance between two strings', function test( t ) { + var expected; + var values; + var i; + + values = [ + [ '1638452297', '4444884442' ], // 10 + [ '', '' ], // 0 + [ 'a', 'a' ], // 0 + [ 'a', 'b' ], // 1 + [ 'xy', 'xy' ], // 0 + [ 'xx', 'xy' ], // 1 + [ 'frog', 'blog' ], // 2 + [ 'fly', 'ant' ], // 3 + [ 'hello', 'hallo' ], // 1 + [ 'congratulations', 'conmgeautlatins' ] // 9 + ]; + + expected = [ 10, 0, 0, 1, 0, 1, 2, 3, 1, 9 ]; + + for ( i = 0; i < values.length; i++ ) { + t.strictEqual( hammingDistance( values[i][0], values[i][1] ), expected[i], 'returns expected value' ); + } + t.end(); +}); + +/** ************************** +* COMMENTED OUT. +* I DO NOT THINK WE ARE DOING ANYTHING OTHER THAN ASCII AT THIS POINT. +* +* tape( 'the function calculates the Hamming (edit) distance between two strings with Unicode characters', function test( t ) { +* var expected; +* var values; +* var i; +* +* values = [ +* [ 'fóoBár', 'fóo' ], +* [ 'Привет', 'теи' ], +* [ '_Світ-прекрасний', 'прекрасний' ], +* [ '🤨🥹', '🥹' ], +* [ 'हिंदी', 'தமிழ்' ], +* [ '𝄞', '\uD834\uDD1E' ] +* ]; +* +* expected = [ 3, 5, 6, 2, 5, 0 ]; +* +* for ( i = 0; i < values.length; i++ ) { +* t.strictEqual( levenshteinDistance( values[i][0], values[i][1] ), expected[i], 'returns expected value' ); +* } +* t.end(); +* }); +*/ From 2e113465671f107d60fbfd597f977af6259e50e8 Mon Sep 17 00:00:00 2001 From: rgizz Date: Fri, 24 Nov 2023 19:53:10 -0600 Subject: [PATCH 04/24] feat: minor correction in main.js use of wrong term corrected --- .../@stdlib/string/base/distances/hamming2/lib/main.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js index 8b7aafd89a0d..2c5822b511d6 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js @@ -38,8 +38,8 @@ var format = require( '@stdlib/string/format' ); * strings are of unequal length * * @example -* var distance = levenshteinDistance( 'algorithm', 'altruistic' ); -* // throws +* var distance = hammingDistance( 'algorithm', 'altruistic' ); +* // throws -1 */ function hammingDistance( s1, s2 ) { var hammdist = 0; @@ -66,4 +66,3 @@ function hammingDistance( s1, s2 ) { // EXPORTS // module.exports = hammingDistance; - From 887e0f6eac645e96a34677816b3dcf3d543c9145 Mon Sep 17 00:00:00 2001 From: rgizz Date: Sat, 25 Nov 2023 14:38:59 -0600 Subject: [PATCH 05/24] feat: add README.md add README.md --- .../string/base/distances/hamming2/README.md | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/README.md diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md b/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md new file mode 100644 index 000000000000..1a2b9faf04a2 --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md @@ -0,0 +1,102 @@ + + +# hammingDistance + +> Calculate the [Hamming][hamming] (edit) distance between two strings of equal length. + + + +
+ +## Usage + +```javascript +var hammingDistance = require( '@stdlib/string/base/distances/hamming2' ); +``` + +#### hammingDistance( s1, s2 ) + +Calculates the [Hamming][hamming] (edit) distance between two strings of equal length. + +```javascript +var dist = hammingDistance( 'frog', 'from' ); +// returns 1 + +dist = hammingDistance( 'tooth', 'froth' ); +// returns 2 + +dist = hammingDistance( 'cat', 'cot' ); +// returns 1 + +dist = hammingDistance( '', '' ); +// returns 0 + +dist = hammingDistance( '1638452297', '2311638451' ); +// returns 10 +``` + +
+ + + + + +
+ +## Examples + +```javascript +var hammingDistance = require( '@stdlib/string/base/distances/hamming2' ); + +var dist = hammingDistance( 'algorithms', 'altruistic' ); +// returns 7 + +dist = hammingDistance( 'elephant', 'Tashkent' ); +// returns 6 + +dist = hammingDistance( 'javascript', 'typescript' ); +// returns 4 + +dist = hammingDistance( 'hamming', 'ladybug' ); +// returns 5 +``` + +
+ + + + + + + + + + + + + + From 809d8e88959ba909d391698ef6c4b9ac88f7a334 Mon Sep 17 00:00:00 2001 From: rgizz Date: Sat, 25 Nov 2023 14:47:55 -0600 Subject: [PATCH 06/24] feat: edit README.md add explanation of returning sentinel value of -1 if strings differ in length --- .../@stdlib/string/base/distances/hamming2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md b/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md index 1a2b9faf04a2..493604a0720e 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md @@ -34,7 +34,7 @@ var hammingDistance = require( '@stdlib/string/base/distances/hamming2' ); #### hammingDistance( s1, s2 ) -Calculates the [Hamming][hamming] (edit) distance between two strings of equal length. +Calculates the [Hamming][hamming] (edit) distance between two strings of equal length. If the two string differ in length the Hamming distance is not defined. Given input strings of unequal length, this package returns a sentinel value of -1. ```javascript var dist = hammingDistance( 'frog', 'from' ); From c17ab2423ef2bea0e4578689f0e77a2b2e8b4e68 Mon Sep 17 00:00:00 2001 From: rgizz Date: Sun, 3 Dec 2023 16:45:39 -0600 Subject: [PATCH 07/24] feat: add cautionary note to readme Strings outside the Basic Multilingual Plane are warned against --- .../@stdlib/string/base/distances/hamming2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md b/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md index 493604a0720e..067605e83baa 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md @@ -34,7 +34,7 @@ var hammingDistance = require( '@stdlib/string/base/distances/hamming2' ); #### hammingDistance( s1, s2 ) -Calculates the [Hamming][hamming] (edit) distance between two strings of equal length. If the two string differ in length the Hamming distance is not defined. Given input strings of unequal length, this package returns a sentinel value of -1. +Calculates the [Hamming][hamming] (edit) distance between two strings of equal length. If the two string differ in length the Hamming distance is not defined. Given input strings of unequal length, this package returns a sentinel value of -1. NB. This package should perform as expected for strings composed of characters within the Basic Multilingual Plane. Anything beyond that may lead to surprises; it is assumed that input strings are valid and no checks are performed. ```javascript var dist = hammingDistance( 'frog', 'from' ); From 3872f422429f1099ce55a7421c28c0c63944c6d7 Mon Sep 17 00:00:00 2001 From: rgizz Date: Sun, 3 Dec 2023 16:50:52 -0600 Subject: [PATCH 08/24] feat: add package.json add package.json --- .../base/distances/hamming2/package.json | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/package.json diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/package.json b/lib/node_modules/@stdlib/string/base/distances/hamming2/package.json new file mode 100644 index 000000000000..64e8da6b38a7 --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/package.json @@ -0,0 +1,67 @@ +{ + "name": "@stdlib/string/base/distances/hamming2", + "version": "0.0.0", + "description": "Calculates the Hamming (edit) distance between two strings.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "stdstring", + "utilities", + "utility", + "utils", + "util", + "base", + "string", + "str", + "distances", + "distance", + "hamming2", + "edit" + ], + "__stdlib__": {} +} From 87c8a14471934b13990f8260a8714254cd08d55c Mon Sep 17 00:00:00 2001 From: rgizz Date: Sun, 3 Dec 2023 17:06:30 -0600 Subject: [PATCH 09/24] feat: add examples/index.js add the standard file examples/index/js --- .../base/distances/hamming2/examples/index.js | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js new file mode 100644 index 000000000000..05bf1f4d51e4 --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js @@ -0,0 +1,33 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2023 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var hammingDistance = require( './../lib' ); + +console.log( hammingDistance( 'algorithms', 'altruistic' ) ); +// => 7 + +console.log( hammingDistance( 'elephant', 'hippopod' ) ); +// => 7 + +console.log( hammingDistance( 'javascript', 'typescript' ) ); +// => 4 + +console.log( hammingDistance( 'hamming', 'hamster' ) ); +// => 4 From eaa7c2870c83190e39de1403dca21ab92105f95e Mon Sep 17 00:00:00 2001 From: rgizz Date: Mon, 4 Dec 2023 12:17:25 -0600 Subject: [PATCH 10/24] feat: add benchmark.js add standard file benchmark.js --- .../distances/hamming2/benchmark/benchmark.js | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/benchmark/benchmark.js diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/benchmark/benchmark.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/benchmark/benchmark.js new file mode 100644 index 000000000000..dc2780053df1 --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/benchmark/benchmark.js @@ -0,0 +1,65 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2023 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var pkg = require( './../package.json' ).name; +var hammingDistance = require( './../lib' ); + + +// MAIN // + +bench( pkg, function benchmark( b ) { + var values; + var value; + var out; + var i; + + values = [ + [ 'algorithms', 'altruistic' ], + [ '1638452297', '4444884447' ], + [ '', '' ], + [ 'z', 'a' ], + [ 'aaappppk', 'aardvark' ], + [ 'frog', 'flog' ], + [ 'fly', 'ant' ], + [ 'elephant', 'hippopod' ], + [ 'hippopod', 'elephant' ], + [ 'hippo', 'zzzzz' ], + [ 'hello', 'hallo' ], + [ 'congratulations', 'conmgeautlatins' ] + ]; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + value = values[ i%values.length ]; + out = hammingDistance( value[0], value[1] ); + if ( typeof out !== 'number' ) { + b.fail( 'should return a number' ); + } + } + b.toc(); + if ( typeof out !== 'number' ) { + b.fail( 'should return a number' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); From a93cf60b9b5d49e12620ea17cc082dfe8dc81e35 Mon Sep 17 00:00:00 2001 From: rgizz Date: Mon, 4 Dec 2023 13:34:40 -0600 Subject: [PATCH 11/24] feat: add repl.txt add standard file repl.txt --- .../base/distances/hamming2/docs/repl.txt | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt new file mode 100644 index 000000000000..896a22d46427 --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt @@ -0,0 +1,33 @@ + +{{alias}}( s1, s2 ) + Calculates the Hamming (edit) distance between two input strings. + + Parameters + ---------- + s1: string + First input string. + + s2: string + Second input string. + + Returns + ------- + dist: number + Hamming (edit) distance between two strings. + + Examples + -------- + > var dist = {{alias}}( 'algorithms', 'altruistic' ) + 7 + > dist = {{alias}}( 'elephant', 'hippopod' ) + 7 + > dist = {{alias}}( 'javascript', 'typescript' ) + 4 + > dist = {{alias}}( 'levenshtein', 'levitations' ) + 8 + > dist = {{alias}}( 'sacrifice', 'paradisal' ) + 8 + + See Also + -------- + From 3fd8b66481ae593cfe68d20a5b86ba754a4d54a2 Mon Sep 17 00:00:00 2001 From: rgizz Date: Mon, 4 Dec 2023 19:01:18 -0600 Subject: [PATCH 12/24] feat: add index.d.ts add standard file index.d.ts --- .../distances/hamming2/docs/types/index.d.ts | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts new file mode 100644 index 000000000000..beefa88df1ae --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts @@ -0,0 +1,45 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2023 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/** +* Calculates the Hamming (edit) distance between two strings. +* +* @param str1 - first string value +* @param str2 - second string value +* @returns Hamming distance +* +* @example +* var dist = hammingDistance( 'fly', 'ant' ); +* // returns 3 +* +* @example +* var dist = hammingDistance( 'algorithms', 'altruistic' ); +* // returns 7 +* +* @example +* var dist = hammingDistance( 'hippopod', 'elephant' ); +* // returns 7 +*/ +declare function hammingDistance( str1: string, str2: string ): number; + + +// EXPORTS // + +export = hammingDistance; From 5c8a5b87c992d4cdaf047f9e53dc4c83329d2139 Mon Sep 17 00:00:00 2001 From: rgizz Date: Mon, 4 Dec 2023 19:05:41 -0600 Subject: [PATCH 13/24] feat: add test.ts add standard file test.ts --- .../distances/hamming2/docs/types/test.ts | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/test.ts diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/test.ts b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/test.ts new file mode 100644 index 000000000000..45905bc3c7d9 --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/test.ts @@ -0,0 +1,58 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2023 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import hammingDistance = require( './index' ); + + +// TESTS // + +// The function returns a number... +{ + hammingDistance( '', '' ); // $ExpectType number +} + +// The compiler throws an error if the function is provided a first argument which is not a string... +{ + hammingDistance( true, '' ); // $ExpectError + hammingDistance( false, '' ); // $ExpectError + hammingDistance( null, '' ); // $ExpectError + hammingDistance( undefined, '' ); // $ExpectError + hammingDistance( 5, '' ); // $ExpectError + hammingDistance( [], '' ); // $ExpectError + hammingDistance( {}, '' ); // $ExpectError + hammingDistance( ( x: number ): number => x, '' ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is not a string... +{ + hammingDistance( '', true ); // $ExpectError + hammingDistance( '', false ); // $ExpectError + hammingDistance( '', null ); // $ExpectError + hammingDistance( '', undefined ); // $ExpectError + hammingDistance( '', 5 ); // $ExpectError + hammingDistance( '', [] ); // $ExpectError + hammingDistance( '', {} ); // $ExpectError + hammingDistance( '', ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + hammingDistance(); // $ExpectError + hammingDistance( '' ); // $ExpectError + hammingDistance( '', '', 3 ); // $ExpectError +} From a44794f1d184728f57dc9936ff235353900ca64c Mon Sep 17 00:00:00 2001 From: rgizz Date: Tue, 5 Dec 2023 17:47:43 -0600 Subject: [PATCH 14/24] feat: add lib/index.js add standard file lib/index.js --- .../base/distances/hamming2/lib/index.js | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 lib/node_modules/@stdlib/string/base/distances/hamming2/lib/index.js diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/index.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/index.js new file mode 100644 index 000000000000..cdceb48f5cda --- /dev/null +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/index.js @@ -0,0 +1,47 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2023 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* Calculate the Hamming (edit) distance between two strings. +* +* @module @stdlib/string/base/distances/hamming2 +* +* @example +* var hammingDistance = require( '@stdlib/string/base/distances/hamming2' ); +* +* var dist = hammingDistance( 'fly', 'ant' ); +* // returns 3 +* +* dist = hammingDistance( 'frog', 'blog' ); +* // returns 2 +* +* dist = hammingDistance( 'javascript', 'typescript' ); +* // returns 4 +*/ + + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; From 2faca7604a96d6a1155e6415c853a915567dd050 Mon Sep 17 00:00:00 2001 From: rgizz Date: Tue, 5 Dec 2023 17:57:06 -0600 Subject: [PATCH 15/24] feat: edit README.md revise README.md, correcting and rephrasing --- .../@stdlib/string/base/distances/hamming2/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md b/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md index 067605e83baa..89f64b57ec51 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md @@ -34,7 +34,13 @@ var hammingDistance = require( '@stdlib/string/base/distances/hamming2' ); #### hammingDistance( s1, s2 ) -Calculates the [Hamming][hamming] (edit) distance between two strings of equal length. If the two string differ in length the Hamming distance is not defined. Given input strings of unequal length, this package returns a sentinel value of -1. NB. This package should perform as expected for strings composed of characters within the Basic Multilingual Plane. Anything beyond that may lead to surprises; it is assumed that input strings are valid and no checks are performed. +Calculates the [Hamming][hamming] (edit) distance between two strings of equal length. If the two strings differ in length the Hamming distance is not defined. Addressing this, given input strings of unequal length, this package returns a sentinel value of -1. + +_Cautionary note_. This package should perform as +expected for strings composed of characters within the +Basic Multilingual Plane. Anything outside of that may +lead to surprises; it is assumed that input strings are +valid and no checks are performed. ```javascript var dist = hammingDistance( 'frog', 'from' ); From d781a065432f82c3f931564c18a546de9a70092a Mon Sep 17 00:00:00 2001 From: rgizz Date: Tue, 5 Dec 2023 18:06:23 -0600 Subject: [PATCH 16/24] feat: revise repl.txt revised repl.txt to add equal-length and sentinel value --- .../@stdlib/string/base/distances/hamming2/docs/repl.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt index 896a22d46427..4b722b778784 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt @@ -13,7 +13,8 @@ Returns ------- dist: number - Hamming (edit) distance between two strings. + Hamming (edit) distance between two equal-length strings. + Returns sentinel value -1 if the string lengths differ. Examples -------- From 329ea9c7219d9937f438a2cc7582446de4be064d Mon Sep 17 00:00:00 2001 From: rgizz Date: Tue, 5 Dec 2023 18:10:13 -0600 Subject: [PATCH 17/24] feat: further revise repl.txt further minor revisions for clarity and to be more informative --- .../@stdlib/string/base/distances/hamming2/docs/repl.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt index 4b722b778784..5d016362c6c3 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt @@ -1,6 +1,7 @@ {{alias}}( s1, s2 ) - Calculates the Hamming (edit) distance between two input strings. + Calculates the Hamming (edit) distance between two equal-length + input strings. Returns sentinel value -1 if the string lengths differ. Parameters ---------- @@ -14,7 +15,6 @@ ------- dist: number Hamming (edit) distance between two equal-length strings. - Returns sentinel value -1 if the string lengths differ. Examples -------- From 101ebe71f19981fc05dc2bcf0be694ce6082de07 Mon Sep 17 00:00:00 2001 From: rgizz Date: Tue, 5 Dec 2023 18:13:50 -0600 Subject: [PATCH 18/24] feat: revise index.d.ts to add information revise index.d.ts to state equal length requirement and sentinel value of -1 --- .../string/base/distances/hamming2/docs/types/index.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts index beefa88df1ae..e4c2e2e38733 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts @@ -19,7 +19,8 @@ // TypeScript Version: 4.1 /** -* Calculates the Hamming (edit) distance between two strings. +* Calculates the Hamming (edit) distance between two equal-length strings. +* Returns sentinel value of -1 if lengths differ. * * @param str1 - first string value * @param str2 - second string value From 6ed9c8c8eb2f6e1a4fee41e535c4de06f92edf2e Mon Sep 17 00:00:00 2001 From: rgizz Date: Wed, 6 Dec 2023 16:05:33 -0600 Subject: [PATCH 19/24] feat: minor revision to comment changed 'throws' to 'returns' --- .../@stdlib/string/base/distances/hamming2/lib/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js index 2c5822b511d6..cfb8c840c250 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js @@ -39,7 +39,7 @@ var format = require( '@stdlib/string/format' ); * * @example * var distance = hammingDistance( 'algorithm', 'altruistic' ); -* // throws -1 +* // returns -1 */ function hammingDistance( s1, s2 ) { var hammdist = 0; From ec7b342bda8f5325c2c9852315651e768b5297ea Mon Sep 17 00:00:00 2001 From: rgizz Date: Thu, 7 Dec 2023 17:39:58 -0600 Subject: [PATCH 20/24] feat: delete commented out code delete code relating to testing Unicode values --- .../base/distances/hamming2/test/test.js | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js index 2f4460ea24ce..b1851a3860c0 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js @@ -121,30 +121,3 @@ tape( 'the function calculates the Hamming (edit) distance between two strings', } t.end(); }); - -/** ************************** -* COMMENTED OUT. -* I DO NOT THINK WE ARE DOING ANYTHING OTHER THAN ASCII AT THIS POINT. -* -* tape( 'the function calculates the Hamming (edit) distance between two strings with Unicode characters', function test( t ) { -* var expected; -* var values; -* var i; -* -* values = [ -* [ 'fóoBár', 'fóo' ], -* [ 'Привет', 'теи' ], -* [ '_Світ-прекрасний', 'прекрасний' ], -* [ '🤨🥹', '🥹' ], -* [ 'हिंदी', 'தமிழ்' ], -* [ '𝄞', '\uD834\uDD1E' ] -* ]; -* -* expected = [ 3, 5, 6, 2, 5, 0 ]; -* -* for ( i = 0; i < values.length; i++ ) { -* t.strictEqual( levenshteinDistance( values[i][0], values[i][1] ), expected[i], 'returns expected value' ); -* } -* t.end(); -* }); -*/ From 5b3b9d1e84e00a008d045a5ce37fe3bc40da3941 Mon Sep 17 00:00:00 2001 From: rgizz Date: Thu, 7 Dec 2023 17:46:00 -0600 Subject: [PATCH 21/24] feat: added example of different-length strings added example illustrating -1 returned for different length strings --- .../@stdlib/string/base/distances/hamming2/examples/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js b/lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js index 05bf1f4d51e4..bd2f7a3ec64f 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js @@ -31,3 +31,6 @@ console.log( hammingDistance( 'javascript', 'typescript' ) ); console.log( hammingDistance( 'hamming', 'hamster' ) ); // => 4 + +console.log( hammingDistance( 'a', 'abcissa' ) ); +// => -1 From cce008926033944f33a6cfb48cd52abb5ac0ebac Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Fri, 15 Dec 2023 13:30:49 -0800 Subject: [PATCH 22/24] refactor: rename directory --- .../string/base/distances/{hamming2 => hamming}/README.md | 4 ++-- .../distances/{hamming2 => hamming}/benchmark/benchmark.js | 0 .../string/base/distances/{hamming2 => hamming}/docs/repl.txt | 0 .../distances/{hamming2 => hamming}/docs/types/index.d.ts | 0 .../base/distances/{hamming2 => hamming}/docs/types/test.ts | 0 .../base/distances/{hamming2 => hamming}/examples/index.js | 0 .../string/base/distances/{hamming2 => hamming}/lib/index.js | 4 ++-- .../string/base/distances/{hamming2 => hamming}/lib/main.js | 0 .../string/base/distances/{hamming2 => hamming}/package.json | 2 +- .../string/base/distances/{hamming2 => hamming}/test/test.js | 0 10 files changed, 5 insertions(+), 5 deletions(-) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/README.md (99%) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/benchmark/benchmark.js (100%) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/docs/repl.txt (100%) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/docs/types/index.d.ts (100%) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/docs/types/test.ts (100%) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/examples/index.js (100%) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/lib/index.js (94%) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/lib/main.js (100%) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/package.json (96%) rename lib/node_modules/@stdlib/string/base/distances/{hamming2 => hamming}/test/test.js (100%) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md b/lib/node_modules/@stdlib/string/base/distances/hamming/README.md similarity index 99% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/README.md rename to lib/node_modules/@stdlib/string/base/distances/hamming/README.md index 89f64b57ec51..3e7b454aaf0b 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/README.md +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/README.md @@ -29,7 +29,7 @@ limitations under the License. ## Usage ```javascript -var hammingDistance = require( '@stdlib/string/base/distances/hamming2' ); +var hammingDistance = require( '@stdlib/string/base/distances/hamming' ); ``` #### hammingDistance( s1, s2 ) @@ -70,7 +70,7 @@ dist = hammingDistance( '1638452297', '2311638451' ); ## Examples ```javascript -var hammingDistance = require( '@stdlib/string/base/distances/hamming2' ); +var hammingDistance = require( '@stdlib/string/base/distances/hamming' ); var dist = hammingDistance( 'algorithms', 'altruistic' ); // returns 7 diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/benchmark/benchmark.js b/lib/node_modules/@stdlib/string/base/distances/hamming/benchmark/benchmark.js similarity index 100% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/benchmark/benchmark.js rename to lib/node_modules/@stdlib/string/base/distances/hamming/benchmark/benchmark.js diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt b/lib/node_modules/@stdlib/string/base/distances/hamming/docs/repl.txt similarity index 100% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/docs/repl.txt rename to lib/node_modules/@stdlib/string/base/distances/hamming/docs/repl.txt diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts b/lib/node_modules/@stdlib/string/base/distances/hamming/docs/types/index.d.ts similarity index 100% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/index.d.ts rename to lib/node_modules/@stdlib/string/base/distances/hamming/docs/types/index.d.ts diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/test.ts b/lib/node_modules/@stdlib/string/base/distances/hamming/docs/types/test.ts similarity index 100% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/docs/types/test.ts rename to lib/node_modules/@stdlib/string/base/distances/hamming/docs/types/test.ts diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js b/lib/node_modules/@stdlib/string/base/distances/hamming/examples/index.js similarity index 100% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/examples/index.js rename to lib/node_modules/@stdlib/string/base/distances/hamming/examples/index.js diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/index.js b/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js similarity index 94% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/lib/index.js rename to lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js index cdceb48f5cda..6da237c42e93 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/index.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js @@ -21,10 +21,10 @@ /** * Calculate the Hamming (edit) distance between two strings. * -* @module @stdlib/string/base/distances/hamming2 +* @module @stdlib/string/base/distances/hamming * * @example -* var hammingDistance = require( '@stdlib/string/base/distances/hamming2' ); +* var hammingDistance = require( '@stdlib/string/base/distances/hamming' ); * * var dist = hammingDistance( 'fly', 'ant' ); * // returns 3 diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js b/lib/node_modules/@stdlib/string/base/distances/hamming/lib/main.js similarity index 100% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/lib/main.js rename to lib/node_modules/@stdlib/string/base/distances/hamming/lib/main.js diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/package.json b/lib/node_modules/@stdlib/string/base/distances/hamming/package.json similarity index 96% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/package.json rename to lib/node_modules/@stdlib/string/base/distances/hamming/package.json index 64e8da6b38a7..430734b22da9 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming2/package.json +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/package.json @@ -1,5 +1,5 @@ { - "name": "@stdlib/string/base/distances/hamming2", + "name": "@stdlib/string/base/distances/hamming", "version": "0.0.0", "description": "Calculates the Hamming (edit) distance between two strings.", "license": "Apache-2.0", diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js b/lib/node_modules/@stdlib/string/base/distances/hamming/test/test.js similarity index 100% rename from lib/node_modules/@stdlib/string/base/distances/hamming2/test/test.js rename to lib/node_modules/@stdlib/string/base/distances/hamming/test/test.js From 6703d8dac16930a7735262a7b6286e6d65595a4b Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Fri, 15 Dec 2023 13:49:39 -0800 Subject: [PATCH 23/24] docs: update copy and make descriptions consistent --- .../string/base/distances/hamming/README.md | 25 ++++++++++++------- .../base/distances/hamming/docs/repl.txt | 20 ++++++++------- .../distances/hamming/docs/types/index.d.ts | 11 +++++--- .../base/distances/hamming/lib/index.js | 2 +- .../string/base/distances/hamming/lib/main.js | 25 +++++++++++-------- .../base/distances/hamming/package.json | 4 +-- .../base/distances/hamming/test/test.js | 13 ++++------ 7 files changed, 56 insertions(+), 44 deletions(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming/README.md b/lib/node_modules/@stdlib/string/base/distances/hamming/README.md index 3e7b454aaf0b..88be4d48eab9 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming/README.md +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/README.md @@ -20,7 +20,7 @@ limitations under the License. # hammingDistance -> Calculate the [Hamming][hamming] (edit) distance between two strings of equal length. +> Calculate the [Hamming distance][hamming-distance] between two equal-length strings. @@ -34,13 +34,7 @@ var hammingDistance = require( '@stdlib/string/base/distances/hamming' ); #### hammingDistance( s1, s2 ) -Calculates the [Hamming][hamming] (edit) distance between two strings of equal length. If the two strings differ in length the Hamming distance is not defined. Addressing this, given input strings of unequal length, this package returns a sentinel value of -1. - -_Cautionary note_. This package should perform as -expected for strings composed of characters within the -Basic Multilingual Plane. Anything outside of that may -lead to surprises; it is assumed that input strings are -valid and no checks are performed. +Calculates the [Hamming distance][hamming-distance] between two equal-length strings. ```javascript var dist = hammingDistance( 'frog', 'from' ); @@ -63,6 +57,19 @@ dist = hammingDistance( '1638452297', '2311638451' ); + + +
+ +## Notes + +- If the two strings differ in length, the [Hamming distance][hamming-distance] is not defined. Consequently, when provided two input strings of unequal length, the function returns a sentinel value of `-1`. +- As the function calculates the [Hamming distance][hamming-distance] by comparing UTF-16 code units, the function should behave as expected for strings composed of most characters. However, the function is likely to not behave as expected if strings contain visual characters composed of multiple Unicode code points, such as certain mathematical symbols and grapheme clusters (e.g., emojis). + +
+ + +
@@ -101,7 +108,7 @@ dist = hammingDistance( 'hamming', 'ladybug' ); diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming/docs/repl.txt b/lib/node_modules/@stdlib/string/base/distances/hamming/docs/repl.txt index 5d016362c6c3..b637ddb42e54 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming/docs/repl.txt +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/docs/repl.txt @@ -1,7 +1,9 @@ {{alias}}( s1, s2 ) - Calculates the Hamming (edit) distance between two equal-length - input strings. Returns sentinel value -1 if the string lengths differ. + Calculates the Hamming distance between two equal-length input strings. + + The function returns a sentinel value of -1 if the input string lengths + differ. Parameters ---------- @@ -13,20 +15,20 @@ Returns ------- - dist: number - Hamming (edit) distance between two equal-length strings. + out: number + Hamming distance. Examples -------- - > var dist = {{alias}}( 'algorithms', 'altruistic' ) + > var d = {{alias}}( 'algorithms', 'altruistic' ) 7 - > dist = {{alias}}( 'elephant', 'hippopod' ) + > d = {{alias}}( 'elephant', 'hippopod' ) 7 - > dist = {{alias}}( 'javascript', 'typescript' ) + > d = {{alias}}( 'javascript', 'typescript' ) 4 - > dist = {{alias}}( 'levenshtein', 'levitations' ) + > d = {{alias}}( 'levenshtein', 'levitations' ) 8 - > dist = {{alias}}( 'sacrifice', 'paradisal' ) + > d = {{alias}}( 'sacrifice', 'paradisal' ) 8 See Also diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming/docs/types/index.d.ts b/lib/node_modules/@stdlib/string/base/distances/hamming/docs/types/index.d.ts index e4c2e2e38733..094bb1ac77e3 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/docs/types/index.d.ts @@ -19,11 +19,14 @@ // TypeScript Version: 4.1 /** -* Calculates the Hamming (edit) distance between two equal-length strings. -* Returns sentinel value of -1 if lengths differ. +* Calculates the Hamming distance between two equal-length strings. * -* @param str1 - first string value -* @param str2 - second string value +* ## Notes +* +* - The function returns a sentinel value of `-1` if the input string lengths differ. +* +* @param str1 - first input string +* @param str2 - second input string * @returns Hamming distance * * @example diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js b/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js index 6da237c42e93..2eb5e8685a7c 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js @@ -19,7 +19,7 @@ 'use strict'; /** -* Calculate the Hamming (edit) distance between two strings. +* Calculate the Hamming distance between two strings. * * @module @stdlib/string/base/distances/hamming * diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming/lib/main.js b/lib/node_modules/@stdlib/string/base/distances/hamming/lib/main.js index cfb8c840c250..eb755ae18175 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming/lib/main.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/lib/main.js @@ -27,22 +27,24 @@ var format = require( '@stdlib/string/format' ); // MAIN // /** -* Calculates the Hamming (edit) distance between two strings, which. -* must be of identical length. +* Calculates the Hamming distance between two equal-length strings. * -* @param {string} s1 - first string value -* @param {string} s2 - second string value +* ## Notes +* +* - The function returns a sentinel value of `-1` if the input string lengths differ. +* +* @param {string} s1 - first input string +* @param {string} s2 - second input string * @throws {TypeError} first argument must be a string * @throws {TypeError} second argument must be a string -* @returns {NonNegativeInteger} hamming distance, or -1 if -* strings are of unequal length +* @returns {integer} Hamming distance * * @example * var distance = hammingDistance( 'algorithm', 'altruistic' ); * // returns -1 */ function hammingDistance( s1, s2 ) { - var hammdist = 0; + var out; var i; if ( !isString( s1 ) ) { @@ -54,12 +56,13 @@ function hammingDistance( s1, s2 ) { if ( s1.length !== s2.length ) { return -1; } - for (i = 0; i < s1.length; i++) { - if (s1[i] !== s2[i]) { - hammdist += 1; + out = 0; + for ( i = 0; i < s1.length; i++ ) { + if (s1[ i ] !== s2[ i ] ) { + out += 1; } } - return hammdist; + return out; } diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming/package.json b/lib/node_modules/@stdlib/string/base/distances/hamming/package.json index 430734b22da9..05996b10e0f4 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming/package.json +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/package.json @@ -1,7 +1,7 @@ { "name": "@stdlib/string/base/distances/hamming", "version": "0.0.0", - "description": "Calculates the Hamming (edit) distance between two strings.", + "description": "Calculate the Hamming distance between two equal-length strings.", "license": "Apache-2.0", "author": { "name": "The Stdlib Authors", @@ -60,7 +60,7 @@ "str", "distances", "distance", - "hamming2", + "hamming", "edit" ], "__stdlib__": {} diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming/test/test.js b/lib/node_modules/@stdlib/string/base/distances/hamming/test/test.js index b1851a3860c0..c7c1dff425b0 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming/test/test.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/test/test.js @@ -55,7 +55,7 @@ tape( 'the function throws an error if not provided a string as its first argume function badValue( value ) { return function badValue() { - hammingDistance( value, 'dummy' ); + hammingDistance( value, 'foo' ); }; } }); @@ -83,20 +83,17 @@ tape( 'the function throws an error if not provided a string as its second argum function badValue( value ) { return function badValue() { - hammingDistance( 'dummy', value ); + hammingDistance( 'foo', value ); }; } }); -tape( 'the function returns -1 as a sentinel value if provided with strings of unequal length', function test( t ) { - var expected = -1; - var arg1 = 'length'; - var arg2 = 'differs'; - t.strictEqual( hammingDistance( arg1, arg2 ), expected, 'returns expected value' ); +tape( 'the function returns -1 as a sentinel value if provided strings of unequal length', function test( t ) { + t.strictEqual( hammingDistance( 'length', 'differs' ), -1, 'returns expected value' ); t.end(); }); -tape( 'the function calculates the Hamming (edit) distance between two strings', function test( t ) { +tape( 'the function calculates the Hamming distance between two equal-length strings', function test( t ) { var expected; var values; var i; From 8e97555648bfbb02c7552bb2f4851598ae237518 Mon Sep 17 00:00:00 2001 From: Athan Date: Fri, 15 Dec 2023 13:55:29 -0800 Subject: [PATCH 24/24] Apply suggestions from code review Signed-off-by: Athan --- .../@stdlib/string/base/distances/hamming/lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js b/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js index 2eb5e8685a7c..9b723ebc28a4 100644 --- a/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js +++ b/lib/node_modules/@stdlib/string/base/distances/hamming/lib/index.js @@ -19,7 +19,7 @@ 'use strict'; /** -* Calculate the Hamming distance between two strings. +* Calculate the Hamming distance between two equal-length strings. * * @module @stdlib/string/base/distances/hamming *