Skip to content

Commit cf92811

Browse files
committed
feat!: add implementation of stdlib/math/base/special/minmaxabsf
This commit adds the implementation of stdlib/math/base/special/minmaxabsf function. It includes a README.md file, benchmarks, tests, examples. The minmaxabsf function returns the minimum and maximum single-precision floating-point values for any two numbers. --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: passed - task: lint_package_json status: passed - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: missing_dependencies - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
1 parent 9373eae commit cf92811

File tree

12 files changed

+339
-35
lines changed

12 files changed

+339
-35
lines changed

etc/npm/deps.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1+
acorn@"^8.1.0" acorn-loose@"^8.0.2" acorn-walk@"^8.0.2" d3-format@"^1.0.0" d3-scale@"^1.0.0" d3-shape@"^1.0.0" d3-time-format@"^2.0.0" debug@"^2.6.9" glob@"^7.0.5" minimist@"^1.2.0" readable-stream@"^2.1.4" resolve@"^1.1.7" vdom-to-html@"^2.3.0" virtual-dom@"^2.1.1" 0x@"^4.10.2" @cspell/eslint-plugin@"^8.8.0" @commitlint/cli@"^17.4.4" @commitlint/cz-commitlint@"^17.4.4" @conventional-commits/parser@"^0.4.1" @kaciras/deasync@"^1.0.1" @types/node@"^13.9.0" @typescript-eslint/parser@"^6.9.1" @typescript-eslint/eslint-plugin@"^6.9.1" ajv@"^5.2.2" browser-pack-flat@"^3.0.0" browserify@"^17.0.0" bundle-collapser@"^1.3.0" c8@"^7.12.0" chai@"^3.5.0" cheerio@"^1.0.0-rc.12" commitizen@"^4.3.0" common-shakeify@"^0.6.0" conventional-changelog-conventionalcommits@"^5.0.0" doctrine@"^3.0.0" editorconfig-checker@"^6.0.0" envify@"^4.0.0" eslint@"^8.57.0" eslint-plugin-node@"^11.1.0" eslint-plugin-expect-type@"^0.2.3" eslint-plugin-import@"^2.29.0" eslint-plugin-jsdoc@"^46.8.2" exorcist@"^2.0.0" factor-bundle@"^2.5.0" gh-pages@"git+https://github.com/Planeshifter/gh-pages.git#main" inquirer@"^8.0.0" jscodeshift@"^0.15.0" jsdoc@"^3.4.0" lunr@"^2.3.9" mathjax-node@"^2.0.1" mathjax-node-sre@"^3.0.0" mkdirp@"^0.5.1" mustache@"^4.0.0" parse-link-header@"^1.0.1" plato@"^1.5.0" process@"^0.11.10" proxyquire@"^2.0.0" proxyquire-universal@"^2.0.0" proxyquireify@"^3.1.1" read-installed@"^4.0.3" rehype@"^9.0.0" rehype-highlight@"^3.0.0" remark@"^11.0.1" remark-cli@"^7.0.0" remark-frontmatter@"^1.2.0" remark-html@"^10.0.0" remark-lint@"^6.0.0" remark-lint-blockquote-indentation@"^1.0.0" remark-lint-checkbox-character-style@"^1.0.0" remark-lint-checkbox-content-indent@"^1.0.0" remark-lint-code-block-style@"^1.0.0" remark-lint-definition-case@"^1.0.0" remark-lint-definition-spacing@"^1.0.0" remark-lint-emphasis-marker@"^1.0.0" remark-lint-fenced-code-flag@"^1.0.0" remark-lint-fenced-code-marker@"^1.0.0" remark-lint-file-extension@"^1.0.0" remark-lint-final-definition@"^1.0.0" remark-lint-final-newline@"^1.0.0" remark-lint-first-heading-level@"^1.1.0" remark-lint-hard-break-spaces@"^1.0.1" remark-lint-heading-increment@"^1.0.0" remark-lint-heading-style@"^1.0.0" remark-lint-linebreak-style@"^1.0.0" remark-lint-link-title-style@"^1.0.0" remark-lint-list-item-bullet-indent@"^1.0.0" remark-lint-list-item-content-indent@"^1.0.0" remark-lint-list-item-indent@"^1.0.0" remark-lint-list-item-spacing@"^1.1.0" remark-lint-maximum-heading-length@"^1.0.0" remark-lint-maximum-line-length@"^1.0.0" remark-lint-no-auto-link-without-protocol@"^1.0.0" remark-lint-no-blockquote-without-marker@"^2.0.0" remark-lint-no-consecutive-blank-lines@"^1.0.0" remark-lint-no-duplicate-definitions@"^1.0.0" remark-lint-no-duplicate-headings@"^1.0.0" remark-lint-no-duplicate-headings-in-section@"^1.0.0" remark-lint-no-emphasis-as-heading@"^1.0.0" remark-lint-no-empty-url@"^1.0.1" remark-lint-no-file-name-articles@"^1.0.0" remark-lint-no-file-name-consecutive-dashes@"^1.0.0" remark-lint-no-file-name-irregular-characters@"^1.0.0" remark-lint-no-file-name-mixed-case@"^1.0.0" remark-lint-no-file-name-outer-dashes@"^1.0.1" remark-lint-no-heading-content-indent@"^1.0.0" remark-lint-no-heading-indent@"^1.0.0" remark-lint-no-heading-like-paragraph@"^1.0.0" remark-lint-no-heading-punctuation@"^1.0.0" remark-lint-no-html@"^1.0.0" remark-lint-no-inline-padding@"^1.0.0" remark-lint-no-literal-urls@"^1.0.0" remark-lint-no-missing-blank-lines@"^1.0.0" remark-lint-no-multiple-toplevel-headings@"^1.0.0" remark-lint-no-paragraph-content-indent@"^1.0.1" remark-lint-no-reference-like-url@"^1.0.0" remark-lint-no-shell-dollars@"^1.0.0" remark-lint-no-shortcut-reference-image@"^1.0.0" remark-lint-no-shortcut-reference-link@"^1.0.1" remark-lint-no-table-indentation@"^1.0.0" remark-lint-no-tabs@"^1.0.0" remark-lint-no-trailing-spaces@"^3.0.2" remark-lint-no-undefined-references@"^1.0.0" remark-lint-no-unused-definitions@"^1.0.0" remark-lint-ordered-list-marker-style@"^1.0.0" remark-lint-ordered-list-marker-value@"^1.0.0" remark-lint-rule-style@"^1.0.0" remark-lint-strong-marker@"^1.0.0" remark-lint-table-cell-padding@"^1.0.0" remark-lint-table-pipe-alignment@"^1.0.0" remark-lint-table-pipes@"^1.0.0" remark-lint-unordered-list-marker-style@"^1.0.0" remark-slug@"^5.0.0" remark-unlink@"^2.0.0" remark-validate-links@"^9.0.1" remark-vdom@"^8.0.0" semver@"^6.0.0" source-map-explorer@"^2.5.3" spdx-license-ids@"^3.0.0" tap-min@"git+https://github.com/Planeshifter/tap-min.git" tap-spec@"5.x.x" tap-summary@"^4.0.0" tap-xunit@"^2.2.0" tape@"git+https://github.com/kgryte/tape.git#fix/globby" to-vfile@"^6.0.0" typedoc@"git+https://github.com/kgryte/typedoc.git#0.16.11-patch" typescript@"4.3.5" uglify-js@"^3.17.4" uglifyify@"^5.0.0" unified-lint-rule@"^1.0.1" unist-util-visit@"^2.0.0" unist-util-visit-parents@"^3.1.1" yaml@"^1.0.0" node-gyp@"^9.3.1"

