Skip to content

Commit c41435f

Browse files
authored
feat: add boolean dtype support to array/base/cuany
PR-URL: #2446 Ref: #2304 Reviewed-by: Athan Reines <kgryte@gmail.com>
1 parent 3c451db commit c41435f

File tree

3 files changed

+150
-0
lines changed

3 files changed

+150
-0
lines changed

lib/node_modules/@stdlib/array/base/cuany/lib/assign.js

+61
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222

2323
var isComplex128Array = require( '@stdlib/array/base/assert/is-complex128array' );
2424
var isComplex64Array = require( '@stdlib/array/base/assert/is-complex64array' );
25+
var isBooleanArray = require( '@stdlib/array/base/assert/is-booleanarray' );
2526
var arraylike2object = require( '@stdlib/array/base/arraylike2object' );
2627
var reinterpret128 = require( '@stdlib/strided/base/reinterpret-complex128' );
2728
var reinterpret64 = require( '@stdlib/strided/base/reinterpret-complex64' );
29+
var reinterpretBoolean = require( '@stdlib/strided/base/reinterpret-boolean' );
2830

2931

3032
// FUNCTIONS //
@@ -181,6 +183,63 @@ function complex( x, y, stride, offset ) {
181183
return ydata;
182184
}
183185

186+
/**
187+
* Cumulatively tests whether at least one element in a provided boolean array is truthy.
188+
*
189+
* @private
190+
* @param {Collection} x - input array
191+
* @param {Object} y - output array object
192+
* @param {integer} stride - output array stride
193+
* @param {NonNegativeInteger} offset - output array offset
194+
* @returns {Collection} output array
195+
*
196+
* @example
197+
* var Uint8Array = require( '@stdlib/array/uint8' );
198+
* var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' );
199+
* var arraylike2object = require( '@stdlib/array/base/arraylike2object' );
200+
*
201+
* var x = new Uint8Array( [ 0, 0, 1, 1, 0 ] );
202+
* var y = toAccessorArray( [ false, null, false, null, false, null, false, null, false, null ] );
203+
*
204+
* var arr = boolean( x, arraylike2object( y ), 2, 0 );
205+
*
206+
* var v = y.get( 0 );
207+
* // returns false
208+
*
209+
* v = y.get( 2 );
210+
* // returns false
211+
*
212+
* v = y.get( 4 );
213+
* // returns true
214+
*
215+
* v = y.get( 6 );
216+
* // returns true
217+
*
218+
* v = y.get( 8 );
219+
* // returns true
220+
*/
221+
function boolean( x, y, stride, offset ) {
222+
var ydata;
223+
var yset;
224+
var flg;
225+
var io;
226+
var i;
227+
228+
yset = y.accessors[ 1 ];
229+
ydata = y.data;
230+
231+
flg = false;
232+
io = offset;
233+
for ( i = 0; i < x.length; i++ ) {
234+
if ( flg === false && x[ i ] ) {
235+
flg = true;
236+
}
237+
yset( ydata, io, flg );
238+
io += stride;
239+
}
240+
return ydata;
241+
}
242+
184243

185244
// MAIN //
186245

@@ -215,6 +274,8 @@ function assign( x, y, stride, offset ) {
215274
complex( reinterpret128( x, 0 ), yo, stride, offset );
216275
} else if ( isComplex64Array( x ) ) {
217276
complex( reinterpret64( x, 0 ), yo, stride, offset );
277+
} else if ( isBooleanArray( x ) ) {
278+
boolean( reinterpretBoolean( x, 0 ), yo, stride, offset );
218279
} else {
219280
accessors( xo, yo, stride, offset );
220281
}

lib/node_modules/@stdlib/array/base/cuany/test/test.assign.js

+55
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
var tape = require( 'tape' );
2424
var Complex128Array = require( '@stdlib/array/complex128' );
2525
var Complex64Array = require( '@stdlib/array/complex64' );
26+
var BooleanArray = require( '@stdlib/array/bool' );
2627
var Float64Array = require( '@stdlib/array/float64' );
2728
var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' );
2829
var cuany = require( './../lib/assign.js' );
@@ -144,6 +145,60 @@ tape( 'the function cumulatively tests whether at least one element is truthy (t
144145
t.end();
145146
});
146147

