diff --git a/lib/node_modules/@stdlib/ndarray/base/ctor/README.md b/lib/node_modules/@stdlib/ndarray/base/ctor/README.md index 9197e8929c77..9940b8d06872 100644 --- a/lib/node_modules/@stdlib/ndarray/base/ctor/README.md +++ b/lib/node_modules/@stdlib/ndarray/base/ctor/README.md @@ -510,11 +510,44 @@ var d = arr.data; For zero-dimensional arrays, the first, and **only**, argument should be the value `v` to set. The method returns the `ndarray` instance. + + +#### ndarray.prototype.toLocaleString( \[locales\[, options]] ) + +Serializes an `ndarray` as a locale-specific string. + +```javascript +// Specify the array configuration: +var buffer = [ 1234.567, 9876.543, 1111.222, 3333.444 ]; +var shape = [ 2, 2 ]; +var order = 'row-major'; +var strides = [ 2, 1 ]; +var offset = 0; + +// Create a new ndarray: +var arr = ndarray( 'generic', buffer, shape, strides, offset, order ); + +// Serialize to a locale-specific string: +var str = arr.toLocaleString( 'en-US' ); +// returns "ndarray( 'generic', [ 1,234.567, 9,876.543, 1,111.222, 3,333.444 ], [ 2, 2 ], [ 2, 1 ], 0, 'row-major' )" + +// Use German locale: +str = arr.toLocaleString( 'de-DE' ); +// returns "ndarray( 'generic', [ 1.234,567, 9.876,543, 1.111,222, 3.333,444 ], [ 2, 2 ], [ 2, 1 ], 0, 'row-major' )" +``` + +The method accepts the following arguments: + +- **locales**: a string with a BCP 47 language tag or an array of such strings. +- **options**: configuration properties. + +The method does **not** serialize data outside of the buffer region defined by the array configuration. + #### ndarray.prototype.toString() -Serializes an `ndarray` as a `string`. +Serializes an `ndarray` as a string. ```javascript // Specify the array configuration: diff --git a/lib/node_modules/@stdlib/ndarray/base/ctor/benchmark/benchmark.js b/lib/node_modules/@stdlib/ndarray/base/ctor/benchmark/benchmark.js index 448bd2c01153..bb09b8829c57 100644 --- a/lib/node_modules/@stdlib/ndarray/base/ctor/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/ndarray/base/ctor/benchmark/benchmark.js @@ -21,15 +21,14 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); -var floor = require( '@stdlib/math/base/special/floor' ); +var format = require( '@stdlib/string/format' ); var pkg = require( './../package.json' ).name; var ndarray = require( './../lib' ); // MAIN // -bench( pkg+'::instantiation', function benchmark( b ) { +bench( format( '%s::instantiation', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -46,7 +45,7 @@ bench( pkg+'::instantiation', function benchmark( b ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 0 ] = randu(); + buffer[ 0 ] = i; out = ndarray( 'generic', buffer, shape, strides, offset, order ); if ( out.length === 0 ) { b.fail( 'should have a length greater than 0' ); @@ -60,7 +59,7 @@ bench( pkg+'::instantiation', function benchmark( b ) { b.end(); }); -bench( pkg+'::instantiation,new', function benchmark( b ) { +bench( format( '%s::instantiation,new', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -77,7 +76,7 @@ bench( pkg+'::instantiation,new', function benchmark( b ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 0 ] = randu(); + buffer[ 0 ] = i; out = new ndarray( 'generic', buffer, shape, strides, offset, order ); if ( out.length === 0 ) { b.fail( 'should have a length greater than 0' ); @@ -91,7 +90,7 @@ bench( pkg+'::instantiation,new', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:byteLength', function benchmark( b ) { +bench( format( '%s::get:byteLength', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -124,7 +123,7 @@ bench( pkg+'::get:byteLength', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:_byteLength', function benchmark( b ) { +bench( format( '%s::get:_byteLength', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -157,7 +156,7 @@ bench( pkg+'::get:_byteLength', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:BYTES_PER_ELEMENT', function benchmark( b ) { +bench( format( '%s::get:BYTES_PER_ELEMENT', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -190,7 +189,7 @@ bench( pkg+'::get:BYTES_PER_ELEMENT', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:data', function benchmark( b ) { +bench( format( '%s::get:data', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -223,7 +222,7 @@ bench( pkg+'::get:data', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:_buffer', function benchmark( b ) { +bench( format( '%s::get:_buffer', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -256,7 +255,7 @@ bench( pkg+'::get:_buffer', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:dtype', function benchmark( b ) { +bench( format( '%s::get:dtype', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -277,19 +276,19 @@ bench( pkg+'::get:dtype', function benchmark( b ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { v = out.dtype; - if ( v !== 'generic' ) { + if ( v === null ) { b.fail( 'should return expected data type' ); } } b.toc(); - if ( v !== 'generic' ) { + if ( String( v ) !== 'generic' ) { b.fail( 'should return expected data type' ); } b.pass( 'benchmark finished' ); b.end(); }); -bench( pkg+'::get:flags', function benchmark( b ) { +bench( format( '%s::get:flags', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -322,7 +321,7 @@ bench( pkg+'::get:flags', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:_flags', function benchmark( b ) { +bench( format( '%s::get:_flags', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -355,7 +354,7 @@ bench( pkg+'::get:_flags', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:length', function benchmark( b ) { +bench( format( '%s::get:length', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -388,7 +387,7 @@ bench( pkg+'::get:length', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:_length', function benchmark( b ) { +bench( format( '%s::get:_length', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -421,7 +420,7 @@ bench( pkg+'::get:_length', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:ndims', function benchmark( b ) { +bench( format( '%s::get:ndims', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -454,7 +453,7 @@ bench( pkg+'::get:ndims', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:offset', function benchmark( b ) { +bench( format( '%s::get:offset', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -487,7 +486,7 @@ bench( pkg+'::get:offset', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:_offset', function benchmark( b ) { +bench( format( '%s::get:_offset', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -520,7 +519,7 @@ bench( pkg+'::get:_offset', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:order', function benchmark( b ) { +bench( format( '%s::get:order', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -553,7 +552,7 @@ bench( pkg+'::get:order', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:_order', function benchmark( b ) { +bench( format( '%s::get:_order', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -586,7 +585,7 @@ bench( pkg+'::get:_order', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:shape', function benchmark( b ) { +bench( format( '%s::get:shape', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -619,7 +618,7 @@ bench( pkg+'::get:shape', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:_shape', function benchmark( b ) { +bench( format( '%s::get:_shape', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -652,7 +651,7 @@ bench( pkg+'::get:_shape', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:strides', function benchmark( b ) { +bench( format( '%s::get:strides', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -685,7 +684,7 @@ bench( pkg+'::get:strides', function benchmark( b ) { b.end(); }); -bench( pkg+'::get:_strides', function benchmark( b ) { +bench( format( '%s::get:_strides', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -718,7 +717,7 @@ bench( pkg+'::get:_strides', function benchmark( b ) { b.end(); }); -bench( pkg+':get', function benchmark( b ) { +bench( format( '%s:get', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -738,8 +737,8 @@ bench( pkg+':get', function benchmark( b ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 1 ] = randu(); - v = out.get( floor( randu()*3.0 ), 1 ); + buffer[ 1 ] = i; + v = out.get( i%3, 1 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } @@ -752,7 +751,7 @@ bench( pkg+':get', function benchmark( b ) { b.end(); }); -bench( pkg+'::all_positive_strides:iget:order=row-major', function benchmark( b ) { +bench( format( '%s::all_positive_strides:iget:order=row-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -772,8 +771,8 @@ bench( pkg+'::all_positive_strides:iget:order=row-major', function benchmark( b b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 1 ] = randu(); - v = out.iget( floor( randu()*4.0 ) ); + buffer[ 1 ] = i; + v = out.iget( i%4 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } @@ -786,7 +785,7 @@ bench( pkg+'::all_positive_strides:iget:order=row-major', function benchmark( b b.end(); }); -bench( pkg+'::all_positive_strides:iget:order=column-major', function benchmark( b ) { +bench( format( '%s::all_positive_strides:iget:order=column-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -806,8 +805,8 @@ bench( pkg+'::all_positive_strides:iget:order=column-major', function benchmark( b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 1 ] = randu(); - v = out.iget( floor( randu()*4.0 ) ); + buffer[ 1 ] = i; + v = out.iget( i%4 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } @@ -820,7 +819,7 @@ bench( pkg+'::all_positive_strides:iget:order=column-major', function benchmark( b.end(); }); -bench( pkg+'::all_negative_strides:iget:order=row-major', function benchmark( b ) { +bench( format( '%s::all_negative_strides:iget:order=row-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -840,8 +839,8 @@ bench( pkg+'::all_negative_strides:iget:order=row-major', function benchmark( b b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 1 ] = randu(); - v = out.iget( floor( randu()*4.0 ) ); + buffer[ 1 ] = i; + v = out.iget( i%4 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } @@ -854,7 +853,7 @@ bench( pkg+'::all_negative_strides:iget:order=row-major', function benchmark( b b.end(); }); -bench( pkg+'::all_negative_strides:iget:order=column-major', function benchmark( b ) { +bench( format( '%s::all_negative_strides:iget:order=column-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -874,8 +873,8 @@ bench( pkg+'::all_negative_strides:iget:order=column-major', function benchmark( b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 1 ] = randu(); - v = out.iget( floor( randu()*4.0 ) ); + buffer[ 1 ] = i; + v = out.iget( i%4 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } @@ -888,7 +887,7 @@ bench( pkg+'::all_negative_strides:iget:order=column-major', function benchmark( b.end(); }); -bench( pkg+'::mixed_sign_strides:iget:order=row-major', function benchmark( b ) { +bench( format( '%s::mixed_sign_strides:iget:order=row-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -908,8 +907,8 @@ bench( pkg+'::mixed_sign_strides:iget:order=row-major', function benchmark( b ) b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 1 ] = randu(); - v = out.iget( floor( randu()*4.0 ) ); + buffer[ 1 ] = i; + v = out.iget( i%4 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } @@ -922,7 +921,7 @@ bench( pkg+'::mixed_sign_strides:iget:order=row-major', function benchmark( b ) b.end(); }); -bench( pkg+'::mixed_sign_strides:iget:order=column-major', function benchmark( b ) { +bench( format( '%s::mixed_sign_strides:iget:order=column-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -942,8 +941,8 @@ bench( pkg+'::mixed_sign_strides:iget:order=column-major', function benchmark( b b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 1 ] = randu(); - v = out.iget( floor( randu()*4.0 ) ); + buffer[ 1 ] = i; + v = out.iget( i%4 ); if ( v !== v ) { b.fail( 'should not return NaN' ); } @@ -956,14 +955,13 @@ bench( pkg+'::mixed_sign_strides:iget:order=column-major', function benchmark( b b.end(); }); -bench( pkg+':set', function benchmark( b ) { +bench( format( '%s:set', pkg ), function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; - var v; var i; var j; @@ -977,29 +975,27 @@ bench( pkg+':set', function benchmark( b ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - v = randu(); - j = floor( randu()*3.0 ); - out.set( j, 1, v ); - if ( buffer[ (2*j) + (1*1) ] !== v ) { + j = i%3; + out.set( j, 1, i ); + if ( buffer[ (2*j) + (1*1) ] !== i ) { b.fail( 'should set value' ); } } b.toc(); - if ( buffer[ (2*j) + 1 ] !== v ) { + if ( buffer[ (2*j) + 1 ] !== i-1 ) { b.fail( 'should set value' ); } b.pass( 'benchmark finished' ); b.end(); }); -bench( pkg+'::all_positive_strides:iset:order=row-major', function benchmark( b ) { +bench( format( '%s::all_positive_strides:iset:order=row-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; - var v; var i; var j; @@ -1013,29 +1009,27 @@ bench( pkg+'::all_positive_strides:iset:order=row-major', function benchmark( b b.tic(); for ( i = 0; i < b.iterations; i++ ) { - v = randu(); - j = floor( randu()*4.0 ); - out.iset( j, v ); - if ( buffer[ j ] !== v ) { + j = i%4; + out.iset( j, i ); + if ( buffer[ j ] !== i ) { b.fail( 'should set value' ); } } b.toc(); - if ( buffer[ j ] !== v ) { + if ( buffer[ j ] !== i-1 ) { b.fail( 'should set value' ); } b.pass( 'benchmark finished' ); b.end(); }); -bench( pkg+'::all_positive_strides:iset:order=column-major', function benchmark( b ) { +bench( format( '%s::all_positive_strides:iset:order=column-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; - var v; var i; var j; @@ -1049,29 +1043,27 @@ bench( pkg+'::all_positive_strides:iset:order=column-major', function benchmark( b.tic(); for ( i = 0; i < b.iterations; i++ ) { - v = randu(); - j = floor( randu()*4.0 ); - out.iset( j, v ); - if ( buffer[ j ] !== v ) { + j = i%4; + out.iset( j, i ); + if ( buffer[ j ] !== i ) { b.fail( 'should set value' ); } } b.toc(); - if ( buffer[ j ] !== v ) { + if ( buffer[ j ] !== i-1 ) { b.fail( 'should set value' ); } b.pass( 'benchmark finished' ); b.end(); }); -bench( pkg+'::all_negative_strides:iset:order=row-major', function benchmark( b ) { +bench( format( '%s::all_negative_strides:iset:order=row-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; - var v; var i; var j; @@ -1085,29 +1077,27 @@ bench( pkg+'::all_negative_strides:iset:order=row-major', function benchmark( b b.tic(); for ( i = 0; i < b.iterations; i++ ) { - v = randu(); - j = floor( randu()*4.0 ); - out.iset( j, v ); - if ( buffer[ 3-j ] !== v ) { + j = i%4; + out.iset( j, i ); + if ( buffer[ 3-j ] !== i ) { b.fail( 'should set value' ); } } b.toc(); - if ( buffer[ 3-j ] !== v ) { + if ( buffer[ 3-j ] !== i-1 ) { b.fail( 'should set value' ); } b.pass( 'benchmark finished' ); b.end(); }); -bench( pkg+'::all_negative_strides:iset:order=column-major', function benchmark( b ) { +bench( format( '%s::all_negative_strides:iset:order=column-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; - var v; var i; var j; @@ -1121,31 +1111,28 @@ bench( pkg+'::all_negative_strides:iset:order=column-major', function benchmark( b.tic(); for ( i = 0; i < b.iterations; i++ ) { - v = randu(); - j = floor( randu()*4.0 ); - out.iset( j, v ); - if ( buffer[ 3-j ] !== v ) { + j = i%4; + out.iset( j, i ); + if ( buffer[ 3-j ] !== i ) { b.fail( 'should set value' ); } } b.toc(); - if ( buffer[ 3-j ] !== v ) { + if ( buffer[ 3-j ] !== i-1 ) { b.fail( 'should set value' ); } b.pass( 'benchmark finished' ); b.end(); }); -bench( pkg+'::mixed_sign_strides:iset:order=row-major', function benchmark( b ) { +bench( format( '%s::mixed_sign_strides:iset:order=row-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; - var v; var i; - var j; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 3, 2 ]; @@ -1157,31 +1144,27 @@ bench( pkg+'::mixed_sign_strides:iset:order=row-major', function benchmark( b ) b.tic(); for ( i = 0; i < b.iterations; i++ ) { - v = randu(); - j = floor( randu()*4.0 ); - out.iset( j, v ); + out.iset( i%4, i ); if ( buffer[ 0 ] !== buffer[ 0 ] ) { b.fail( 'should not be NaN' ); } } b.toc(); - if ( out.iget( j ) !== v ) { + if ( out.iget( (i-1)%4 ) !== i-1 ) { b.fail( 'should set value' ); } b.pass( 'benchmark finished' ); b.end(); }); -bench( pkg+'::mixed_sign_strides:iset:order=column-major', function benchmark( b ) { +bench( format( '%s::mixed_sign_strides:iset:order=column-major', pkg ), function benchmark( b ) { var strides; var buffer; var offset; var shape; var order; var out; - var v; var i; - var j; buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ]; shape = [ 3, 2 ]; @@ -1193,22 +1176,20 @@ bench( pkg+'::mixed_sign_strides:iset:order=column-major', function benchmark( b b.tic(); for ( i = 0; i < b.iterations; i++ ) { - v = randu(); - j = floor( randu()*4.0 ); - out.iset( j, v ); + out.iset( i%4, i ); if ( buffer[ 0 ] !== buffer[ 0 ] ) { b.fail( 'should not be NaN' ); } } b.toc(); - if ( out.iget( j ) !== v ) { + if ( out.iget( (i-1)%4 ) !== i-1 ) { b.fail( 'should set value' ); } b.pass( 'benchmark finished' ); b.end(); }); -bench( pkg+':toJSON', function benchmark( b ) { +bench( format( '%s:toJSON', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -1228,7 +1209,7 @@ bench( pkg+':toJSON', function benchmark( b ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 1 ] = randu(); + buffer[ 1 ] = i; v = out.toJSON(); if ( typeof v !== 'object' ) { b.fail( 'should return an object' ); @@ -1242,7 +1223,41 @@ bench( pkg+':toJSON', function benchmark( b ) { b.end(); }); -bench( pkg+':toString', function benchmark( b ) { +bench( format( '%s:toLocaleString', pkg ), 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.toLocaleString(); + if ( typeof v !== 'string' ) { + b.fail( 'should return a string' ); + } + } + b.toc(); + if ( typeof v !== 'string' ) { + b.fail( 'should return a string' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( format( '%s:toString', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -1262,7 +1277,7 @@ bench( pkg+':toString', function benchmark( b ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - buffer[ 1 ] = randu(); + buffer[ 1 ] = i; v = out.toString(); if ( typeof v !== 'string' ) { b.fail( 'should return a string' ); @@ -1276,7 +1291,7 @@ bench( pkg+':toString', function benchmark( b ) { b.end(); }); -bench( pkg+':valueOf:ndims=0', function benchmark( b ) { +bench( format( '%s:valueOf:ndims=0', pkg ), function benchmark( b ) { var strides; var buffer; var offset; @@ -1310,7 +1325,7 @@ bench( pkg+':valueOf:ndims=0', function benchmark( b ) { b.end(); }); -bench( pkg+':valueOf:ndims>=1', function benchmark( b ) { +bench( format( '%s:valueOf:ndims>=1', pkg ), function benchmark( b ) { var strides; var buffer; var offset; diff --git a/lib/node_modules/@stdlib/ndarray/base/ctor/docs/repl.txt b/lib/node_modules/@stdlib/ndarray/base/ctor/docs/repl.txt index ba02ec05bea4..7735a40a4c6c 100644 --- a/lib/node_modules/@stdlib/ndarray/base/ctor/docs/repl.txt +++ b/lib/node_modules/@stdlib/ndarray/base/ctor/docs/repl.txt @@ -38,10 +38,10 @@ Examples -------- // Create a new instance... - > var b = [ 1, 2, 3, 4 ]; // underlying data buffer - > var d = [ 2, 2 ]; // shape - > var s = [ 2, 1 ]; // strides - > var o = 0; // index offset + > var b = [ 1, 2, 3, 4 ]; + > var d = [ 2, 2 ]; + > var s = [ 2, 1 ]; + > var o = 0; > var arr = {{alias}}( 'generic', b, d, s, o, 'row-major' ) @@ -397,6 +397,36 @@ -4.0 +{{alias}}.prototype.toLocaleString( [locales[, options]] ) + Serializes an ndarray as a locale-aware string. + + This method does **not** serialize data outside of the buffer region defined + by the array configuration. + + Parameters + ---------- + locales: string|Array (optional) + Locale identifier(s). + + options: Object (optional) + Configuration options. + + Returns + ------- + str: string + Serialized ndarray string. + + Examples + -------- + > var b = [ 1, 2, 3, 4 ]; + > var d = [ 2, 2 ]; + > var s = [ 2, 1 ]; + > var o = 0; + > var arr = {{alias}}( 'generic', b, d, s, o, 'row-major' ); + > arr.toLocaleString() + '...' + + {{alias}}.prototype.toString() Serializes an ndarray as a string. diff --git a/lib/node_modules/@stdlib/ndarray/base/ctor/lib/main.js b/lib/node_modules/@stdlib/ndarray/base/ctor/lib/main.js index f99d708056fb..48f19aa76f8b 100644 --- a/lib/node_modules/@stdlib/ndarray/base/ctor/lib/main.js +++ b/lib/node_modules/@stdlib/ndarray/base/ctor/lib/main.js @@ -41,6 +41,7 @@ var getValue = require( './get.js' ); var valueOf = require( './valueof.js' ); // eslint-disable-line stdlib/no-redeclare var toJSON = require( './tojson.js' ); var toString = require( './tostring.js' ); // eslint-disable-line stdlib/no-redeclare +var toLocaleString = require( './tolocalestring.js' ); // eslint-disable-line stdlib/no-redeclare var meta2dataview = require( './meta2dataview.js' ); var meta2dataviewPolyfill = require( './meta2dataview.polyfill.js' ); @@ -544,6 +545,35 @@ setReadOnly( ndarray.prototype, 'iset', isetValue ); */ setReadOnly( ndarray.prototype, 'toString', toString ); +/** +* Serializes an ndarray as a locale-aware string. +* +* ## Notes +* +* - The method does **not** serialize data outside of the buffer region defined by the array configuration. +* +* @name toLocaleString +* @memberof ndarray.prototype +* @type {Function} +* @param {(string|Array)} [locales] - locale identifier(s) +* @param {Object} [options] - configuration options +* @throws {TypeError} first argument must be a string or an array of strings +* @throws {TypeError} options argument must be an object +* @returns {string} string representation +* +* @example +* var buffer = [ 1234.567, 9876.543, 1111.222, 3333.444 ]; +* var shape = [ 2, 2 ]; +* var strides = [ 2, 1 ]; +* var offset = 0; +* +* var x = ndarray( 'generic', buffer, shape, strides, offset, 'row-major' ); +* +* var str = x.toLocaleString( 'en-US' ); +* // returns "ndarray( 'generic', [ 1,234.567, 9,876.543, 1,111.222, 3,333.444 ], [ 2, 2 ], [ 2, 1 ], 0, 'row-major' )" +*/ +setReadOnly( ndarray.prototype, 'toLocaleString', toLocaleString ); + /** * Serializes an ndarray as a JSON object. * diff --git a/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tojson.js b/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tojson.js index 9429edb97ceb..c88e918716ab 100644 --- a/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tojson.js +++ b/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tojson.js @@ -20,6 +20,7 @@ // MODULES // +var isComplexDataType = require( '@stdlib/ndarray/base/assert/is-complex-floating-point-data-type' ); var real = require( '@stdlib/complex/float64/real' ); var imag = require( '@stdlib/complex/float64/imag' ); @@ -64,7 +65,7 @@ function toJSON() { } // Cast data to generic array... out.data = []; - if ( out.dtype === 'complex64' || out.dtype === 'complex128' ) { + if ( isComplexDataType( out.dtype ) ) { for ( i = 0; i < len; i++ ) { v = this.iget( i ); out.data.push( real( v ), imag( v ) ); diff --git a/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tolocalestring.js b/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tolocalestring.js new file mode 100644 index 000000000000..4be8a7a25deb --- /dev/null +++ b/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tolocalestring.js @@ -0,0 +1,209 @@ +/** +* @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'; + +// MODULES // + +var isComplexDataType = require( '@stdlib/ndarray/base/assert/is-complex-floating-point-data-type' ); +var isString = require( '@stdlib/assert/is-string' ).isPrimitive; +var isStringArray = require( '@stdlib/assert/is-string-array' ).primitives; +var isObject = require( '@stdlib/assert/is-plain-object' ); +var format = require( '@stdlib/string/format' ); +var replace = require( '@stdlib/string/replace' ); +var join = require( '@stdlib/array/base/join' ); +var real = require( '@stdlib/complex/float64/real' ); +var imag = require( '@stdlib/complex/float64/imag' ); + + +// VARIABLES // + +var CTORS = { + 'int8': 'new Int8Array( [ {{data}} ] )', + 'uint8': 'new Uint8Array( [ {{data}} ] )', + 'uint8c': 'new Uint8ClampedArray( [ {{data}} ] )', + 'int16': 'new Int16Array( [ {{data}} ] )', + 'uint16': 'new Uint16Array( [ {{data}} ] )', + 'int32': 'new Int32Array( [ {{data}} ] )', + 'uint32': 'new Uint32Array( [ {{data}} ] )', + 'float32': 'new Float32Array( [ {{data}} ] )', + 'float64': 'new Float64Array( [ {{data}} ] )', + 'generic': '[ {{data}} ]', + 'binary': 'new Buffer( [ {{data}} ] )', + 'complex64': 'new Complex64Array( [ {{data}} ] )', + 'complex128': 'new Complex128Array( [ {{data}} ] )', + 'bool': 'new BooleanArray( [ {{data}} ] )' +}; + + +// MAIN // + +/** +* Serializes an ndarray as a locale-aware string. +* +* ## Notes +* +* - The method does **not** serialize data outside of the buffer region defined by the array configuration. +* +* @private +* @param {(string|Array)} [locales] - locale identifier(s) +* @param {Object} [options] - configuration options +* @throws {TypeError} first argument must be a string or an array of strings +* @throws {TypeError} options argument must be an object +* @returns {string} string representation +*/ +function toLocaleString( locales, options ) { // eslint-disable-line stdlib/no-redeclare + /* eslint-disable no-invalid-this */ + var isCmplx; + var buffer; + var ndims; + var ctor; + var opts; + var loc; + var str; + var dt; + var v; + var i; + + if ( arguments.length === 0 ) { + loc = []; + } else if ( isString( locales ) || isStringArray( locales ) ) { + loc = locales; + } else { + throw new TypeError( format( 'invalid argument. First argument must be a string or an array of strings. Value: `%s`.', locales ) ); + } + if ( arguments.length < 2 ) { + opts = {}; + } else if ( isObject( options ) ) { + opts = options; + } else { + throw new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) ); + } + ndims = this._shape.length; + dt = this._dtype; + isCmplx = isComplexDataType( dt ); + + // Function to invoke to create an ndarray: + str = format( 'ndarray( \'%s\', ', String( dt ) ); + + // Data buffer parameter... + buffer = ''; + if ( this._length <= 100 ) { + if ( isCmplx ) { + for ( i = 0; i < this._length; i++ ) { + v = this.iget( i ); + buffer += real( v ).toLocaleString( loc, opts ) + ', ' + imag( v ).toLocaleString( loc, opts ); + if ( i < this._length-1 ) { + buffer += ', '; + } + } + } else { + for ( i = 0; i < this._length; i++ ) { + buffer += this.iget( i ).toLocaleString( loc, opts ); + if ( i < this._length-1 ) { + buffer += ', '; + } + } + } + } else { + // First three values... + if ( isCmplx ) { + for ( i = 0; i < 3; i++ ) { + v = this.iget( i ); + buffer += real( v ).toLocaleString( loc, opts ) + ', ' + imag( v ).toLocaleString( loc, opts ); + if ( i < 2 ) { + buffer += ', '; + } + } + } else { + for ( i = 0; i < 3; i++ ) { + buffer += this.iget( i ).toLocaleString( loc, opts ); + if ( i < 2 ) { + buffer += ', '; + } + } + } + buffer += ', ..., '; + + // Last three values... + if ( isCmplx ) { + for ( i = 2; i >= 0; i-- ) { + v = this.iget( this._length-1-i ); + buffer += real( v ).toLocaleString( loc, opts ) + ', ' + imag( v ).toLocaleString( loc, opts ); + if ( i > 0 ) { + buffer += ', '; + } + } + } else { + for ( i = 2; i >= 0; i-- ) { + buffer += this.iget( this._length-1-i ).toLocaleString( loc, opts ); // eslint-disable-line max-len + if ( i > 0 ) { + buffer += ', '; + } + } + } + } + ctor = CTORS[ this.dtype ]; + str += replace( ctor, '{{data}}', buffer ); + str += ', '; + + // Array shape... + if ( ndims === 0 ) { + str += '[]'; + } else { + str += format( '[ %s ]', join( this._shape, ', ' ) ); + } + str += ', '; + + // Stride array... + str += '[ '; + if ( ndims === 0 ) { + str += '0'; + } else { + for ( i = 0; i < ndims; i++ ) { + if ( this._strides[ i ] < 0 ) { + str += -this._strides[ i ]; + } else { + str += this._strides[ i ]; + } + if ( i < ndims-1 ) { + str += ', '; + } + } + } + str += ' ]'; + str += ', '; + + // Buffer offset: + str += '0'; + str += ', '; + + // Order: + str += format( '\'%s\'', this._order ); + + // Close the function call: + str += ' )'; + return str; + + /* eslint-enable no-invalid-this */ +} + + +// EXPORTS // + +module.exports = toLocaleString; diff --git a/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tostring.js b/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tostring.js index 29df939b0ab6..653d7b7a58d8 100644 --- a/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tostring.js +++ b/lib/node_modules/@stdlib/ndarray/base/ctor/lib/tostring.js @@ -18,33 +18,6 @@ 'use strict'; -// MODULES // - -var replace = require( '@stdlib/string/replace' ); -var real = require( '@stdlib/complex/float64/real' ); -var imag = require( '@stdlib/complex/float64/imag' ); - - -// VARIABLES // - -var CTORS = { - 'int8': 'new Int8Array( [ {{data}} ] )', - 'uint8': 'new Uint8Array( [ {{data}} ] )', - 'uint8c': 'new Uint8ClampedArray( [ {{data}} ] )', - 'int16': 'new Int16Array( [ {{data}} ] )', - 'uint16': 'new Uint16Array( [ {{data}} ] )', - 'int32': 'new Int32Array( [ {{data}} ] )', - 'uint32': 'new Uint32Array( [ {{data}} ] )', - 'float32': 'new Float32Array( [ {{data}} ] )', - 'float64': 'new Float64Array( [ {{data}} ] )', - 'generic': '[ {{data}} ]', - 'binary': 'new Buffer( [ {{data}} ] )', - 'complex64': 'new Complex64Array( [ {{data}} ] )', - 'complex128': 'new Complex128Array( [ {{data}} ] )', - 'bool': 'new BooleanArray( [ {{data}} ] )' -}; - - // MAIN // /** @@ -59,118 +32,7 @@ var CTORS = { */ function toString() { // eslint-disable-line stdlib/no-redeclare /* eslint-disable no-invalid-this */ - var buffer; - var ndims; - var ctor; - var str; - var dt; - var v; - var i; - - ndims = this._shape.length; - dt = this._dtype; - - // Function to invoke to create an ndarray: - str = 'ndarray( \''+dt+'\', '; - - // Data buffer parameter... - buffer = ''; - if ( this._length <= 100 ) { - if ( dt === 'complex64' || dt === 'complex128' ) { - for ( i = 0; i < this._length; i++ ) { - v = this.iget( i ); - buffer += real( v ) + ', ' + imag( v ); - if ( i < this._length-1 ) { - buffer += ', '; - } - } - } else { - for ( i = 0; i < this._length; i++ ) { - buffer += this.iget( i ); - if ( i < this._length-1 ) { - buffer += ', '; - } - } - } - } else { - // First three values... - if ( dt === 'complex64' || dt === 'complex128' ) { - for ( i = 0; i < 3; i++ ) { - v = this.iget( i ); - buffer += real( v ) + ', ' + imag( v ); - if ( i < 2 ) { - buffer += ', '; - } - } - } else { - for ( i = 0; i < 3; i++ ) { - buffer += this.iget( i ); - if ( i < 2 ) { - buffer += ', '; - } - } - } - buffer += ', ..., '; - - // Last three values... - if ( dt === 'complex64' || dt === 'complex128' ) { - for ( i = 2; i >= 0; i-- ) { - v = this.iget( this._length-1-i ); - buffer += real( v ) + ', ' + imag( v ); - if ( i > 0 ) { - buffer += ', '; - } - } - } else { - for ( i = 2; i >= 0; i-- ) { - buffer += this.iget( this._length-1-i ); - if ( i > 0 ) { - buffer += ', '; - } - } - } - } - ctor = CTORS[ this.dtype ]; - str += replace( ctor, '{{data}}', buffer ); - str += ', '; - - // Array shape... - if ( ndims === 0 ) { - str += '[]'; - } else { - str += '[ ' + this._shape.join( ', ' ) + ' ]'; - } - str += ', '; - - // Stride array... - str += '[ '; - if ( ndims === 0 ) { - str += '0'; - } else { - for ( i = 0; i < ndims; i++ ) { - if ( this._strides[ i ] < 0 ) { - str += -this._strides[ i ]; - } else { - str += this._strides[ i ]; - } - if ( i < ndims-1 ) { - str += ', '; - } - } - } - str += ' ]'; - str += ', '; - - // Buffer offset: - str += '0'; - str += ', '; - - // Order: - str += '\'' + this._order + '\''; - - // Close the function call: - str += ' )'; - return str; + return this.toLocaleString(); /* eslint-enable no-invalid-this */ } diff --git a/lib/node_modules/@stdlib/ndarray/base/ctor/test/test.js b/lib/node_modules/@stdlib/ndarray/base/ctor/test/test.js index e8bca1e8ffc7..1289494b103e 100644 --- a/lib/node_modules/@stdlib/ndarray/base/ctor/test/test.js +++ b/lib/node_modules/@stdlib/ndarray/base/ctor/test/test.js @@ -3446,7 +3446,7 @@ tape( 'an ndarray has a custom `toString()` method (complex type)', function tes t.end(); }); -tape( 'an ndarray has a custom `toString()` method (boolean type)', function test( t ) { +tape( 'an ndarray has a custom `toString()` method (complex type)', function test( t ) { var expected; var strides; var actual; @@ -3457,8 +3457,8 @@ tape( 'an ndarray has a custom `toString()` method (boolean type)', function tes var shape; var arr; - dtype = 'bool'; - buffer = new BooleanArray( [ true, false, true, false ] ); + dtype = 'complex128'; + buffer = new Complex128Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); shape = [ 2, 2 ]; order = 'row-major'; strides = [ 2, 1 ]; @@ -3470,14 +3470,14 @@ tape( 'an ndarray has a custom `toString()` method (boolean type)', function tes t.strictEqual( hasProp( arr, 'toString' ), true, 'has property' ); t.strictEqual( isFunction( arr.toString ), true, 'has method' ); - expected = 'ndarray( \'bool\', new BooleanArray( [ true, false, true, false ] ), [ 2, 2 ], [ 2, 1 ], 0, \'row-major\' )'; + expected = 'ndarray( \'complex128\', new Complex128Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ), [ 2, 2 ], [ 2, 1 ], 0, \'row-major\' )'; actual = arr.toString(); t.strictEqual( actual, expected, 'returns expected value' ); t.end(); }); -tape( 'an ndarray has a custom `toString()` method (complex type)', function test( t ) { +tape( 'an ndarray has a custom `toString()` method (boolean type)', function test( t ) { var expected; var strides; var actual; @@ -3488,8 +3488,8 @@ tape( 'an ndarray has a custom `toString()` method (complex type)', function tes var shape; var arr; - dtype = 'complex128'; - buffer = new Complex128Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); + dtype = 'bool'; + buffer = new BooleanArray( [ true, false, true, false ] ); shape = [ 2, 2 ]; order = 'row-major'; strides = [ 2, 1 ]; @@ -3501,7 +3501,7 @@ tape( 'an ndarray has a custom `toString()` method (complex type)', function tes t.strictEqual( hasProp( arr, 'toString' ), true, 'has property' ); t.strictEqual( isFunction( arr.toString ), true, 'has method' ); - expected = 'ndarray( \'complex128\', new Complex128Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ), [ 2, 2 ], [ 2, 1 ], 0, \'row-major\' )'; + expected = 'ndarray( \'bool\', new BooleanArray( [ true, false, true, false ] ), [ 2, 2 ], [ 2, 1 ], 0, \'row-major\' )'; actual = arr.toString(); t.strictEqual( actual, expected, 'returns expected value' ); @@ -3655,6 +3655,348 @@ tape( 'an ndarray has a custom `toString()` method (large array; complex type)', t.end(); }); +tape( 'an ndarray has a custom `toLocaleString()` method (row-major)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + + dtype = 'generic'; + buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ]; + shape = [ 2, 2 ]; + order = 'row-major'; + strides = [ 2, 1 ]; + offset = 2; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + t.strictEqual( hasOwnProp( arr, 'toLocaleString' ), false, 'does not have own property' ); + t.strictEqual( hasProp( arr, 'toLocaleString' ), true, 'has property' ); + t.strictEqual( isFunction( arr.toLocaleString ), true, 'has method' ); + + expected = 'ndarray( \'generic\', [ 3, 4, 5, 6 ], [ 2, 2 ], [ 2, 1 ], 0, \'row-major\' )'; + actual = arr.toLocaleString(); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'an ndarray has a custom `toLocaleString()` method (column-major)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + + dtype = 'generic'; + buffer = [ 1.0, 2.0, 3.0, 4.0 ]; + shape = [ 2, 2 ]; + order = 'column-major'; + strides = [ -1, -2 ]; + offset = 3; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + t.strictEqual( hasOwnProp( arr, 'toLocaleString' ), false, 'does not have own property' ); + t.strictEqual( hasProp( arr, 'toLocaleString' ), true, 'has property' ); + t.strictEqual( isFunction( arr.toLocaleString ), true, 'has method' ); + + expected = 'ndarray( \'generic\', [ 4, 3, 2, 1 ], [ 2, 2 ], [ 1, 2 ], 0, \'column-major\' )'; + actual = arr.toLocaleString(); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'an ndarray has a custom `toLocaleString()` method (complex type)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + + dtype = 'complex64'; + buffer = new Complex64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); + shape = [ 2, 2 ]; + order = 'row-major'; + strides = [ 2, 1 ]; + offset = 0; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + t.strictEqual( hasOwnProp( arr, 'toLocaleString' ), false, 'does not have own property' ); + t.strictEqual( hasProp( arr, 'toLocaleString' ), true, 'has property' ); + t.strictEqual( isFunction( arr.toLocaleString ), true, 'has method' ); + + expected = 'ndarray( \'complex64\', new Complex64Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ), [ 2, 2 ], [ 2, 1 ], 0, \'row-major\' )'; + actual = arr.toLocaleString(); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'an ndarray has a custom `toLocaleString()` method (complex type)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + + dtype = 'complex128'; + buffer = new Complex128Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ); + shape = [ 2, 2 ]; + order = 'row-major'; + strides = [ 2, 1 ]; + offset = 0; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + t.strictEqual( hasOwnProp( arr, 'toLocaleString' ), false, 'does not have own property' ); + t.strictEqual( hasProp( arr, 'toLocaleString' ), true, 'has property' ); + t.strictEqual( isFunction( arr.toLocaleString ), true, 'has method' ); + + expected = 'ndarray( \'complex128\', new Complex128Array( [ 1, 2, 3, 4, 5, 6, 7, 8 ] ), [ 2, 2 ], [ 2, 1 ], 0, \'row-major\' )'; + actual = arr.toLocaleString(); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'an ndarray has a custom `toLocaleString()` method (boolean type)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + + dtype = 'bool'; + buffer = new BooleanArray( [ true, false, true, false ] ); + shape = [ 2, 2 ]; + order = 'row-major'; + strides = [ 2, 1 ]; + offset = 0; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + t.strictEqual( hasOwnProp( arr, 'toLocaleString' ), false, 'does not have own property' ); + t.strictEqual( hasProp( arr, 'toLocaleString' ), true, 'has property' ); + t.strictEqual( isFunction( arr.toLocaleString ), true, 'has method' ); + + expected = 'ndarray( \'bool\', new BooleanArray( [ true, false, true, false ] ), [ 2, 2 ], [ 2, 1 ], 0, \'row-major\' )'; + actual = arr.toLocaleString(); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'an ndarray has a custom `toLocaleString()` method (0d)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + + dtype = 'generic'; + buffer = [ 4.0 ]; + shape = []; + order = 'row-major'; + strides = [ 0 ]; + offset = 0; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + t.strictEqual( hasOwnProp( arr, 'toLocaleString' ), false, 'does not have own property' ); + t.strictEqual( hasProp( arr, 'toLocaleString' ), true, 'has property' ); + t.strictEqual( isFunction( arr.toLocaleString ), true, 'has method' ); + + expected = 'ndarray( \'generic\', [ 4 ], [], [ 0 ], 0, \'row-major\' )'; + actual = arr.toLocaleString(); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'an ndarray has a custom `toLocaleString()` method (large array)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + var i; + + dtype = 'generic'; + buffer = []; + for ( i = 0; i < 10000; i++ ) { + if ( i < 3 ) { + buffer.push( i + 1 ); + } else if ( i >= 9997 ) { + buffer.push( i - 9993 ); + } else { + buffer.push( 0 ); + } + } + shape = [ 10000 ]; + order = 'row-major'; + strides = [ 1 ]; + offset = 0; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + t.strictEqual( hasOwnProp( arr, 'toLocaleString' ), false, 'does not have own property' ); + t.strictEqual( hasProp( arr, 'toLocaleString' ), true, 'has property' ); + t.strictEqual( isFunction( arr.toLocaleString ), true, 'has method' ); + + expected = 'ndarray( \'generic\', [ 1, 2, 3, ..., 4, 5, 6 ], [ 10000 ], [ 1 ], 0, \'row-major\' )'; + actual = arr.toLocaleString(); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'an ndarray has a custom `toLocaleString()` method (large array; complex type)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + var i; + + dtype = 'complex64'; + buffer = new Complex64Array( 10000 ); + for ( i = 0; i < 10000; i++ ) { + if ( i < 3 ) { + buffer.set( new Complex64( i + 1, i + 1 ), i ); + } else if ( i >= 9997 ) { + buffer.set( new Complex64( i - 9993, i - 9993 ), i ); + } else { + buffer.set( new Complex64( 0, 0 ), i ); + } + } + shape = [ 10000 ]; + order = 'row-major'; + strides = [ 1 ]; + offset = 0; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + t.strictEqual( hasOwnProp( arr, 'toLocaleString' ), false, 'does not have own property' ); + t.strictEqual( hasProp( arr, 'toLocaleString' ), true, 'has property' ); + t.strictEqual( isFunction( arr.toLocaleString ), true, 'has method' ); + + expected = 'ndarray( \'complex64\', new Complex64Array( [ 1, 1, 2, 2, 3, 3, ..., 4, 4, 5, 5, 6, 6 ] ), [ 10000 ], [ 1 ], 0, \'row-major\' )'; + actual = arr.toLocaleString(); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'an ndarray has a custom `toLocaleString()` method (large array; complex type)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + var i; + + dtype = 'complex128'; + buffer = new Complex128Array( 10000 ); + for ( i = 0; i < 10000; i++ ) { + if ( i < 3 ) { + buffer.set( new Complex128( i + 1, i + 1 ), i ); + } else if ( i >= 9997 ) { + buffer.set( new Complex128( i - 9993, i - 9993 ), i ); + } else { + buffer.set( new Complex128( 0, 0 ), i ); + } + } + shape = [ 10000 ]; + order = 'row-major'; + strides = [ 1 ]; + offset = 0; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + t.strictEqual( hasOwnProp( arr, 'toLocaleString' ), false, 'does not have own property' ); + t.strictEqual( hasProp( arr, 'toLocaleString' ), true, 'has property' ); + t.strictEqual( isFunction( arr.toLocaleString ), true, 'has method' ); + + expected = 'ndarray( \'complex128\', new Complex128Array( [ 1, 1, 2, 2, 3, 3, ..., 4, 4, 5, 5, 6, 6 ] ), [ 10000 ], [ 1 ], 0, \'row-major\' )'; + actual = arr.toLocaleString(); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'an ndarray has a custom `toLocaleString()` method (locale, options)', function test( t ) { + var expected; + var strides; + var actual; + var buffer; + var offset; + var dtype; + var order; + var shape; + var arr; + + dtype = 'generic'; + buffer = [ 1234.567, 9876.543 ]; + shape = [ 2 ]; + order = 'row-major'; + strides = [ 1 ]; + offset = 0; + + arr = ndarray( dtype, buffer, shape, strides, offset, order ); + + expected = 'ndarray( \'generic\', [ 1,234.567, 9,876.543 ], [ 2 ], [ 1 ], 0, \'row-major\' )'; + actual = arr.toLocaleString( 'en-US' ); + t.strictEqual( actual, expected, 'returns expected value' ); + + expected = 'ndarray( \'generic\', [ 1,234.6, 9,876.5 ], [ 2 ], [ 1 ], 0, \'row-major\' )'; + actual = arr.toLocaleString( 'en-US', { + 'maximumFractionDigits': 1 + }); + t.strictEqual( actual, expected, 'returns expected value' ); + + t.end(); +}); + tape( 'an ndarray has a custom `toJSON()` method (row-major)', function test( t ) { var expected; var strides;