Skip to content

Commit 778764b

Browse files
committed
fix: support collections with unknown data types
1 parent 89026af commit 778764b

File tree

2 files changed

+77
-2
lines changed

2 files changed

+77
-2
lines changed

lib/node_modules/@stdlib/array/put/lib/main.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ function put( x, indices, values ) {
9696
throw err;
9797
}
9898
}
99-
xdt = dtype( x );
100-
vdt = dtype( values );
99+
xdt = dtype( x ) || 'generic';
100+
vdt = dtype( values ) || 'generic';
101101

102102
// Safe casts are always allowed and allow same kind casts (i.e., downcasts) only when the input array data type is floating-point...
103103
if ( !isMostlySafeCast( vdt, xdt ) ) {

lib/node_modules/@stdlib/array/put/test/test.js

+75
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ var zeros = require( '@stdlib/array/zeros' );
3434
var toAccessorArray = require( '@stdlib/array/base/to-accessor-array' );
3535
var isSameComplex64Array = require( '@stdlib/assert/is-same-complex64array' );
3636
var isSameComplex128Array = require( '@stdlib/assert/is-same-complex128array' );
37+
var isAccessorArray = require( '@stdlib/assert/is-accessor-array' );
3738
var put = require( './../lib' );
3839

3940

@@ -432,6 +433,80 @@ tape( 'the function replaces elements in an array (generic, broadcasting)', func
432433
t.end();
433434
});
434435

436+
tape( 'the function replaces elements in an array (accessors, generic)', function test( t ) {
437+
var expected;
438+
var indices;
439+
var actual;
440+
var x;
441+
442+
x = [ 1, 2, 3, 4 ];
443+
indices = toAccessorArray( [ 1, 3 ] );
444+
actual = put( toAccessorArray( x ), indices, toAccessorArray( [ 20, 40 ] ) );
445+
expected = [ 1, 20, 3, 40 ];
446+
t.strictEqual( isAccessorArray( actual ), true, 'returns expected value' );
447+
t.deepEqual( x, expected, 'returns expected value' );
448+
449+
x = [ 1, 2, 3, 4 ];
450+
indices = toAccessorArray( [ 1, 1, 3, 3 ] );
451+
actual = put( toAccessorArray( x ), indices, toAccessorArray( [ 20, 30, 40, 50 ] ) );
452+
expected = [ 1, 30, 3, 50 ];
453+
t.strictEqual( isAccessorArray( actual ), true, 'returns expected value' );
454+
t.deepEqual( x, expected, 'returns expected value' );
455+
456+
x = [ 1, 2, 3, 4 ];
457+
indices = toAccessorArray( [ 3, 2, 1, 0 ] );
458+
actual = put( toAccessorArray( x ), indices, toAccessorArray( [ 20, 30, 40, 50 ] ) );
459+
expected = [ 50, 40, 30, 20 ];
460+
t.strictEqual( isAccessorArray( actual ), true, 'returns expected value' );
461+
t.deepEqual( x, expected, 'returns expected value' );
462+
463+
x = [ 1, 2, 3, 4 ];
464+
indices = toAccessorArray( [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] );
465+
actual = put( toAccessorArray( x ), indices, toAccessorArray( [ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 ] ) );
466+
expected = [ 1, 100, 3, 4 ];
467+
t.strictEqual( isAccessorArray( actual ), true, 'returns expected value' );
468+
t.deepEqual( x, expected, 'returns expected value' );
469+
470+
t.end();
471+
});
472+
473+
tape( 'the function replaces elements in an array (accessors, generic, broadcasting)', function test( t ) {
474+
var expected;
475+
var indices;
476+
var actual;
477+
var x;
478+
479+
x = [ 1, 2, 3, 4 ];
480+
indices = toAccessorArray( [ 1, 3 ] );
481+
actual = put( toAccessorArray( x ), indices, toAccessorArray( [ 20 ] ) );
482+
expected = [ 1, 20, 3, 20 ];
483+
t.strictEqual( isAccessorArray( actual ), true, 'returns expected value' );
484+
t.deepEqual( x, expected, 'returns expected value' );
485+
486+
x = [ 1, 2, 3, 4 ];
487+
indices = toAccessorArray( [ 1, 1, 3, 3 ] );
488+
actual = put( toAccessorArray( x ), indices, toAccessorArray( [ 20 ] ) );
489+
expected = [ 1, 20, 3, 20 ];
490+
t.strictEqual( isAccessorArray( actual ), true, 'returns expected value' );
491+
t.deepEqual( x, expected, 'returns expected value' );
492+
493+
x = [ 1, 2, 3, 4 ];
494+
indices = toAccessorArray( [ 3, 2, 1, 0 ] );
495+
actual = put( toAccessorArray( x ), indices, toAccessorArray( [ 20 ] ) );
496+
expected = [ 20, 20, 20, 20 ];
497+
t.strictEqual( isAccessorArray( actual ), true, 'returns expected value' );
498+
t.deepEqual( x, expected, 'returns expected value' );
499+
500+
x = [ 1, 2, 3, 4 ];
501+
indices = toAccessorArray( [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] );
502+
actual = put( toAccessorArray( x ), indices, toAccessorArray( [ 100 ] ) );
503+
expected = [ 1, 100, 3, 4 ];
504+
t.strictEqual( isAccessorArray( actual ), true, 'returns expected value' );
505+
t.deepEqual( x, expected, 'returns expected value' );
506+
507+
t.end();
508+
});
509+
435510
tape( 'the function replaces elements in an array (int32)', function test( t ) {
436511
var expected;
437512
var indices;

0 commit comments

Comments
 (0)