All files base.js

100% Statements 114/114
100% Branches 15/15
100% Functions 1/1
100% Lines 114/114

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 1153x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 4x 4x 3x 3x 3x 7x 7x 4x 4x 3x 3x 3x 7x 7x 7x 21x 11x 11x 11x 11x 21x 10x 10x 10x 10x 10x 21x 7x 7x 4x 7x 7x 7x 7x 4x 3x 3x 3x 3x 3x 3x 3x 7x 7x 7x 3x 3x 3x 3x 3x  
/**
* @license Apache-2.0
*
* Copyright (c) 2026 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
 
'use strict';
 
// MAIN //
 
/**
* Generates a permutation list to merge the entries of two independently sorted sets into a single set sorted in ascending order.
*
* ## Notes
*
* -   `A` should have `N1` + `N2` elements.
* -   `index` should have `N1` + `N2` elements and is overwritten with indices of array `A` such that the elements are in ascending order.
*
* @private
* @param {number} N1 - the length of the first sorted list to be merged.
* @param {number} N2 - the length of the second sorted list to be merged.
* @param {Float64Array} A - the array containing the first and the second sorted lists to be merged.
* @param {integer} strideA - stride length for `A`
* @param {NonNegativeInteger} offsetA - starting index of `A`
* @param {integer} DTRD1 - stride for first `N1` elements in `A`.
* @param {integer} DTRD2 - stride for last `N2` elements in `A`.
* @param {Int32Array} index - the array containing the indices of elements of `A` such that they are in ascending order.
* @param {integer} strideIndex - stride length for `index`.
* @param {NonNegativeInteger} offsetIndex - starting index of `index`.
* @returns {integer} status code
*
* @example
* var Float64Array = require( '@stdlib/array/float64' );
* var Int32Array = require( '@stdlib/array/int32' )
*
* var A = new Float64Array( [ 1.0, 3.0, 2.0, 4.0, 5.0 ] );
* var index = new Int32Array( 5 );
*
* dlamrg( 2, 3, A, 1, 0, 1, 1, index, 1, 0 );
* // index => <Int32Array>[ 0, 2, 1, 3, 4 ]
*/
function dlamrg( N1, N2, A, strideA, offsetA, DTRD1, DTRD2, index, strideIndex, offsetIndex ) {
	var ind1;
	var ind2;
	var n1sv;
	var n2sv;
	var i;
	var j;
 
	n1sv = N1;
	n2sv = N2;
	if ( DTRD1 > 0 ) {
		ind1 = offsetA;
	}
	else {
		ind1 = offsetA + ( ( N1 - 1 )*strideA );
	}
 
	if ( DTRD2 > 0 ) {
		ind2 = ( offsetA ) + ( N1*strideA );
	}
	else {
		ind2 = offsetA + ( ( N1 + N2 - 1 )*strideA );
	}
 
	i = offsetIndex;
	while ( n1sv > 0 && n2sv > 0 ) {
		if ( A[ ind1 ] <= A[ ind2 ] ) {
			index[ i ] = ind1;
			i += strideIndex;
			ind1 += DTRD1*strideA;
			n1sv -= 1;
		} else {
			index[ i ] = ind2;
			i += strideIndex;
			ind2 += DTRD2*strideA;
			n2sv -= 1;
		}
	}
 
	if (n1sv === 0) {
		for (j = 1; j <= n2sv; j++) {
			index[ i ] = ind2;
			i += strideIndex;
			ind2 += DTRD2*strideA;
		}
	}
	else {
		for ( j = 1; j <= n1sv; j++) {
			index[ i ] = ind1;
			i += strideIndex;
			ind1 += DTRD1*strideA;
		}
	}
 
	return 0;
}
 
 
// EXPORTS //
 
module.exports = dlamrg;