Source: full.mjs

import { tester, empty, copyto, NDArray, Dtype, guessType, array, array_equal, shape } from './core.mjs';

/**
 * @param {number[]} shape
 * @param {any} fill_value
 * @param {Dtype} [dtype]
 * @returns {NDArray}
 */
export function full(shape, fill_value, dtype = undefined) {
	let out = empty(shape, dtype ?? guessType(fill_value));
	copyto(out, fill_value);
	return out;
}

/**
 * @param {NDArray} a array-like
 * @param {any} fill_value
 * @param {Dtype} [dtype]
 * @returns {NDArray}
 */
export function full_like(a, fill_value, dtype = undefined) {
	return full(shape(a), fill_value, dtype);
}

process.env.PRODUCTION ||
	tester
		.add(
			'full',
			() => full([2, 2], Infinity),
			() => [
				[Infinity, Infinity],
				[Infinity, Infinity],
			]
		)
		.add(
			'full',
			() => full([2, 2], 10),
			() => [
				[10, 10],
				[10, 10],
			]
		)
		.add(
			'full',
			() => full([2, 2], [1, 2]),
			() => [
				[1, 2],
				[1, 2],
			]
		)
		.add(
			'full',
			() => full(2, -1),
			() => [-1, -1]
		);

process.env.PRODUCTION ||
	tester
		.add(
			full_like,
			() => full_like([1], 2),
			() => [2]
		)
		.add(
			full_like,
			() => full_like(1, 99),
			() => 99
		)
		.add(
			full_like,
			() =>
				array_equal(
					full_like(
						[
							[0, 1],
							[2, 3],
						],
						[1.1, 2.2],
						'int8'
					),
					array([
						[1, 2],
						[1, 2],
					])
				),
			() => true
		);