/** * @license Apache-2.0 * * Copyright (c) 2023 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'; // MODULES // var bench = require( '@stdlib/bench-harness' ); var pkg = require( './../package.json' ).name; var ndarray = require( './../lib' ); // MAIN // bench( pkg+'::1d:get', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; var v; var i; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 6 ]; strides = [ 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( i%6 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::1d:get:mode=wrap', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'wrap' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 6 ]; strides = [ 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( (i%20)-10 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::1d:get:mode=clamp', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'clamp' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 6 ]; strides = [ 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( (i%20)-10 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::2d:get', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; var v; var i; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 3, 2 ]; strides = [ 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( i%3, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::2d:get:mode=wrap', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'wrap' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 3, 2 ]; strides = [ 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( (i%30)-15, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::2d:get:mode=clamp', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'clamp' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 3, 2 ]; strides = [ 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( (i%30)-15, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::3d:get', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; var v; var i; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 1, 3, 2 ]; strides = [ 6, 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( 0, i%3, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::3d:get:mode=wrap', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'wrap' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 1, 3, 2 ]; strides = [ 6, 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( 0, (i%30)-15, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::3d:get:mode=clamp', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'clamp' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 1, 3, 2 ]; strides = [ 6, 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( 0, (i%30)-15, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::4d:get', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; var v; var i; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 1, 1, 3, 2 ]; strides = [ 6, 6, 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( 0, 0, i%3, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::4d:get:mode=wrap', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'wrap' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 1, 1, 3, 2 ]; strides = [ 6, 6, 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( 0, 0, (i%30)-15, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::4d:get:mode=clamp', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'clamp' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 1, 1, 3, 2 ]; strides = [ 6, 6, 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( 0, 0, (i%30)-15, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::5d:get', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; var v; var i; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 1, 1, 1, 3, 2 ]; strides = [ 6, 6, 6, 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( 0, 0, 0, i%3, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::5d:get:mode=wrap', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'wrap' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 1, 1, 1, 3, 2 ]; strides = [ 6, 6, 6, 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( 0, 0, 0, (i%30)-15, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); }); bench( pkg+'::5d:get:mode=clamp', function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var opts; var out; var v; var i; opts = { 'mode': 'clamp' }; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 1, 1, 1, 3, 2 ]; strides = [ 6, 6, 6, 2, 1 ]; offset = 0; order = 'row-major'; out = ndarray( 'generic', buffer, shape, strides, offset, order, opts ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { buffer[ 1 ] = i; v = out.get( 0, 0, 0, (i%30)-15, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } } b.toc(); if ( v !== v ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); b.end(); });