lib/node_modules/@stdlib/math/base/special/minmaxabsf/README.md

+9-8
Original file line numberDiff line numberDiff line change
@@ -45,29 +45,29 @@ var minmaxabsf = require( '@stdlib/math/base/special/minmaxabsf' );
4545
Returns the minimum and maximum absolute single-precision floating-point values in a single pass.
4646

4747
```javascript
48-
var v = minmaxabsf( 4.2, 3.14 );
49-
// returns [ 3.14, 4.2 ]
48+
var v = minmaxabsf( 4.0, 3.0 );
49+
// returns <Float32Array>[ 3.0, 4.0 ]
5050

5151
v = minmaxabsf( +0.0, -0.0 );
52-
// returns [ 0.0, 0.0 ]
52+
// returns <Float32Array>[ 0.0, 0.0 ]
5353
```
5454

5555
If any argument is `NaN`, the function returns `Nan` for both the minimum value and the maximum value.
5656

5757
```javascript
58-
var v = minmaxabs( 4.2, NaN );
59-
// returns [ NaN, NaN ]
58+
var v = minmaxabsf( 4.2, NaN );
59+
// returns <Float32Array>[ NaN, NaN ]
6060

61-
v = minmaxabs( NaN, 3.14 );
62-
// returns [ NaN, NaN ]
61+
v = minmaxabsf( NaN, 3.14 );
62+
// returns <Float32Array>[ NaN, NaN ]
6363
```
6464

6565
#### minmaxabsf.assign( x, y, out, stride, offset )
6666

6767
Returns the minimum and maximum absolute single-precision values in a single pass and assigns the results to a provided output array.
6868

