@@ -30,6 +30,8 @@ var strides2offset = require( '@stdlib/ndarray/base/strides2offset' );
3030var  Float64Array  =  require (  '@stdlib/array/float64'  ) ; 
3131var  isSameFloat64Array  =  require (  '@stdlib/assert/is-same-float64array'  ) ; 
3232var  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'  ) ; 
3335var  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