diff --git a/lib/node_modules/@stdlib/math/base/special/cabsf/lib/main.js b/lib/node_modules/@stdlib/math/base/special/cabsf/lib/main.js index 1549471484d2..025d86467e6c 100644 --- a/lib/node_modules/@stdlib/math/base/special/cabsf/lib/main.js +++ b/lib/node_modules/@stdlib/math/base/special/cabsf/lib/main.js @@ -40,7 +40,6 @@ var imag = require( '@stdlib/complex/float32/imag' ); * // returns ~5.83 */ function cabsf( z ) { - // TODO: consider whether to use C99 rules for special cases involving infinities and nans (see https://github.com/python/cpython/blob/f4c03484da59049eb62a9bf7777b963e2267d187/Objects/complexobject.c#L191) return hypotf( real( z ), imag( z ) ); } diff --git a/lib/node_modules/@stdlib/math/base/special/cabsf/test/test.js b/lib/node_modules/@stdlib/math/base/special/cabsf/test/test.js index 166a0ba9d2fa..72c88cb54ab4 100644 --- a/lib/node_modules/@stdlib/math/base/special/cabsf/test/test.js +++ b/lib/node_modules/@stdlib/math/base/special/cabsf/test/test.js @@ -23,6 +23,8 @@ var tape = require( 'tape' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var EPS = require( '@stdlib/constants/float32/eps' ); +var PINF = require( '@stdlib/constants/float32/pinf' ); +var NINF = require( '@stdlib/constants/float32/ninf' ); var absf = require( '@stdlib/math/base/special/absf' ); var Complex64 = require( '@stdlib/complex/float32/ctor' ); var cabsf = require( './../lib' ); @@ -67,7 +69,49 @@ tape( 'the function computes the absolute value of a complex number', function t t.end(); }); -tape( 'if either the real or imaginary component is `NaN`, the function returns `NaN`', function test( t ) { +tape( 'if either the real or imaginary component is `+infinity`, the function returns `+infinity`', function test( t ) { + var v; + + v = cabsf( new Complex64( PINF, 3.0 ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( 5.0, PINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( PINF, PINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( NaN, PINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( PINF, NaN ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + t.end(); +}); + +tape( 'if either the real or imaginary component is `-infinity`, the function returns `+infinity`', function test( t ) { + var v; + + v = cabsf( new Complex64( NINF, 3.0 ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( 5.0, NINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( NINF, NINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( NaN, NINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( NINF, NaN ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + t.end(); +}); + +tape( 'if either the real or imaginary component is `NaN` but not `+-infinity`, the function returns `NaN`', function test( t ) { var v; v = cabsf( new Complex64( NaN, 3.0 ) ); diff --git a/lib/node_modules/@stdlib/math/base/special/cabsf/test/test.native.js b/lib/node_modules/@stdlib/math/base/special/cabsf/test/test.native.js index 752d59c5c338..675e8df044df 100644 --- a/lib/node_modules/@stdlib/math/base/special/cabsf/test/test.native.js +++ b/lib/node_modules/@stdlib/math/base/special/cabsf/test/test.native.js @@ -24,6 +24,8 @@ var resolve = require( 'path' ).resolve; var tape = require( 'tape' ); var isnanf = require( '@stdlib/math/base/assert/is-nanf' ); var EPS = require( '@stdlib/constants/float32/eps' ); +var PINF = require( '@stdlib/constants/float32/pinf' ); +var NINF = require( '@stdlib/constants/float32/ninf' ); var absf = require( '@stdlib/math/base/special/absf' ); var Complex64 = require( '@stdlib/complex/float32/ctor' ); var tryRequire = require( '@stdlib/utils/try-require' ); @@ -76,7 +78,49 @@ tape( 'the function computes the absolute value of a complex number', opts, func t.end(); }); -tape( 'if either the real or imaginary component is `NaN`, the function returns `NaN`', opts, function test( t ) { +tape( 'if either the real or imaginary component is `+infinity`, the function returns `+infinity`', opts, function test( t ) { + var v; + + v = cabsf( new Complex64( PINF, 3.0 ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( 5.0, PINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( PINF, PINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( NaN, PINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( PINF, NaN ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + t.end(); +}); + +tape( 'if either the real or imaginary component is `-infinity`, the function returns `+infinity`', opts, function test( t ) { + var v; + + v = cabsf( new Complex64( NINF, 3.0 ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( 5.0, NINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( NINF, NINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( NaN, NINF ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + v = cabsf( new Complex64( NINF, NaN ) ); + t.strictEqual( v, PINF, 'returns expected value' ); + + t.end(); +}); + +tape( 'if either the real or imaginary component is `NaN` but not `+-infinity`, the function returns `NaN`', opts, function test( t ) { var v; v = cabsf( new Complex64( NaN, 3.0 ) );