Skip to content

feat: add boolean dtype support to array/base/cuevery #2447

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions lib/node_modules/@stdlib/array/base/cuevery/lib/assign.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@

var isComplex128Array = require( '@stdlib/array/base/assert/is-complex128array' );
var isComplex64Array = require( '@stdlib/array/base/assert/is-complex64array' );
var isBooleanArray = require( '@stdlib/array/base/assert/is-booleanarray' );
var arraylike2object = require( '@stdlib/array/base/arraylike2object' );
var reinterpret128 = require( '@stdlib/strided/base/reinterpret-complex128' );
var reinterpret64 = require( '@stdlib/strided/base/reinterpret-complex64' );
var reinterpretBoolean = require( '@stdlib/strided/base/reinterpret-boolean' );


// FUNCTIONS //
Expand Down Expand Up @@ -181,6 +183,63 @@ function complex( x, y, stride, offset ) {
return ydata;
}

/**
* Cumulatively tests whether every element in a provided boolean array is truthy.
*
* @private
* @param {Collection} x - input array
* @param {Object} y - output array object
* @param {integer} stride - output array stride
* @param {NonNegativeInteger} offset - output array offset
* @returns {Collection} output array
*
* @example
* var Uint8Array = require( '@stdlib/array/uint8' );
* var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' );
* var arraylike2object = require( '@stdlib/array/base/arraylike2object' );
*
* var x = new Uint8Array( [ 1, 1, 1, 0, 1 ] );
* var y = toAccessorArray( [ false, null, false, null, false, null, false, null, true, null ] );
*
* var arr = boolean( x, arraylike2object( y ), 2, 0 );
*
* var v = y.get( 0 );
* // returns true
*
* v = y.get( 2 );
* // returns true
*
* v = y.get( 4 );
* // returns true
*
* v = y.get( 6 );
* // returns false
*
* v = y.get( 8 );
* // returns false
*/
function boolean( x, y, stride, offset ) {
var ydata;
var yset;
var flg;
var io;
var i;

yset = y.accessors[ 1 ];
ydata = y.data;

flg = true;
io = offset;
for ( i = 0; i < x.length; i++ ) {
if ( flg === true && !x[ i ] ) {
flg = false;
}
yset( ydata, io, flg );
io += stride;
}
return ydata;
}


// MAIN //

Expand Down Expand Up @@ -215,6 +274,8 @@ function assign( x, y, stride, offset ) {
complex( reinterpret128( x, 0 ), yo, stride, offset );
} else if ( isComplex64Array( x ) ) {
complex( reinterpret64( x, 0 ), yo, stride, offset );
} else if ( isBooleanArray( x ) ) {
boolean( reinterpretBoolean( x, 0 ), yo, stride, offset );
} else {
accessors( xo, yo, stride, offset );
}
Expand Down
55 changes: 55 additions & 0 deletions lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
var tape = require( 'tape' );
var Complex128Array = require( '@stdlib/array/complex128' );
var Complex64Array = require( '@stdlib/array/complex64' );
var BooleanArray = require( '@stdlib/array/bool' );
var Float64Array = require( '@stdlib/array/float64' );
var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' );
var cuevery = require( './../lib/assign.js' );
Expand Down Expand Up @@ -55,7 +56,7 @@
y = [ false, null, false, null, false, null, false, null, false, null ];

actual = cuevery( x, y, 2, 0 );
expected = [ false, null, false, null, false, null, false, null, false, null ];

Check warning on line 59 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 83. Maximum allowed is 80

t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );
Expand Down Expand Up @@ -109,7 +110,7 @@
y = [ false, null, false, null, false, null, false, null, false, null ];

actual = cuevery( x, y, 2, 0 );
expected = [ false, null, false, null, false, null, false, null, false, null ];

Check warning on line 113 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 83. Maximum allowed is 80

t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );
Expand Down Expand Up @@ -144,13 +145,67 @@
t.end();
});

tape( 'the function cumulatively tests whether every element is truthy (boolean)', function test( t ) {
var expected;
var actual;
var x;
var y;

x = new BooleanArray( [ true, true, true, true, true ] );
y = [ false, true, false, true, false ];

actual = cuevery( x, y, 1, 0 );
expected = [ true, true, true, true, true ];

t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );

x = new BooleanArray( [ false, false, true, false, false ] );
y = [ false, null, false, null, false, null, false, null, false, null ];

actual = cuevery( x, y, 2, 0 );
expected = [ false, null, false, null, false, null, false, null, false, null ];

Check warning on line 167 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 83. Maximum allowed is 80

t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );

