From bdf4e7b9b334b579685a22504571b258e5cab1d6 Mon Sep 17 00:00:00 2001 From: Jaysukh-409 Date: Fri, 28 Jun 2024 21:33:04 +0530 Subject: [PATCH 1/4] feat: add boolean dtype support to array/base/count-same-value --- .../array/base/count-same-value/lib/main.js | 46 +++++++++++++++++++ .../array/base/count-same-value/test/test.js | 14 ++++++ 2 files changed, 60 insertions(+) diff --git a/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js b/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js index 6152b1fdbada..aea27995b775 100644 --- a/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js +++ b/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js @@ -21,8 +21,11 @@ // MODULES // var isComplexLike = require( '@stdlib/assert/is-complex-like' ); +var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive; var reinterpret = require( '@stdlib/strided/base/reinterpret-complex' ); +var reinterpretBoolean = require( '@stdlib/strided/base/reinterpret-boolean' ); var isComplexTypedArray = require( '@stdlib/array/base/assert/is-complex-typed-array' ); +var isBooleanArray = require( '@stdlib/array/base/assert/is-booleanarray' ); var isAccessorArray = require( '@stdlib/array/base/assert/is-accessor-array' ); var resolveGetter = require( '@stdlib/array/base/resolve-getter' ); var isSameValue = require( '@stdlib/assert/is-same-value' ); @@ -132,6 +135,46 @@ function complex( x, value ) { return n; } +/** +* Counts the number of elements in a boolean array that are equal to a specified value. +* +* @private +* @param {Collection} x - input array +* @param {*} value - search value +* @returns {NonNegativeInteger} number of elements that are equal to a specified value +* +* @example +* var BooleanArray = require( '@stdlib/array/bool' ); +* +* var x = new BooleanArray( [ true, false, true, false, true ] ); +* +* var n = boolean( x, true ); +* // returns 3 +*/ +function boolean( x, value ) { + var view; + var n; + var i; + + if ( !isBoolean( value ) ) { + return 0; + } + if ( value === false ) { + value = 0; + } else { + value = 1; + } + view = reinterpretBoolean( x, 0 ); + + n = 0; + for ( i = 0; i < view.length; i++ ) { + if ( isSameValue( view[ i ], value ) ) { + n += 1; + } + } + return n; +} + // MAIN // @@ -160,6 +203,9 @@ function countSameValue( x, value ) { if ( isComplexTypedArray( x, value ) ) { return complex( x, value ); } + if ( isBooleanArray( x, value ) ) { + return boolean( x, value ); + } return accessors( x, value ); } return indexed( x, value ); diff --git a/lib/node_modules/@stdlib/array/base/count-same-value/test/test.js b/lib/node_modules/@stdlib/array/base/count-same-value/test/test.js index f5fdab10832b..8cea9e627c4f 100644 --- a/lib/node_modules/@stdlib/array/base/count-same-value/test/test.js +++ b/lib/node_modules/@stdlib/array/base/count-same-value/test/test.js @@ -23,6 +23,7 @@ var tape = require( 'tape' ); var Complex128 = require( '@stdlib/complex/float64/ctor' ); var Complex128Array = require( '@stdlib/array/complex128' ); +var BooleanArray = require( '@stdlib/array/bool' ); var Int32Array = require( '@stdlib/array/int32' ); var Float32Array = require( '@stdlib/array/float32' ); var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' ); @@ -169,6 +170,19 @@ tape( 'the function considers all NaN values to be identical (real typed array)' t.end(); }); +tape( 'the function counts the number of same values (boolean array)', function test( t ) { + var expected; + var actual; + var x; + + x = new BooleanArray( [ true, false, true, false, true ] ); + expected = 3; + actual = countSameValue( x, true ); + + t.strictEqual( actual, expected, 'returns expected value' ); + t.end(); +}); + tape( 'the function counts the number of same values (complex typed array)', function test( t ) { var expected; var actual; From 413a63ffd435c861c8c397bdaa5e9d3fafae5993 Mon Sep 17 00:00:00 2001 From: Athan Date: Fri, 28 Jun 2024 23:14:45 -0700 Subject: [PATCH 2/4] Apply suggestions from code review Signed-off-by: Athan --- .../@stdlib/array/base/count-same-value/lib/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js b/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js index aea27995b775..2645d0c6821d 100644 --- a/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js +++ b/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js @@ -168,7 +168,7 @@ function boolean( x, value ) { n = 0; for ( i = 0; i < view.length; i++ ) { - if ( isSameValue( view[ i ], value ) ) { + if ( view[ i ] === value ) { n += 1; } } From 0632ca5ef9d39125ea62365b4d7bc643f552e86c Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Fri, 28 Jun 2024 23:16:00 -0700 Subject: [PATCH 3/4] test: add test cases to ensure full code coverage --- .../@stdlib/array/base/count-same-value/test/test.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/node_modules/@stdlib/array/base/count-same-value/test/test.js b/lib/node_modules/@stdlib/array/base/count-same-value/test/test.js index 8cea9e627c4f..467058591dcd 100644 --- a/lib/node_modules/@stdlib/array/base/count-same-value/test/test.js +++ b/lib/node_modules/@stdlib/array/base/count-same-value/test/test.js @@ -179,6 +179,18 @@ tape( 'the function counts the number of same values (boolean array)', function expected = 3; actual = countSameValue( x, true ); + t.strictEqual( actual, expected, 'returns expected value' ); + + x = new BooleanArray( [ true, false, true, false, true ] ); + expected = 2; + actual = countSameValue( x, false ); + + t.strictEqual( actual, expected, 'returns expected value' ); + + x = new BooleanArray( [ true, false, true, false, true ] ); + expected = 0; + actual = countSameValue( x, 'beep' ); + t.strictEqual( actual, expected, 'returns expected value' ); t.end(); }); From 687f41ea8ba48d8691cf4c7d034ec4ef15189b55 Mon Sep 17 00:00:00 2001 From: Athan Reines Date: Fri, 28 Jun 2024 23:18:49 -0700 Subject: [PATCH 4/4] refactor: reduce loc --- .../@stdlib/array/base/count-same-value/lib/main.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js b/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js index 2645d0c6821d..aa0680810257 100644 --- a/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js +++ b/lib/node_modules/@stdlib/array/base/count-same-value/lib/main.js @@ -154,21 +154,18 @@ function complex( x, value ) { function boolean( x, value ) { var view; var n; + var v; var i; if ( !isBoolean( value ) ) { return 0; } - if ( value === false ) { - value = 0; - } else { - value = 1; - } view = reinterpretBoolean( x, 0 ); + v = ( value ) ? 1 : 0; n = 0; for ( i = 0; i < view.length; i++ ) { - if ( view[ i ] === value ) { + if ( view[ i ] === v ) { n += 1; } }