mathjs/test/benchmark/prime.js
2024-12-11 15:53:39 +01:00

31 lines
1.2 KiB
JavaScript

import assert from 'node:assert'
import { Bench } from 'tinybench'
import { isPrime } from '../../lib/esm/index.js'
import { formatTaskResult } from './utils/formatTaskResult.js'
const primes = [2147483647, 87178291199, 4398042316799]
const notPrimes = [2199023255551, 8796093022207, 140737488355327]
const carmichaels = [41041, 825265, 321197185] // more challenging numbers
// validate that the function does what we think it does
const primesResults = primes.map(num => isPrime(num))
const notPrimesResults = notPrimes.map(num => isPrime(num))
const carmichaelsResults = carmichaels.map(num => isPrime(num))
assert(primesResults.every(result => result === true))
assert(notPrimesResults.every(result => result === false))
assert(carmichaelsResults.every(result => result === false))
const bench = new Bench({ time: 100, iterations: 100 })
.add('primes', () => {
primes.forEach(num => isPrime(num))
})
.add('not primes', () => {
notPrimes.forEach(num => isPrime(num))
})
.add('carmichaels', () => {
carmichaels.forEach(num => isPrime(num))
})
bench.addEventListener('cycle', (event) => console.log(formatTaskResult(bench, event.task)))
await bench.run()