David Contreras 367c0d3d1e
chore: improve performance of functions map, filter and forEach (#3256)
* Implement reduceCallback

* Add jsdocs

* implement simplifyCallback in other functions

* Moved recurse to array.js

* Format

* Separate transform callback

* forEach transform

* Renamed applyCallback to simplifyCallback

* Simplified index transform

* renamed to reducedCallback and simplifiedCallback to simpleCallback

* chore: fix linting issue

* Added forEach benchmark

* renamed simplifyCallback to optimizeCallback

---------

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2024-09-11 11:32:17 +02:00

56 lines
1.5 KiB
JavaScript

import Benchmark from 'benchmark'
import padRight from 'pad-right'
import { ones, abs, DenseMatrix, map, random, round } from '../../lib/esm/index.js'
const genericMatrix = map(ones(10, 10, 'dense'), _ => round(random(-5, 5), 2))
const numberMatrix = new DenseMatrix(genericMatrix, 'number')
const array = genericMatrix.toArray()
// console.log('data', array)
// console.log('abs(data)', abs(array))npm run
new Benchmark.Suite()
.add(pad('abs(genericMatrix)'), () => {
abs(genericMatrix)
})
.add(pad('abs(array)'), () => {
abs(array)
})
.add(pad('abs(numberMatrix)'), () => {
abs(numberMatrix)
})
.add(pad('genericMatrix.map(abs)'), () => {
genericMatrix.map(abs)
})
.add(pad('numberMatrix.map(abs)'), () => {
numberMatrix.map(abs)
})
.add(pad('map(genericMatrix, abs)'), () => {
map(genericMatrix, abs)
})
.add(pad('map(numberMatrix, abs)'), () => {
map(numberMatrix, abs)
})
.add(pad('map(array, abs)'), () => {
map(array, abs)
})
.add(pad('map(array, abs.signatures.number)'), () => {
map(array, abs.signatures.number)
})
.add(pad('genericMatrix.map(abs.signatures.number)'), () => {
genericMatrix.map(abs.signatures.number)
})
.add(pad('numberMatrix.map(abs.signatures.number)'), () => {
numberMatrix.map(abs.signatures.number)
})
.on('cycle', function (event) {
console.log(String(event.target))
})
.on('complete', function () {
})
.run()
function pad (text) {
return padRight(text, 42, ' ')
}