x = new BooleanArray( [ false, false, true, false, false ] );
y = [ false, false, false, true, true, true ];

actual = cuevery( x, y, 1, 1 );
expected = [ false, false, false, false, false, false ];

t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );

x = new BooleanArray( [] );
y = [ false, false, false, false, false ];

actual = cuevery( x, y, 1, 0 );
expected = [ false, false, false, false, false ];

t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );

x = new BooleanArray( [ true ] );
y = [ false, false ];

actual = cuevery( x, y, 1, 1 );
expected = [ false, true ];

t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );

t.end();
});

tape( 'the function cumulatively tests whether every element is truthy (complex128)', function test( t ) {
var expected;
var actual;
var x;
var y;

x = new Complex128Array( [ 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0 ] );

Check warning on line 208 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 84. Maximum allowed is 80
y = [ false, true, false, true, false ];

actual = cuevery( x, y, 1, 0 );
Expand All @@ -159,16 +214,16 @@
t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );

x = new Complex128Array( [ 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0 ] );

Check warning on line 217 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 84. Maximum allowed is 80
y = [ false, null, false, null, false, null, false, null, false, null ];

actual = cuevery( x, y, 2, 0 );
expected = [ false, null, false, null, false, null, false, null, false, null ];

Check warning on line 221 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 83. Maximum allowed is 80

t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );

x = new Complex128Array( [ 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] );

Check warning on line 226 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 84. Maximum allowed is 80
y = [ false, false, false, true, true, true ];

actual = cuevery( x, y, 1, 1 );
Expand Down Expand Up @@ -204,7 +259,7 @@
var x;
var y;

x = new Complex64Array( [ 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0 ] );

Check warning on line 262 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 83. Maximum allowed is 80
y = [ false, true, false, true, false ];

actual = cuevery( x, y, 1, 0 );
Expand All @@ -213,11 +268,11 @@
t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );

x = new Complex64Array( [ 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0 ] );

Check warning on line 271 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 83. Maximum allowed is 80
y = [ false, null, false, null, false, null, false, null, false, null ];

actual = cuevery( x, y, 2, 0 );
expected = [ false, null, false, null, false, null, false, null, false, null ];

Check warning on line 275 in lib/node_modules/@stdlib/array/base/cuevery/test/test.assign.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

This line has a length of 83. Maximum allowed is 80

t.strictEqual( actual, y, 'returns expected value' );
t.deepEqual( actual, expected, 'returns expected value' );
Expand Down
34 changes: 34 additions & 0 deletions lib/node_modules/@stdlib/array/base/cuevery/test/test.main.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
var tape = require( 'tape' );
var Complex128Array = require( '@stdlib/array/complex128' );
var Complex64Array = require( '@stdlib/array/complex64' );
var BooleanArray = require( '@stdlib/array/bool' );
var Float64Array = require( '@stdlib/array/float64' );
var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' );
var cuevery = require( './../lib' );
Expand Down Expand Up @@ -135,6 +136,39 @@ tape( 'the function cumulatively tests whether every element is truthy (complex1
t.end();
});

tape( 'the function cumulatively tests whether every element is truthy (boolean)', function test( t ) {
var expected;
var actual;
var x;

x = new BooleanArray( [ false, false, true, false, false ] );
actual = cuevery( x );
expected = [ false, false, false, false, false ];
t.deepEqual( actual, expected, 'returns expected value' );

x = new BooleanArray( [ false, false, false, false, false ] );
actual = cuevery( x );
expected = [ false, false, false, false, false ];
t.deepEqual( actual, expected, 'returns expected value' );

x = new BooleanArray( [ true, true, true, true, true ] );
actual = cuevery( x );
expected = [ true, true, true, true, true ];
t.deepEqual( actual, expected, 'returns expected value' );

x = new BooleanArray( [ false, true, true ] );
actual = cuevery( x );
expected = [ false, false, false ];
t.deepEqual( actual, expected, 'returns expected value' );

x = new BooleanArray( [ true, false, true, false, false ] );
actual = cuevery( x );
expected = [ true, false, false, false, false ];
t.deepEqual( actual, expected, 'returns expected value' );

t.end();
});

tape( 'the function cumulatively tests whether every element is truthy (complex64)', function test( t ) {
var expected;
var actual;
Expand Down
Loading