20
20
21
21
// MODULES //
22
22
23
+ var isColumnMajor = require ( '@stdlib/ndarray/base/assert/is-column-major-string' ) ;
23
24
var isLayout = require ( '@stdlib/blas/base/assert/is-layout' ) ;
24
25
var resolve = require ( '@stdlib/blas/base/layout-resolve-enum' ) ;
26
+ var max = require ( '@stdlib/math/base/special/fast/max' ) ;
25
27
var format = require ( '@stdlib/string/format' ) ;
26
28
var addon = require ( './../src/addon.node' ) ;
27
29
@@ -60,6 +62,7 @@ var addon = require( './../src/addon.node' );
60
62
* // A => <Float64Array>[ 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 ]
61
63
*/
62
64
function dger ( order , M , N , alpha , x , strideX , y , strideY , A , LDA ) {
65
+ var vala ;
63
66
if ( ! isLayout ( order ) ) {
64
67
throw new TypeError ( format ( 'invalid argument. First argument must be a valid order. Value: `%s`.' , order ) ) ;
65
68
}
@@ -75,6 +78,18 @@ function dger( order, M, N, alpha, x, strideX, y, strideY, A, LDA ) {
75
78
if ( strideY === 0 ) {
76
79
throw new RangeError ( format ( 'invalid argument. Eighth argument must be non-zero. Value: `%d`.' , strideY ) ) ;
77
80
}
81
+ if ( isColumnMajor ( order ) ) {
82
+ vala = M ;
83
+ } else {
84
+ vala = N ;
85
+ }
86
+ if ( LDA < max ( 1 , vala ) ) {
87
+ throw new RangeError ( format ( 'invalid argument. Tenth argument must be greater than or equal to max(1,%d). Value: `%d`.' , vala , LDA ) ) ;
88
+ }
89
+ // Check if we can early return...
90
+ if ( M === 0 || N === 0 || alpha === 0.0 ) {
91
+ return A ;
92
+ }
78
93
addon ( resolve ( order ) , M , N , alpha , x , strideX , y , strideY , A , LDA ) ;
79
94
return A ;
80
95
}
0 commit comments