Skip to content

Commit 7884b2e

Browse files
committed
test: add more tests
1 parent d10605e commit 7884b2e

File tree

1 file changed

+265
-1
lines changed
  • lib/node_modules/@stdlib/ndarray/for-each/test

1 file changed

+265
-1
lines changed

lib/node_modules/@stdlib/ndarray/for-each/test/test.js

Lines changed: 265 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ var strides2offset = require( '@stdlib/ndarray/base/strides2offset' );
3030
var Float64Array = require( '@stdlib/array/float64' );
3131
var isSameFloat64Array = require( '@stdlib/assert/is-same-float64array' );
3232
var numel = require( '@stdlib/ndarray/base/numel' );
33+
var dfill = require( '@stdlib/blas/ext/base/dfill' );
34+
var blockSize = require( '@stdlib/ndarray/base/unary-tiling-block-size' );
3335
var forEach = require( './../lib' );
3436

3537

@@ -135,4 +137,266 @@ tape( 'the function applies a callback to each indexed element in the input ndar
135137
}
136138
});
137139

138-
// TODO: add more tests
140+
tape( 'the function applies a callback to each indexed element in the input ndarray (column-major, contiguous)', function test( t ) {
141+
var expected;
142+
var ord;
143+
var sh;
144+
var st;
145+
var dt;
146+
var o;
147+
var x;
148+
149+
dt = 'float64';
150+
ord = 'column-major';
151+
sh = [ 2, 1, 2 ];
152+
st = shape2strides( sh, ord );
153+
o = strides2offset( sh, st );
154+
155+
x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord );
156+
157+
forEach( x, scale );
158+
159+
expected = new Float64Array([
160+
10.0,
161+
10.0,
162+
10.0,
163+
10.0
164+
]);
165+
t.strictEqual( isSameFloat64Array( x.data, expected ), true, 'returns expected value' );
166+
167+
t.end();
168+
169+
function scale( v, i ) {
170+
x.set( i[0], i[1], i[2], v*10.0 );
171+
}
172+
});
173+
174+
tape( 'the function applies a callback to each indexed element in the input ndarray (row-major, non-contiguous, large arrays)', function test( t ) {
175+
var expected;
176+
var bsize;
177+
var ord;
178+
var sh;
179+
var st;
180+
var dt;
181+
var o;
182+
var x;
183+
184+
dt = 'float64';
185+
ord = 'row-major';
186+
187+
bsize = blockSize( dt );
188+
sh = [ bsize*2, 1, 2 ];
189+
st = [ -4, -4, 2 ];
190+
o = strides2offset( sh, st );
191+
192+
x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord );
193+
194+
forEach( x, scale );
195+
expected = ones( x.length*2, dt );
196+
dfill.ndarray( x.length, 100.0, expected, st[2], expected.length/2 );
197+
198+
t.strictEqual( isSameFloat64Array( x.data, expected ), true, 'returns expected value' );
199+
200+
t.end();
201+
202+
function scale( v, i ) {
203+
x.set( i[0], i[1], i[2], v*10.0 );
204+
}
205+
});
206+
207+
tape( 'the function applies a callback to each indexed element in the input ndarray (column-major, non-contiguous, large arrays)', function test( t ) {
208+
var expected;
209+
var bsize;
210+
var ord;
211+
var sh;
212+
var st;
213+
var dt;
214+
var o;
215+
var x;
216+
217+
dt = 'float64';
218+
ord = 'column-major';
219+
220+
bsize = blockSize( dt );
221+
sh = [ 2, 1, bsize*2 ];
222+
st = [ 2, -4, -4 ];
223+
o = strides2offset( sh, st );
224+
225+
x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord );
226+
227+
forEach( x, scale );
228+
expected = ones( x.length*2, dt );
229+
dfill.ndarray( x.length, 100.0, expected, st[0], expected.length/2 );
230+
231+
t.strictEqual( isSameFloat64Array( x.data, expected ), true, 'returns expected value' );
232+
233+
t.end();
234+
235+
function scale( v, i ) {
236+
x.set( i[0], i[1], i[2], v*10.0 );
237+
}
238+
});
239+
240+
tape( 'the function supports providing a callback execution context', function test( t ) {
241+
var expected;
242+
var ctx;
243+
var ord;
244+
var sh;
245+
var st;
246+
var dt;
247+
var o;
248+
var x;
249+
250+
dt = 'float64';
251+
ord = 'row-major';
252+
sh = [ 2, 1, 2 ];
253+
st = shape2strides( sh, ord );
254+
o = strides2offset( sh, st );
255+
256+
x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord );
257+
258+
ctx = {
259+
'count': 0
260+
};
261+
forEach( x, scale, ctx );
262+
263+
expected = new Float64Array([
264+
10.0,
265+
10.0,
266+
10.0,
267+
10.0
268+
]);
269+
t.strictEqual( isSameFloat64Array( x.data, expected ), true, 'returns expected value' );
270+
t.strictEqual( ctx.count, 4, 'returns expected value' );
271+
272+
t.end();
273+
274+
function scale( v, i ) {
275+
this.count += 1; // eslint-disable-line no-invalid-this
276+
x.set( i[0], i[1], i[2], v*10.0 );
277+
}
278+
});
279+
280+
tape( 'the function invokes a provided callback with three arguments (row-major)', function test( t ) {
281+
var expected;
282+
var indices;
283+
var values;
284+
var arrays;
285+
var ord;
286+
var sh;
287+
var st;
288+
var dt;
289+
var o;
290+
var x;
291+
var i;
292+
293+
dt = 'float64';
294+
ord = 'row-major';
295+
sh = [ 2, 1, 2 ];
296+
st = shape2strides( sh, ord );
297+
o = strides2offset( sh, st );
298+
299+
x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord );
300+
301+
values = [];
302+
indices = [];
303+
arrays = [];
304+
forEach( x, scale );
305+
306+
expected = new Float64Array([
307+
10.0,
308+
10.0,
309+
10.0,
310+
10.0
311+
]);
312+
t.strictEqual( isSameFloat64Array( x.data, expected ), true, 'returns expected value' );
313+
314+
expected = [
315+
[ 0, 0, 0 ],
316+
[ 0, 0, 1 ],
317+
[ 1, 0, 0 ],
318+
[ 1, 0, 1 ]
319+
];
320+
t.deepEqual( indices, expected, 'returns expected value' );
321+
322+
expected = [
323+
x,
324+
x,
325+
x,
326+
x
327+
];
328+
for ( i = 0; i < expected.length; i++ ) {
329+
t.strictEqual( arrays[ i ], expected[ i ], 'returns expected value' );
330+
}
331+
332+
t.end();
333+
334+
function scale( v, i, arr ) {
335+
values.push( v );
336+
indices.push( i );
337+
arrays.push( arr );
338+
x.set( i[0], i[1], i[2], v*10.0 );
339+
}
340+
});
341+
342+
tape( 'the function invokes a provided callback with three arguments (column-major)', function test( t ) {
343+
var expected;
344+
var indices;
345+
var values;
346+
var arrays;
347+
var ord;
348+
var sh;
349+
var st;
350+
var dt;
351+
var o;
352+
var x;
353+
var i;
354+
355+
dt = 'float64';
356+
ord = 'column-major';
357+
sh = [ 2, 1, 2 ];
358+
st = shape2strides( sh, ord );
359+
o = strides2offset( sh, st );
360+
361+
x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord );
362+
363+
values = [];
364+
indices = [];
365+
arrays = [];
366+
forEach( x, scale );
367+
368+
expected = new Float64Array([
369+
10.0,
370+
10.0,
371+
10.0,
372+
10.0
373+
]);
374+
t.strictEqual( isSameFloat64Array( x.data, expected ), true, 'returns expected value' );
375+
376+
expected = [
377+
[ 0, 0, 0 ],
378+
[ 1, 0, 0 ],
379+
[ 0, 0, 1 ],
380+
[ 1, 0, 1 ]
381+
];
382+
t.deepEqual( indices, expected, 'returns expected value' );
383+
384+
expected = [
385+
x,
386+
x,
387+
x,
388+
x
389+
];
390+
for ( i = 0; i < expected.length; i++ ) {
391+
t.strictEqual( arrays[ i ], expected[ i ], 'returns expected value' );
392+
}
393+
394+
t.end();
395+
396+
function scale( v, i, arr ) {
397+
values.push( v );
398+
indices.push( i );
399+
arrays.push( arr );
400+
x.set( i[0], i[1], i[2], v*10.0 );
401+
}
402+
});

0 commit comments

Comments
 (0)