148+
tape( 'the function cumulatively tests whether at least one element is truthy (boolean)', function test( t ) {
149+
var expected;
150+
var actual;
151+
var x;
152+
var y;
153+
154+
x = new BooleanArray( [ true, true, true, true, true ] );
155+
y = [ false, true, false, true, false ];
156+
157+
actual = cuany( x, y, 1, 0 );
158+
expected = [ true, true, true, true, true ];
159+
160+
t.strictEqual( actual, y, 'returns expected value' );
161+
t.deepEqual( actual, expected, 'returns expected value' );
162+
163+
x = new BooleanArray( [ false, false, true, false, false ] );
164+
y = [ false, null, false, null, false, null, false, null, false, null ];
165+
166+
actual = cuany( x, y, 2, 0 );
167+
expected = [ false, null, false, null, true, null, true, null, true, null ];
168+
169+
t.strictEqual( actual, y, 'returns expected value' );
170+
t.deepEqual( actual, expected, 'returns expected value' );
171+
172+
x = new BooleanArray( [ false, false, true, false, false ] );
173+
y = [ false, false, false, true, true, true ];
174+
175+
actual = cuany( x, y, 1, 1 );
176+
expected = [ false, false, false, true, true, true ];
177+
178+
t.strictEqual( actual, y, 'returns expected value' );
179+
t.deepEqual( actual, expected, 'returns expected value' );
180+
181+
x = new BooleanArray( [] );
182+
y = [ false, false, false, false, false ];
183+
184+
actual = cuany( x, y, 1, 0 );
185+
expected = [ false, false, false, false, false ];
186+
187+
t.strictEqual( actual, y, 'returns expected value' );
188+
t.deepEqual( actual, expected, 'returns expected value' );
189+
190+
x = new BooleanArray( [ true ] );
191+
y = [ false, false ];
192+
193+
actual = cuany( x, y, 1, 1 );
194+
expected = [ false, true ];
195+
196+
t.strictEqual( actual, y, 'returns expected value' );
197+
t.deepEqual( actual, expected, 'returns expected value' );
198+
199+
t.end();
200+
});
201+
147202
tape( 'the function cumulatively tests whether at least one element is truthy (complex128)', function test( t ) {
148203
var expected;
149204
var actual;

lib/node_modules/@stdlib/array/base/cuany/test/test.main.js

+34
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
var tape = require( 'tape' );
2424
var Complex128Array = require( '@stdlib/array/complex128' );
2525
var Complex64Array = require( '@stdlib/array/complex64' );
26+
var BooleanArray = require( '@stdlib/array/bool' );
2627
var Float64Array = require( '@stdlib/array/float64' );
2728
var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' );
2829
var cuany = require( './../lib' );
@@ -102,6 +103,39 @@ tape( 'the function cumulatively tests whether at least one element is truthy (t
102103
t.end();
103104
});
104105

106+
tape( 'the function cumulatively tests whether at least one element is truthy (boolean)', function test( t ) {
107+
var expected;
108+
var actual;
109+
var x;
110+
111+
x = new BooleanArray( [ false, false, true, false, false ] );
112+
actual = cuany( x );
113+
expected = [ false, false, true, true, true ];
114+
t.deepEqual( actual, expected, 'returns expected value' );
115+
116+
x = new BooleanArray( [ false, false, false, false, false ] );
117+
actual = cuany( x );
118+
expected = [ false, false, false, false, false ];
119+
t.deepEqual( actual, expected, 'returns expected value' );
120+
121+
x = new BooleanArray( [ true, true, true, true, true ] );
122+
actual = cuany( x );
123+
expected = [ true, true, true, true, true ];
124+
t.deepEqual( actual, expected, 'returns expected value' );
125+
126+
x = new BooleanArray( [ false, true, true ] );
127+
actual = cuany( x );
128+
expected = [ false, true, true ];
129+
t.deepEqual( actual, expected, 'returns expected value' );
130+
131+
x = new BooleanArray( [ true, false, true, false, false ] );
132+
actual = cuany( x );
133+
expected = [ true, true, true, true, true ];
134+
t.deepEqual( actual, expected, 'returns expected value' );
135+
136+
t.end();
137+
});
138+
105139
tape( 'the function cumulatively tests whether at least one element is truthy (complex128)', function test( t ) {
106140
var expected;
107141
var actual;

0 commit comments

Comments
 (0)