80 lines
2.7 KiB
JavaScript

import { Bench } from 'tinybench'
import { abs, DenseMatrix, map, ones, random, round } from '../../lib/esm/index.js'
import { formatTaskResult } from './utils/formatTaskResult.js'
const genericMatrix = map(ones(10, 10, 'dense'), _ => round(random(-5, 5), 2))
const numberMatrix = new DenseMatrix(genericMatrix, 'number')
const array = genericMatrix.toArray()
const rowMatrix = map(ones(1, 10, 'dense'), _ => round(random(-5, 5), 2))
const columnMatrix = map(ones(10, 1, 'dense'), _ => round(random(-5, 5), 2))
const rowArray = rowMatrix.toArray()
const columnArray = columnMatrix.toArray()
const multiCallback = (value1, value2) => abs(value1 - value2)
const multiCallback1 = (value1, value2, index) => abs(value1 - value2)
const multiCallback2 = (value1, value2, index, array1, array2) => abs(value1 - value2)
// console.log('data', array)
// console.log('abs(data)', abs(array))npm run
const bench = new Bench({ time: 100, iterations: 100 })
.add('abs(genericMatrix)', () => {
abs(genericMatrix)
})
.add('abs(array)', () => {
abs(array)
})
.add('abs(numberMatrix)', () => {
abs(numberMatrix)
})
.add('genericMatrix.map(abs)', () => {
genericMatrix.map(abs)
})
.add('numberMatrix.map(abs)', () => {
numberMatrix.map(abs)
})
.add('map(genericMatrix, abs)', () => {
map(genericMatrix, abs)
})
.add('map(numberMatrix, abs)', () => {
map(numberMatrix, abs)
})
.add('map(array, abs)', () => {
map(array, abs)
})
.add('map(array, abs.signatures.number)', () => {
map(array, abs.signatures.number)
})
.add('genericMatrix.map(abs.signatures.number)', () => {
genericMatrix.map(abs.signatures.number)
})
.add('numberMatrix.map(abs.signatures.number)', () => {
numberMatrix.map(abs.signatures.number)
})
.add('genericMatrix iterate', () => {
const result = genericMatrix.clone()
for (const v of genericMatrix) {
result.set(v.index, abs(v.value))
}
})
.add('map(rowMatrix, columnMatrix, multiCallback)', () => {
map(rowMatrix, columnMatrix, multiCallback)
})
.add('map(rowArray, columnArray, multiCallback)', () => {
map(rowArray, columnArray, multiCallback)
})
.add('map(rowMatrix, columnMatrix, multiCallback1)', () => {
map(rowMatrix, columnMatrix, multiCallback1)
})
.add('map(rowArray, columnArray, multiCallback1)', () => {
map(rowArray, columnArray, multiCallback1)
})
.add('map(rowMatrix, columnMatrix, multiCallback2)', () => {
map(rowMatrix, columnMatrix, multiCallback2)
})
.add('map(rowArray, columnArray, multiCallback2)', () => {
map(rowArray, columnArray, multiCallback2)
})
bench.addEventListener('cycle', (event) => console.log(formatTaskResult(bench, event.task)))
await bench.run()