Source: linspace.mjs

import { tester, NDArray, array } from './core.mjs';

/**
 * @param {number} start
 * @param {number} stop
 * @param {number} [num]
 * @param {boolean} [endpoint]
 * @param {boolean} [retstep]
 * @returns {NDArray}
 */
export function linspace(start, stop, num = 50, endpoint = true, retstep = false) {
	let step = (stop - start) / (endpoint ? num - 1 : num);
	let data = [];
	for (let i = 0; i < num; i++) {
		data[i] = start + i * step;
	}
	let out = array(data);
	if (retstep) return [out, step];
	return out;
}

process.env.PRODUCTION ||
	tester
		.add(
			'linspace',
			() => linspace(2, 3, 5),
			() => array([2, 2.25, 2.5, 2.75, 3])
		)
		.add(
			'linspace',
			() => linspace(2, 3, 5, false),
			() => array([2, 2.2, 2.4, 2.6, 2.8])
		)
		.add(
			'linspace',
			() => linspace(2.0, 3.0, 5, true, true),
			() => [array([2, 2.25, 2.5, 2.75, 3]), 0.25]
		)
		.add(
			'linspace',
			() => linspace(2.0, 3.0, 5, false, true),
			() => [array([2, 2.2, 2.4, 2.6, 2.8]), 0.2]
		)
		.add(
			'linspace',
			() => linspace(1, 10, 10, false),
			() => array([1, 1.9, 2.8, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1])
		);