From d953f4c7eb61c2f62c36f0d1cda37459ba5602d8 Mon Sep 17 00:00:00 2001 From: Stephannie Jimenez Date: Wed, 15 Mar 2023 12:09:34 -0500 Subject: [PATCH 1/4] remove: remove out keyword and add support for Complex128 data type inputs BREAKING CHANGE: out keyword is no longer supported and now cfloor only works with Complex128 inputs --- .../math/base/special/cfloor/README.md | 60 ++++++---- .../special/cfloor/benchmark/benchmark.js | 75 +++--------- .../math/base/special/cfloor/docs/repl.txt | 34 +++--- .../base/special/cfloor/docs/types/index.d.ts | 40 +++---- .../base/special/cfloor/docs/types/test.ts | 46 ++------ .../base/special/cfloor/examples/index.js | 6 +- .../math/base/special/cfloor/lib/cfloor.js | 66 ----------- .../math/base/special/cfloor/lib/index.js | 62 +++++++--- .../math/base/special/cfloor/lib/main.js | 75 ++++++++---- .../math/base/special/cfloor/package.json | 2 +- .../math/base/special/cfloor/test/test.js | 110 +++++++----------- 11 files changed, 232 insertions(+), 344 deletions(-) delete mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/lib/cfloor.js diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/README.md b/lib/node_modules/@stdlib/math/base/special/cfloor/README.md index 1d0d22e2331c..481175b37394 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/README.md +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/README.md @@ -20,7 +20,7 @@ limitations under the License. # Floor -> Round a complex number toward negative infinity. +> Round a double-precision complex floating-point number toward negative infinity.
@@ -30,36 +30,50 @@ limitations under the License. var cfloor = require( '@stdlib/math/base/special/cfloor' ); ``` -#### cfloor( \[out,] re, im ) +#### cfloor( z ) -Rounds a `complex` number comprised of a **real** component `re` and an **imaginary** component `im` toward negative infinity. +Rounds a double-precision complex floating-point number toward negative infinity. ```javascript -var v = cfloor( -4.2, 5.5 ); -// returns [ -5.0, 5.0 ] +var Complex128 = require( '@stdlib/complex/float64' ); +var real = require( '@stdlib/complex/real' ); +var imag = require( '@stdlib/complex/imag' ); -v = cfloor( 9.99999, 0.1 ); -// returns [ 9.0, 0.0 ] +var v = cfloor( new Complex128( -4.2, 5.5 ) ); +// returns -v = cfloor( 0.0, 0.0 ); -// returns [ 0.0, 0.0 ] +var re = real( v ); +// returns -5.0 -v = cfloor( NaN, NaN ); -// returns [ NaN, NaN ] -``` +var im = imag( v ); +// returns 5.0 -By default, the function returns real and imaginary components as a two-element `array`. To avoid unnecessary memory allocation, the function supports providing an output (destination) object. +v = cfloor( new Complex128( 9.99999, 0.1 ) ); +// returns -```javascript -var Float32Array = require( '@stdlib/array/float32' ); +re = real( v ); +// returns 9.0 + +im = imag( v ); +// returns 0.0 -var out = new Float32Array( 2 ); +v = cfloor( new Complex128( 0.0, 0.0 ) ); +// returns -var v = cfloor( out, -4.2, 5.5 ); -// returns [ -5.0, 5.0 ] +re = real( v ); +// returns 0.0 -var bool = ( v === out ); -// returns true +im = imag( v ); +// returns 0.0 + +v = cfloor( new Complex128( NaN, NaN ) ); +// returns + +re = real( v ); +// returns NaN + +im = imag( v ); +// returns NaN ```
@@ -75,14 +89,11 @@ var bool = ( v === out ); ```javascript var Complex128 = require( '@stdlib/complex/float64' ); var randu = require( '@stdlib/random/base/randu' ); -var real = require( '@stdlib/complex/real' ); -var imag = require( '@stdlib/complex/imag' ); var cfloor = require( '@stdlib/math/base/special/cfloor' ); var re; var im; var z; -var o; var w; var i; @@ -90,8 +101,7 @@ for ( i = 0; i < 100; i++ ) { re = ( randu()*100.0 ) - 50.0; im = ( randu()*100.0 ) - 50.0; z = new Complex128( re, im ); - o = cfloor( real(z), imag(z) ); - w = new Complex128( o[ 0 ], o[ 1 ] ); + w = cfloor( z ); console.log( 'floor(%s) = %s', z.toString(), w.toString() ); } ``` diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/benchmark/benchmark.js b/lib/node_modules/@stdlib/math/base/special/cfloor/benchmark/benchmark.js index 379078f026d1..336fc9ecf7b6 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/benchmark/benchmark.js @@ -22,6 +22,11 @@ var bench = require( '@stdlib/bench' ); var randu = require( '@stdlib/random/base/randu' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var Complex128 = require( '@stdlib/complex/float64' ); +var real = require( '@stdlib/complex/real' ); +var imag = require( '@stdlib/complex/imag' ); +var uniform = require( '@stdlib/random/base/uniform' ); var isArray = require( '@stdlib/assert/is-array' ); var floor = require( '@stdlib/math/base/special/floor' ); var pkg = require( './../package.json' ).name; @@ -31,49 +36,25 @@ var cfloor = require( './../lib' ); // MAIN // bench( pkg, function benchmark( b ) { - var re; - var im; - var y; - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - re = ( randu()*1000.0 ) - 500.0; - im = ( randu()*1000.0 ) - 500.0; - y = cfloor( re, im ); - if ( y.length === 0 ) { - b.fail( 'should not be empty' ); - } - } - b.toc(); - if ( !isArray( y ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); - -bench( pkg+'::memory_reuse', function benchmark( b ) { - var out; - var re; - var im; + var values; var y; var i; - out = new Array( 2 ); + values = [ + new Complex128( uniform( -500.0, 500.0 ), uniform( -500.0, 500.0 ) ), + new Complex128( uniform( -500.0, 500.0 ), uniform( -500.0, 500.0 ) ) + ]; b.tic(); for ( i = 0; i < b.iterations; i++ ) { - re = ( randu()*1000.0 ) - 500.0; - im = ( randu()*1000.0 ) - 500.0; - y = cfloor( out, re, im ); - if ( y.length === 0 ) { - b.fail( 'should not be empty' ); + y = cfloor( ( values[ i%values.length ] ) ); + if ( isnan( real( y ) ) ) { + b.fail( 'should not return NaN' ); } } b.toc(); - if ( !isArray( y ) ) { - b.fail( 'should return an array' ); + if ( isnan( imag( y ) ) ) { + b.fail( 'should not return not NaN' ); } b.pass( 'benchmark finished' ); b.end(); @@ -101,29 +82,3 @@ bench( pkg+'::manual', function benchmark( b ) { b.pass( 'benchmark finished' ); b.end(); }); - -bench( pkg+'::manual,memory_reuse', function benchmark( b ) { - var re; - var im; - var y; - var i; - - y = new Array( 2 ); - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - re = ( randu()*1000.0 ) - 500.0; - im = ( randu()*1000.0 ) - 500.0; - y[ 0 ] = floor( re ); - y[ 1 ] = floor( im ); - if ( y.length === 0 ) { - b.fail( 'should not be empty' ); - } - } - b.toc(); - if ( !isArray( y ) ) { - b.fail( 'should return an array' ); - } - b.pass( 'benchmark finished' ); - b.end(); -}); diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/docs/repl.txt b/lib/node_modules/@stdlib/math/base/special/cfloor/docs/repl.txt index 5534f5c52ff6..3afb1136cf7b 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/docs/repl.txt +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/docs/repl.txt @@ -1,34 +1,26 @@ -{{alias}}( [out,] re, im ) - Rounds a complex number toward negative infinity. +{{alias}}( z ) + Rounds a double-precision complex floating-point number toward negative + infinity. Parameters ---------- - out: Array|TypedArray|Object (optional) - Output array. - - re: number - Real component. - - im: number - Imaginary component. + z: Complex128 + Complex number. Returns ------- - out: Array|TypedArray|Object - Rounded components. + out: Complex128 + Result. Examples -------- - > var out = {{alias}}( 5.5, 3.3 ) - [ 5.0, 3.0 ] - - // Provide an output array: - > out = new {{alias:@stdlib/array/float64}}( 2 ); - > var v = {{alias}}( out, 5.5, 3.3 ) - [ 5.0, 3.0 ] - > var bool = ( v === out ) - true + > var v = {{alias}}( new {{alias:@stdlib/complex/float64}}( 5.5, 3.3 ) ) + + > var re = {{alias:@stdlib/complex/real}}( v ) + 5.0 + > var im = {{alias:@stdlib/complex/imag}}( v ) + 3.0 See Also -------- diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/docs/types/index.d.ts b/lib/node_modules/@stdlib/math/base/special/cfloor/docs/types/index.d.ts index d4a7ad2a8f9f..d42af6ec14f8 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/docs/types/index.d.ts @@ -20,41 +20,29 @@ /// -import { ArrayLike } from '@stdlib/types/array'; +import { Complex128 } from '@stdlib/types/object'; /** -* Rounds a complex number toward negative infinity. +* Rounds a double-precision complex floating-point number toward negative infinity. * -* @param out - output array -* @param re - real component -* @param im - imaginary component -* @returns real and imaginary components +* @param z - input value +* @returns result * * @example -* var Float32Array = require( `@stdlib/array/float32` ); +* var Complex128 = require( `@stdlib/complex/float64` ); +* var real = require( `@stdlib/complex/real` ); +* var imag = require( `@stdlib/complex/imag` ); * -* var out = new Float32Array( 2 ); +* var v = cfloor( new Complex128( 5.5, 3.3 ) ); +* // returns * -* var v = cfloor( out, -4.2, 5.5 ); -* // returns [ -5.0, 5.0 ] +* var re = real( v ); +* // returns 5.0 * -* var bool = ( v === out ); -* // returns true +* var im = imag( v ); +* // returns 3.0 */ -declare function cfloor( out: ArrayLike, re: number, im: number ): ArrayLike; // tslint-disable-line max-line-length - -/** -* Rounds a complex number toward negative infinity. -* -* @param re - real component -* @param im - imaginary component -* @returns real and imaginary components -* -* @example -* var out = cfloor( 5.5, 3.3 ); -* // returns [ 5.0, 3.0 ] -*/ -declare function cfloor( re: number, im: number ): ArrayLike; +declare function cfloor( z: Complex128 ): Complex128; // EXPORTS // diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/docs/types/test.ts b/lib/node_modules/@stdlib/math/base/special/cfloor/docs/types/test.ts index 1c490d939158..c3d6b43d8990 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/docs/types/test.ts +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/docs/types/test.ts @@ -16,6 +16,7 @@ * limitations under the License. */ +import Complex128 = require( '@stdlib/complex/float64' ); import cfloor = require( './index' ); @@ -23,46 +24,23 @@ import cfloor = require( './index' ); // The function returns an array of numbers... { - cfloor( 5, 3 ); // $ExpectType ArrayLike - cfloor( [], 5, 3 ); // $ExpectType ArrayLike + cfloor( new Complex128( 1.0, 2.0 ) ); // $ExpectType Complex128 } -// The compiler throws an error if the function is provided a real component which is not a number... +// The compiler throws an error if the function is provided a value other than a complex number... { - cfloor( true, 3 ); // $ExpectError - cfloor( false, 3 ); // $ExpectError - cfloor( null, 3 ); // $ExpectError - cfloor( undefined, 3 ); // $ExpectError - cfloor( '5', 3 ); // $ExpectError - cfloor( [], 3 ); // $ExpectError - cfloor( {}, 3 ); // $ExpectError - cfloor( ( x: number ): number => x, 3 ); // $ExpectError -} - -// The compiler throws an error if the function is provided an imaginary component which is not a number... -{ - cfloor( 5, true ); // $ExpectError - cfloor( 5, false ); // $ExpectError - cfloor( 5, null ); // $ExpectError - cfloor( 5, undefined ); // $ExpectError - cfloor( 5, '5' ); // $ExpectError - cfloor( 5, [] ); // $ExpectError - cfloor( 5, {} ); // $ExpectError - cfloor( 5, ( x: number ): number => x ); // $ExpectError -} - -// The compiler throws an error if the function is provided an output array which is not array-like... -{ - cfloor( true, 5, 3 ); // $ExpectError - cfloor( false, 5, 3 ); // $ExpectError - cfloor( 'abc', 5, 3 ); // $ExpectError - cfloor( {}, 5, 3 ); // $ExpectError - cfloor( ( x: number ): number => x, 5, 3 ); // $ExpectError - cfloor( 123, 5, 3 ); // $ExpectError + cfloor( 2 ); // $ExpectError + cfloor( true ); // $ExpectError + cfloor( false ); // $ExpectError + cfloor( null ); // $ExpectError + cfloor( undefined ); // $ExpectError + cfloor( '5' ); // $ExpectError + cfloor( [] ); // $ExpectError + cfloor( {} ); // $ExpectError + cfloor( ( x: number ): number => x ); // $ExpectError } // The compiler throws an error if the function is provided insufficient arguments... { cfloor(); // $ExpectError - cfloor( 2 ); // $ExpectError } diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/examples/index.js b/lib/node_modules/@stdlib/math/base/special/cfloor/examples/index.js index 050d3fb09a01..9185fe1b4ca6 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/examples/index.js +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/examples/index.js @@ -20,14 +20,11 @@ var Complex128 = require( '@stdlib/complex/float64' ); var randu = require( '@stdlib/random/base/randu' ); -var real = require( '@stdlib/complex/real' ); -var imag = require( '@stdlib/complex/imag' ); var cfloor = require( './../lib' ); var re; var im; var z; -var o; var w; var i; @@ -35,7 +32,6 @@ for ( i = 0; i < 100; i++ ) { re = ( randu()*100.0 ) - 50.0; im = ( randu()*100.0 ) - 50.0; z = new Complex128( re, im ); - o = cfloor( real(z), imag(z) ); - w = new Complex128( o[ 0 ], o[ 1 ] ); + w = cfloor( z ); console.log( 'floor(%s) = %s', z.toString(), w.toString() ); } diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/lib/cfloor.js b/lib/node_modules/@stdlib/math/base/special/cfloor/lib/cfloor.js deleted file mode 100644 index a308d9fb205a..000000000000 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/lib/cfloor.js +++ /dev/null @@ -1,66 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2018 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 floor = require( '@stdlib/math/base/special/floor' ); - - -// MAIN // - -/** -* Rounds a complex number toward negative infinity. -* -* @private -* @param {(Array|TypedArray|Object)} out - output array -* @param {number} re - real component -* @param {number} im - imaginary component -* @returns {(Array|TypedArray|Object)} rounded components -* -* @example -* var out = new Array( 2 ); -* var v = cfloor( out, -4.2, 5.5 ); -* // returns [ -5.0, 5.0 ] -* -* @example -* var out = new Array( 2 ); -* var v = cfloor( out, 9.99999, 0.1 ); -* // returns [ 9.0, 0.0 ] -* -* @example -* var out = new Array( 2 ); -* var v = cfloor( out, 0.0, 0.0 ); -* // returns [ 0.0, 0.0 ] -* -* @example -* var out = new Array( 2 ); -* var v = cfloor( out, NaN, NaN ); -* // returns [ NaN, NaN ] -*/ -function cfloor( out, re, im ) { - out[ 0 ] = floor( re ); - out[ 1 ] = floor( im ); - return out; -} - - -// EXPORTS // - -module.exports = cfloor; diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/lib/index.js b/lib/node_modules/@stdlib/math/base/special/cfloor/lib/index.js index 636b45f20c60..0576069d430f 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/lib/index.js +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/lib/index.js @@ -19,35 +19,69 @@ 'use strict'; /** -* Round a complex number toward negative infinity. +* Round a double-precision floating-point complex number toward negative infinity. * * @module @stdlib/math/base/special/cfloor * * @example +* var Complex128 = require( '@stdlib/complex/float64' ); +* var real = require( '@stdlib/complex/real' ); +* var imag = require( '@stdlib/complex/imag' ); * var cfloor = require( '@stdlib/math/base/special/cfloor' ); * -* var v = cfloor( -4.2, 5.5 ); -* // returns [ -5.0, 5.0 ] +* var v = cfloor( new Complex128( -4.2, 5.5 ) ); +* // returns * -* v = cfloor( 9.99999, 0.1 ); -* // returns [ 9.0, 0.0 ] +* var re = real( v ); +* // returns -5.0 * -* v = cfloor( 0.0, 0.0 ); -* // returns [ 0.0, 0.0 ] +* var im = imag( v ); +* // returns 5.0 * -* v = cfloor( NaN, NaN ); -* // returns [ NaN, NaN ] +* @example +* var Complex128 = require( '@stdlib/complex/float64' ); +* var real = require( '@stdlib/complex/real' ); +* var imag = require( '@stdlib/complex/imag' ); +* var cfloor = require( '@stdlib/math/base/special/cfloor' ); +* +* var v = cfloor( new Complex128( 9.99999, 0.1 ) ); +* // returns +* +* var re = real( v ); +* // returns 9.0 +* +* var im = imag( v ); +* // returns 0.0 +* +* @example +* var Complex128 = require( '@stdlib/complex/float64' ); +* var real = require( '@stdlib/complex/real' ); +* var imag = require( '@stdlib/complex/imag' ); +* var cfloor = require( '@stdlib/math/base/special/cfloor' ); +* +* var v = cfloor( new Complex128( 0.0, 0.0 ) ); +* // returns +* +* var re = real( v ); +* // returns 0.0 +* +* var im = imag( v ); +* // returns 0.0 * * @example +* var Complex128 = require( '@stdlib/complex/float64' ); +* var real = require( '@stdlib/complex/real' ); +* var imag = require( '@stdlib/complex/imag' ); * var cfloor = require( '@stdlib/math/base/special/cfloor' ); * -* var out = new Array( 2 ); +* var v = cfloor( new Complex128( NaN, NaN ) ); +* // returns * -* var v = cfloor( out, -4.2, 5.5 ); -* // returns [ -5.0, 5.0 ] +* var re = real( v ); +* // returns NaN * -* var bool = ( v === out ); -* // returns true +* var im = imag( v ); +* // returns NaN */ // MODULES // diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/lib/main.js b/lib/node_modules/@stdlib/math/base/special/cfloor/lib/main.js index c3678cbfba97..0bd5aee13e68 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/lib/main.js @@ -20,7 +20,10 @@ // MODULES // -var floor = require( './cfloor.js' ); +var Complex128 = require( '@stdlib/complex/float64' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var real = require( '@stdlib/complex/real' ); +var imag = require( '@stdlib/complex/imag' ); // MAIN // @@ -28,37 +31,67 @@ var floor = require( './cfloor.js' ); /** * Rounds a complex number toward negative infinity. * -* @param {(Array|TypedArray|Object)} [out] - output array -* @param {number} re - real component -* @param {number} im - imaginary component -* @returns {(Array|TypedArray|Object)} rounded components +* @param {Complex128} z - complex number +* @returns {Complex128} result * * @example -* var v = cfloor( -4.2, 5.5 ); -* // returns [ -5.0, 5.0 ] +* var Complex128 = require( '@stdlib/complex/float64' ); +* var real = require( '@stdlib/complex/real' ); +* var imag = require( '@stdlib/complex/imag' ); +* +* var v = cfloor( new Complex128( -4.2, 5.5 ) ); +* // returns +* +* var re = real( v ); +* // returns -5.0 +* +* var im = imag( v ); +* // returns 5.0 * * @example -* var out = new Array( 2 ); +* var Complex128 = require( '@stdlib/complex/float64' ); +* var real = require( '@stdlib/complex/real' ); +* var imag = require( '@stdlib/complex/imag' ); * -* var v = cfloor( out, 9.99999, 0.1 ); -* // returns [ 9.0, 0.0 ] +* var v = cfloor( new Complex128( 9.99999, 0.1 ) ); +* // returns * -* var bool = ( v === out ); -* // returns true +* var re = real( v ); +* // returns 9.0 +* +* var im = imag( v ); +* // returns 0.0 * * @example -* var v = cfloor( 0.0, 0.0 ); -* // returns [ 0.0, 0.0 ] +* var Complex128 = require( '@stdlib/complex/float64' ); +* var real = require( '@stdlib/complex/real' ); +* var imag = require( '@stdlib/complex/imag' ); +* +* var v = cfloor( new Complex128( 0.0, 0.0 ) ); +* // returns +* +* var re = real( v ); +* // returns 0.0 +* +* var im = imag( v ); +* // returns 0.0 * * @example -* var v = cfloor( NaN, NaN ); -* // returns [ NaN, NaN ] +* var Complex128 = require( '@stdlib/complex/float64' ); +* var real = require( '@stdlib/complex/real' ); +* var imag = require( '@stdlib/complex/imag' ); +* +* var v = cfloor( new Complex128( NaN, NaN ) ); +* // returns +* +* var re = real( v ); +* // returns NaN +* +* var im = imag( v ); +* // returns NaN */ -function cfloor( out, re, im ) { - if ( arguments.length === 2 ) { - return floor( [ 0.0, 0.0 ], out, re ); - } - return floor( out, re, im ); +function cfloor( z ) { + return new Complex128( floor( real( z ) ), floor( imag( z ) ) ); } diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/package.json b/lib/node_modules/@stdlib/math/base/special/cfloor/package.json index 57e5eeb2e784..3110e3787fc7 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/package.json +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/package.json @@ -1,7 +1,7 @@ { "name": "@stdlib/math/base/special/cfloor", "version": "0.0.0", - "description": "Round a complex number toward negative infinity.", + "description": "Round a double-precision complex floating-point number toward negative infinity.", "license": "Apache-2.0", "author": { "name": "The Stdlib Authors", diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/test/test.js b/lib/node_modules/@stdlib/math/base/special/cfloor/test/test.js index 02d1ba5e7e0a..ef3acf12be52 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/test/test.js +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/test/test.js @@ -26,7 +26,9 @@ var NINF = require( '@stdlib/constants/float64/ninf' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var isNegativeZero = require( '@stdlib/math/base/assert/is-negative-zero' ); var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' ); -var Float64Array = require( '@stdlib/array/float64' ); +var Complex128 = require( '@stdlib/complex/float64' ); +var real = require( '@stdlib/complex/real' ); +var imag = require( '@stdlib/complex/imag' ); var cfloor = require( './../lib' ); @@ -39,103 +41,69 @@ tape( 'main export is a function', function test( t ) { }); tape( 'the function rounds real and imaginary components to the largest integer smaller than or equal to a given number', function test( t ) { - var expected; - var actual; + var v; - actual = cfloor( -4.2, 5.5 ); - expected = [ -5.0, 5.0 ]; - t.deepEqual( actual, expected, 'returns expected value' ); + v = cfloor( new Complex128( -4.2, 5.5 ) ); + t.strictEqual( real( v ), -5.0, 'returns expected value' ); + t.strictEqual( imag( v ), 5.0, 'returns expected value' ); - actual = cfloor( 9.99999, 0.1 ); - expected = [ 9.0, 0.0 ]; - t.deepEqual( actual, expected, 'returns expected value' ); + v = cfloor( new Complex128( 9.99999, 0.1 ) ); + t.strictEqual( real( v ), 9.0, 'returns expected value' ); + t.strictEqual( imag( v ), 0.0, 'returns expected value' ); - actual = cfloor( 0.0, 0.0 ); - expected = [ 0.0, 0.0 ]; - t.deepEqual( actual, expected, 'returns expected value' ); + v = cfloor( new Complex128( 0.0, 0.0 ) ); + t.strictEqual( real( v ), 0.0, 'returns expected value' ); + t.strictEqual( imag( v ), 0.0, 'returns expected value' ); t.end(); }); -tape( 'the function rounds real and imaginary components to the largest integer smaller than or equal to a given number (output array)', function test( t ) { - var expected; - var actual; - var out; - - out = new Array( 2 ); - actual = cfloor( out, -4.2, 5.5 ); - expected = [ -5.0, 5.0 ]; +tape( 'the function returns a `NaN` if provided a `NaN`', function test( t ) { + var v; - t.deepEqual( actual, expected, 'returns expected value' ); - t.strictEqual( actual, out, 'returns output value' ); + v = cfloor( new Complex128( NaN, NaN ) ); + t.strictEqual( isnan( real( v ) ), true, 'returns expected value' ); + t.strictEqual( isnan( imag( v ) ), true, 'returns expected value' ); t.end(); }); -tape( 'the function rounds real and imaginary components to the largest integer smaller than or equal to a given number (output typed array)', function test( t ) { - var expected; - var actual; - var out; - - out = new Float64Array( 2 ); - actual = cfloor( out, 9.99999, 0.1 ); - expected = new Float64Array( [ 9.0, 0.0 ] ); +tape( 'the function returns `-0` if provided `-0`', function test( t ) { + var v; - t.deepEqual( actual, expected, 'returns expected value' ); - t.strictEqual( actual, out, 'returns output value' ); + v = cfloor( new Complex128( -0.0, -0.0 ) ); + t.strictEqual( isNegativeZero( real( v ) ), true, 'returns expected value' ); + t.strictEqual( isNegativeZero( imag( v ) ), true, 'returns expected value' ); t.end(); }); -tape( 'the function rounds real and imaginary components to the largest integer smaller than or equal to a given number (output object)', function test( t ) { - var expected; - var actual; - var out; - - out = {}; - actual = cfloor( out, 0.0, 0.0 ); - expected = { - '0': 0.0, - '1': 0.0 - }; +tape( 'the function returns `+0` if provided `+0`', function test( t ) { + var v; - t.deepEqual( actual, expected, 'returns expected value' ); - t.strictEqual( actual, out, 'returns output value' ); + v = cfloor( new Complex128( +0.0, +0.0 ) ); + t.strictEqual( isPositiveZero( real( v ) ), true, 'returns expected value' ); + t.strictEqual( isPositiveZero( imag( v ) ), true, 'returns expected value' ); t.end(); }); -tape( 'the function returns a `NaN` if provided a `NaN`', function test( t ) { - var val = cfloor( NaN, NaN ); - t.strictEqual( isnan( val[ 0 ] ), true, 'returns expected value' ); - t.strictEqual( isnan( val[ 1 ] ), true, 'returns expected value' ); - t.end(); -}); - -tape( 'the function returns `-0` if provided `-0`', function test( t ) { - var val = cfloor( -0.0, -0.0 ); - t.strictEqual( isNegativeZero( val[ 0 ] ), true, 'returns expected value' ); - t.strictEqual( isNegativeZero( val[ 1 ] ), true, 'returns expected value' ); - t.end(); -}); +tape( 'the function returns `+infinity` if provided `+infinity`', function test( t ) { + var v; -tape( 'the function returns `+0` if provided `+0`', function test( t ) { - var val = cfloor( +0.0, +0.0 ); - t.strictEqual( isPositiveZero( val[ 0 ] ), true, 'returns expected value' ); - t.strictEqual( isPositiveZero( val[ 1 ] ), true, 'returns expected value' ); - t.end(); -}); + v = cfloor( new Complex128( PINF, PINF ) ); + t.strictEqual( real( v ), PINF, 'returns expected value' ); + t.strictEqual( imag( v ), PINF, 'returns expected value' ); -tape( 'the function returns `+infinity` if provided `+infinity`', function test( t ) { - var val = cfloor( PINF, PINF ); - t.strictEqual( val[ 0 ], PINF, 'returns expected value' ); - t.strictEqual( val[ 1 ], PINF, 'returns expected value' ); t.end(); }); tape( 'the function returns `-infinity` if provided `-infinity`', function test( t ) { - var val = cfloor( NINF, NINF ); - t.strictEqual( val[ 0 ], NINF, 'returns expected value' ); - t.strictEqual( val[ 1 ], NINF, 'returns expected value' ); + var v; + + v = cfloor( new Complex128( NINF, NINF ) ); + t.strictEqual( real( v ), NINF, 'returns expected value' ); + t.strictEqual( imag( v ), NINF, 'returns expected value' ); + t.end(); }); From c27fba19c25a91b2d16024407f79d518408ec2f4 Mon Sep 17 00:00:00 2001 From: Stephannie Jimenez Date: Wed, 15 Mar 2023 12:43:28 -0500 Subject: [PATCH 2/4] feat: add addon to cfloor package --- .../math/base/special/cfloor/README.md | 111 ++++++++++++ .../cfloor/benchmark/benchmark.native.js | 66 +++++++ .../math/base/special/cfloor/binding.gyp | 170 ++++++++++++++++++ .../base/special/cfloor/examples/c/Makefile | 146 +++++++++++++++ .../base/special/cfloor/examples/c/example.c | 46 +++++ .../math/base/special/cfloor/include.gypi | 53 ++++++ .../include/stdlib/math/base/special/cfloor.h | 40 +++++ .../math/base/special/cfloor/lib/main.js | 2 +- .../math/base/special/cfloor/lib/native.js | 58 ++++++ .../math/base/special/cfloor/manifest.json | 79 ++++++++ .../math/base/special/cfloor/src/Makefile | 70 ++++++++ .../math/base/special/cfloor/src/addon.c | 23 +++ .../math/base/special/cfloor/src/main.c | 54 ++++++ .../base/special/cfloor/test/test.native.js | 118 ++++++++++++ 14 files changed, 1035 insertions(+), 1 deletion(-) create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/benchmark/benchmark.native.js create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/binding.gyp create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/examples/c/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/examples/c/example.c create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/include.gypi create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/include/stdlib/math/base/special/cfloor.h create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/lib/native.js create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/manifest.json create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/src/Makefile create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/src/addon.c create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/src/main.c create mode 100644 lib/node_modules/@stdlib/math/base/special/cfloor/test/test.native.js diff --git a/lib/node_modules/@stdlib/math/base/special/cfloor/README.md b/lib/node_modules/@stdlib/math/base/special/cfloor/README.md index 481175b37394..1a4ba9c052b1 100644 --- a/lib/node_modules/@stdlib/math/base/special/cfloor/README.md +++ b/lib/node_modules/@stdlib/math/base/special/cfloor/README.md @@ -110,6 +110,117 @@ for ( i = 0; i < 100; i++ ) { + + +* * * + +
+ +## C APIs + + + +
+ +
+ + + + + +
+ +### Usage + +```c +#include "stdlib/math/base/special/cfloor.h" +``` + +#### stdlib_base_cfloor( z ) + +Rounds a double-precision complex floating-point number toward negative infinity. + +```c +#include "stdlib/complex/float64.h" +#include "stdlib/complex/real.h" +#include "stdlib/complex/imag.h" + +stdlib_complex128_t z = stdlib_complex128( 2.5, -1.5 ); + +stdlib_complex128_t out = stdlib_base_cfloor( z ); + +double re = stdlib_real( out ); +// returns 2.0 + +double im = stdlib_imag( out ); +// returns -2.0 +``` + +The function accepts the following arguments: + +- **z**: `[in] stdlib_complex128_t` input value. + +```c +stdlib_complex128_t stdlib_base_cfloor( const stdlib_complex128_t z ); +``` + +
+ + + + + +
+ +
+ + + + + +
+ +### Examples + +```c +#include "stdlib/math/base/special/cfloor.h" +#include "stdlib/complex/float64.h" +#include "stdlib/complex/reim.h" +#include + +int main() { + const stdlib_complex128_t x[] = { + stdlib_complex128( 3.14, 1.5 ), + stdlib_complex128( -3.14, -1.5 ), + stdlib_complex128( 0.0, 0.0 ), + stdlib_complex128( 0.0/0.0, 0.0/0.0 ) + }; + + stdlib_complex128_t v; + stdlib_complex128_t y; + double re1; + double im1; + double re2; + double im2; + int i; + for ( i = 0; i < 4; i++ ) { + v = x[ i ]; + y = stdlib_base_cfloor( v ); + stdlib_reim( v, &re1, &im1 ); + stdlib_reim( y, &re2, &im2 ); + printf( "cfloor(%lf + %lfi) = %lf + %lfi\n", re1, im1, re2, im2 ); + } +} +``` + +
+ + + +
+ + +