From 07fc2412c380131f61065be23af0bee3e4e00692 Mon Sep 17 00:00:00 2001 From: kaustubh Date: Mon, 18 May 2026 19:22:26 +0530 Subject: [PATCH 1/2] test: add alpha & beta tests for blas/base/ggemm --- .../ra_rb_rc_nta_ntb_alpha2_beta3.json | 22 +++++++++ .../row_major_nta_ntb_alpha2_beta3.json | 17 +++++++ .../@stdlib/blas/base/ggemm/test/test.main.js | 47 +++++++++++++++++++ .../blas/base/ggemm/test/test.ndarray.js | 47 +++++++++++++++++++ 4 files changed, 133 insertions(+) create mode 100644 lib/node_modules/@stdlib/blas/base/ggemm/test/fixtures/ra_rb_rc_nta_ntb_alpha2_beta3.json create mode 100644 lib/node_modules/@stdlib/blas/base/ggemm/test/fixtures/row_major_nta_ntb_alpha2_beta3.json diff --git a/lib/node_modules/@stdlib/blas/base/ggemm/test/fixtures/ra_rb_rc_nta_ntb_alpha2_beta3.json b/lib/node_modules/@stdlib/blas/base/ggemm/test/fixtures/ra_rb_rc_nta_ntb_alpha2_beta3.json new file mode 100644 index 000000000000..020e31958562 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/ggemm/test/fixtures/ra_rb_rc_nta_ntb_alpha2_beta3.json @@ -0,0 +1,22 @@ +{ + "transA": "no-transpose", + "transB": "no-transpose", + "M": 2, + "N": 4, + "K": 3, + "alpha": 2.0, + "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ], + "strideA1": 3, + "strideA2": 1, + "offsetA": 0, + "B": [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ], + "strideB1": 4, + "strideB2": 1, + "offsetB": 0, + "beta": 3.0, + "C": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], + "strideC1": 4, + "strideC2": 1, + "offsetC": 0, + "C_out": [ 15.0, 18.0, 21.0, 24.0, 45.0, 48.0, 51.0, 54.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/ggemm/test/fixtures/row_major_nta_ntb_alpha2_beta3.json b/lib/node_modules/@stdlib/blas/base/ggemm/test/fixtures/row_major_nta_ntb_alpha2_beta3.json new file mode 100644 index 000000000000..905d5b8470d1 --- /dev/null +++ b/lib/node_modules/@stdlib/blas/base/ggemm/test/fixtures/row_major_nta_ntb_alpha2_beta3.json @@ -0,0 +1,17 @@ +{ + "order": "row-major", + "transA": "no-transpose", + "transB": "no-transpose", + "M": 2, + "N": 4, + "K": 3, + "alpha": 2.0, + "A": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ], + "lda": 3, + "B": [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ], + "ldb": 4, + "beta": 3.0, + "C": [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ], + "ldc": 4, + "C_out": [ 15.0, 18.0, 21.0, 24.0, 45.0, 48.0, 51.0, 54.0 ] +} diff --git a/lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js b/lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js index 0c44902095b7..3e57a09de30b 100644 --- a/lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js +++ b/lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js @@ -41,6 +41,7 @@ var rntantb = require( './fixtures/row_major_nta_ntb.json' ); var rtantb = require( './fixtures/row_major_ta_ntb.json' ); var rntatb = require( './fixtures/row_major_nta_tb.json' ); var rtatb = require( './fixtures/row_major_ta_tb.json' ); +var rntantbAlpha2Beta3 = require( './fixtures/row_major_nta_ntb_alpha2_beta3.json' ); // TESTS // @@ -1393,3 +1394,49 @@ tape( 'if `α` is `0` and `β` is neither `0` nor `1`, the function returns the t.end(); }); + +tape( 'the function correctly applies both `α` and `β` scalars (row-major, no-transpose, no-transpose, α=2, β=3)', function test( t ) { + var expected; + var data; + var out; + var a; + var b; + var c; + + data = rntantbAlpha2Beta3; + + a = copy( data.A ); + b = copy( data.B ); + c = copy( data.C ); + + expected = data.C_out; + + out = ggemm( data.order, data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.lda, b, data.ldb, data.beta, c, data.ldc ); + t.strictEqual( out, c, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + t.end(); +}); + +tape( 'the function correctly applies both `α` and `β` scalars (row-major, no-transpose, no-transpose, α=2, β=3) (accessors)', function test( t ) { + var expected; + var data; + var cbuf; + var out; + var a; + var b; + var c; + + data = rntantbAlpha2Beta3; + + a = toAccessorArray( copy( data.A ) ); + b = toAccessorArray( copy( data.B ) ); + cbuf = copy( data.C ); + c = toAccessorArray( cbuf ); + + expected = data.C_out; + + out = ggemm( data.order, data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.lda, b, data.ldb, data.beta, c, data.ldc ); + t.strictEqual( out, c, 'returns expected value' ); + t.deepEqual( cbuf, expected, 'returns expected value' ); + t.end(); +}); diff --git a/lib/node_modules/@stdlib/blas/base/ggemm/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/ggemm/test/test.ndarray.js index 69dccc4d9e34..d5d9f0a87e31 100644 --- a/lib/node_modules/@stdlib/blas/base/ggemm/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/ggemm/test/test.ndarray.js @@ -85,6 +85,7 @@ var rarbrcntantboa = require( './fixtures/ra_rb_rc_nta_ntb_oa.json' ); var rarbrcntantbob = require( './fixtures/ra_rb_rc_nta_ntb_ob.json' ); var rarbrcntantboc = require( './fixtures/ra_rb_rc_nta_ntb_oc.json' ); var cap = require( './fixtures/ra_rb_rc_nta_ntb_complex_access_pattern.json' ); +var rarbrcntantbAlpha2Beta3 = require( './fixtures/ra_rb_rc_nta_ntb_alpha2_beta3.json' ); // TESTS // @@ -2945,3 +2946,49 @@ tape( 'the function supports computation over large arrays (column-major, column t.deepEqual( out, expected, 'returns expected value' ); t.end(); }); + +tape( 'the function correctly applies both `α` and `β` scalars (row-major, row-major, row-major, no-transpose, no-transpose, α=2, β=3)', function test( t ) { + var expected; + var data; + var out; + var a; + var b; + var c; + + data = rarbrcntantbAlpha2Beta3; + + a = copy( data.A ); + b = copy( data.B ); + c = copy( data.C ); + + expected = data.C_out; + + out = ggemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); + t.strictEqual( out, c, 'returns expected value' ); + t.deepEqual( out, expected, 'returns expected value' ); + t.end(); +}); + +tape( 'the function correctly applies both `α` and `β` scalars (row-major, row-major, row-major, no-transpose, no-transpose, α=2, β=3) (accessors)', function test( t ) { + var expected; + var data; + var cbuf; + var out; + var a; + var b; + var c; + + data = rarbrcntantbAlpha2Beta3; + + a = toAccessorArray( copy( data.A ) ); + b = toAccessorArray( copy( data.B ) ); + cbuf = copy( data.C ); + c = toAccessorArray( cbuf ); + + expected = data.C_out; + + out = ggemm( data.transA, data.transB, data.M, data.N, data.K, data.alpha, a, data.strideA1, data.strideA2, data.offsetA, b, data.strideB1, data.strideB2, data.offsetB, data.beta, c, data.strideC1, data.strideC2, data.offsetC ); + t.strictEqual( out, c, 'returns expected value' ); + t.deepEqual( cbuf, expected, 'returns expected value' ); + t.end(); +}); From 99620bc5abc63b833c2c724627c08a07636c3900 Mon Sep 17 00:00:00 2001 From: kaustubh Date: Mon, 18 May 2026 19:27:00 +0530 Subject: [PATCH 2/2] disable lint rule for test files --- lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js | 2 +- lib/node_modules/@stdlib/blas/base/ggemm/test/test.ndarray.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js b/lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js index 3e57a09de30b..b30a2dfdc6ef 100644 --- a/lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js +++ b/lib/node_modules/@stdlib/blas/base/ggemm/test/test.main.js @@ -16,7 +16,7 @@ * limitations under the License. */ -/* eslint-disable max-len */ +/* eslint-disable max-len, stdlib/no-empty-lines-between-requires */ 'use strict'; diff --git a/lib/node_modules/@stdlib/blas/base/ggemm/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/ggemm/test/test.ndarray.js index d5d9f0a87e31..60108d37853d 100644 --- a/lib/node_modules/@stdlib/blas/base/ggemm/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/ggemm/test/test.ndarray.js @@ -16,7 +16,7 @@ * limitations under the License. */ -/* eslint-disable max-len */ +/* eslint-disable max-len, stdlib/no-empty-lines-between-requires */ 'use strict';