6969
```javascript
70-
var Float64Array = require( '@stdlib/array/float32' );
70+
var Float32Array = require( '@stdlib/array/float32' );
7171

7272
var out = new Float32Array( 2 );
7373

@@ -160,6 +160,7 @@ stdlib_base_minmaxabsf( 0.0f, -0.0f, &min, &max );
160160
```
161161
162162
The function accepts the following arguments:
163+
163164
- **x**: `[in] float` input value.
164165
- **y**: `[in] float` input value.
165166
- **min**: `[in] *float` output min.

lib/node_modules/@stdlib/math/base/special/minmaxabsf/benchmark/benchmark.js

-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@
2323
var bench = require( '@stdlib/bench' );
2424
var randu = require( '@stdlib/random/base/randn' );
2525
var isFloat32Array = require( '@stdlib/assert/is-float32array' );
26-
var isArray = require( '@stdlib/assert/is-array' );
27-
var minf = require( '@stdlib/math/base/special/minf' );
28-
var maxf = require( '@stdlib/math/base/special/maxf' );
2926
var float32Array = require( '@stdlib/array/float32' );
3027
var pkg = require( './../package.json' ).name;
3128
var minmaxabsf = require( './../lib' );

lib/node_modules/@stdlib/math/base/special/minmaxabsf/include/stdlib/math/base/special/minmaxabsf.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ extern "C" {
2929
/**
3030
* Returns the minimum and maximum absolute single-precision floating-point number.
3131
*/
32-
float stdlib_base_minmaxabsf( const float x, const float y, float* min, float* max );
32+
void stdlib_base_minmaxabsf( const float x, const float y, float* min, float* max );
3333

3434
#ifdef __cplusplus
3535
}

lib/node_modules/@stdlib/math/base/special/minmaxabsf/lib/assign.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -40,25 +40,25 @@ var absf = require( '@stdlib/math/base/special/absf' );
4040
* @example
4141
* var out = [ 0.0, 0.0 ];
4242
* var v = minmaxabsf( 3.14, 4.2, out, 1, 0 );
43-
* // returns [ 3.14, 4.2 ]
43+
* // returns <Float32Array>[ 3.14, 4.2 ]
4444
*
4545
* var bool = ( v === out );
4646
* // returns true
4747
*
4848
* @example
4949
* var out = [ 0.0, 0.0 ];
5050
* var v = minmaxabsf( -5.9, 3.14, out, 1, 0 );
51-
* // returns [ 3.14, 5.9 ]
51+
* // returns <Float32Array>[ 3.14, 5.9 ]
5252
*
5353
* @example
5454
* var out = [ 0.0, 0.0 ];
5555
* var v = minmaxabsf( 3.14, NaN, out, 1, 0 );
56-
* // returns [ NaN, NaN ]
56+
* // returns <Float32Array>[ NaN, NaN ]
5757
*
5858
* @example
5959
* var out = [ 0.0, 0.0 ];
6060
* var v = minmaxabsf( +0.0, -0.0, out, 1, 0 );
61-
* // returns [ 0.0, 0.0 ]
61+
* // returns <Float32Array>[ 0.0, 0.0 ]
6262
*/
6363
function minmaxabsf( x, y, out, stride, offset ) {
6464
var ax;

lib/node_modules/@stdlib/math/base/special/minmaxabsf/lib/main.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ var assign = require( './assign.js' );
3535
* @returns {Array<number>} minimum and maximum absolute single-precision floating-point values
3636
*
3737
* @example
38-
* var v = minmaxabsf( 3.14, 4.2 );
39-
* // returns <Float32Array>[ 3.14, 4.2 ]
38+
* var v = minmaxabsf( 3.0, 4.0 );
39+
* // returns <Float32Array>[ 3.0, 4.0 ]
4040
*
4141
* @example
4242
* var v = minmaxabsf( 3.14, NaN );
@@ -47,7 +47,7 @@ var assign = require( './assign.js' );
4747
* // returns <Float32Array>[ 0.0, 0.0 ]
4848
*/
4949
function minmaxabsf( x, y ) {
50-
var out = new float32Array( 2 );
50+
var out = new float32Array( 2 );
5151
x = float64ToFloat32( x );
5252
y = float64ToFloat32( y );
5353
return assign( x, y, out, 1, 0 );

lib/node_modules/@stdlib/math/base/special/minmaxabsf/lib/native.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
// MODULES //
2222

23-
var addon = require( './../src/addon.node' );
2423
var float32Array = require( '@stdlib/array/float32' );
2524
var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' );
25+
var addon = require( './../src/addon.node' );
2626

2727

2828
// MAIN //
@@ -34,8 +34,8 @@ var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' );
3434
* @returns {Array<number>} minimum and maximum absolute single-precision floating-point values
3535
*
3636
* @example
37-
* var v = minmaxabsf( 3.14, 4.2 );
38-
* // returns <Float32Array>[ 3.14, 4.2 ]
37+
* var v = minmaxabsf( 3.0, 4.0 );
38+
* // returns <Float32Array>[ 3.0, 4.0 ]
3939
*
4040
* @example
4141
* var v = minmaxabsf( 3.14, NaN );

lib/node_modules/@stdlib/math/base/special/minmaxabsf/manifest.json

+3-6
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@
4444
"@stdlib/math/base/assert/is-nanf",
4545
"@stdlib/math/base/napi/binary",
4646
"@stdlib/math/base/special/absf",
47-
"@stdlib/math/base/assert/is-nanf",
48-
"@stdlib/constants/float32/nan.h"
47+
"@stdlib/math/base/assert/is-nanf"
4948
]
5049
},
5150
{
@@ -67,8 +66,7 @@
6766
"@stdlib/math/base/assert/is-nanf",
6867
"@stdlib/math/base/napi/binary",
6968
"@stdlib/math/base/special/absf",
70-
"@stdlib/math/base/assert/is-nanf",
71-
"@stdlib/constants/float32/nan.h"
69+
"@stdlib/math/base/assert/is-nanf"
7270
]
7371
},
7472
{
@@ -90,8 +88,7 @@
9088
"@stdlib/math/base/assert/is-nanf",
9189
"@stdlib/math/base/napi/binary",
9290
"@stdlib/math/base/special/absf",
93-
"@stdlib/math/base/assert/is-nanf",
94-
"@stdlib/constants/float32/nan.h"
91+
"@stdlib/math/base/assert/is-nanf"
9592
]
9693
}
9794
]

lib/node_modules/@stdlib/math/base/special/minmaxabsf/src/addon.c

+16-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,21 @@
1818

1919
#include "stdlib/math/base/special/minmaxabsf.h"
2020
#include "stdlib/math/base/napi/binary.h"
21+
#include "stdlib/napi/argv.h"
22+
#include "stdlib/napi/argv_float.h"
23+
#include "stdlib/napi/argv_float32array.h"
24+
#include "stdlib/napi/export.h"
25+
#include <node_api.h>
26+
27+
static napi_value addon( napi_env env, napi_callback_info info ){
28+
STDLIB_NAPI_ARGV( env, info, argv, argc, 3 );
29+
STDLIB_NAPI_ARGV_FLOAT( env, x, argv, 0 );
30+
STDLIB_NAPI_ARGV_FLOAT( env, y, argv, 1 );
31+
STDLIB_NAPI_ARGV_FLOAT32ARRAY(env, out, len, argv, 2 );
32+
STDLIB_MATH_BASE_NAPI_MODULE_FF_F( stdlib_base_minmaxabsf );
33+
stdlib_base_minmaxabsf( x, y, &out[0], &out[1] );
34+
return NULL;
35+
}
2136

2237
// cppcheck-suppress shadowFunction
23-
STDLIB_MATH_BASE_NAPI_MODULE_FF_F( stdlib_base_minmaxabsf )
38+
STDLIB_NAPI_MODULE_EXPORT_FCN( addon )

lib/node_modules/@stdlib/math/base/special/minmaxabsf/src/main.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#include "stdlib/math/base/special/minmaxabsf.h"
2020
#include "stdlib/math/base/assert/is_nanf.h"
2121
#include "stdlib/math/base/special/absf.h"
22-
#include "stdlib/constants/float32/nan.h"
22+
// #include "stdlib/constants/float32/nan.h"
2323

2424
/**
2525
* Evaluates the single-precision min and max value.
@@ -44,8 +44,8 @@
4444
*/
4545
void stdlib_base_minmaxabsf( const float x, const float y, float* min, float* max ){
4646
if ( stdlib_base_is_nanf( x ) || stdlib_base_is_nanf( y ) ) {
47-
*min = STDLIB_CONSTANT_FLOAT32_NAN;
48-
*max = STDLIB_CONSTANT_FLOAT32_NAN;
47+
*min = 0.0f/0.0f;
48+
*max = 0.0f/0.0f;
4949
return;
5050
}
5151
float ax = stdlib_base_absf( x );

lib/node_modules/@stdlib/math/base/special/minmaxabsf/test/test.assign.js

-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
var tape = require( 'tape' );
2424
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
25-
var isNegativeZero = require( '@stdlib/math/base/assert/is-negative-zero' );
2625
var isPositiveZero = require( '@stdlib/math/base/assert/is-positive-zero' );
2726
var float64ToFloat32 = require( '@stdlib/number/float64/base/to-float32' );
2827
var PINF = require( '@stdlib/constants/float32/pinf' );

0 commit comments

Comments
 (0)