From 57c527e494bb83ea70644ec4ac1d18a80bfb4968 Mon Sep 17 00:00:00 2001 From: Vivek Maurya Date: Mon, 23 Dec 2024 23:54:17 +0530 Subject: [PATCH 1/6] refactor: update math/base/assert/is-even to follow latest project conventions --- .../assert/is-even/benchmark/benchmark.js | 11 +++- .../is-even/benchmark/benchmark.native.js | 11 +++- .../is-even/benchmark/c/native/benchmark.c | 9 ++- .../math/base/assert/is-even/manifest.json | 40 +++++++++++- .../math/base/assert/is-even/src/addon.c | 65 ++++--------------- 5 files changed, 76 insertions(+), 60 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.js b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.js index 5c2a4932dffa..5bbee72cf256 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.js @@ -21,6 +21,7 @@ // MODULES // var bench = require( '@stdlib/bench' ); +var Float64Array = require( '@stdlib/array/float64' ); var randu = require( '@stdlib/random/base/randu' ); var round = require( '@stdlib/math/base/special/round' ); var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive; @@ -31,14 +32,20 @@ var isEven = require( './../lib' ); // MAIN // bench( pkg, function benchmark( b ) { + var len; var x; var y; var i; + len = 100; + x = new Float64Array( len ); + for ( i = 0; i < len; i++ ) { + x[ i ] = round( (randu()*1.0e7) - 5.0e6 ); + } + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = round( (randu()*1.0e7) - 5.0e6 ); - y = isEven( x ); + y = isEven( x[ i % len ] ); if ( typeof y !== 'boolean' ) { b.fail( 'should return a boolean' ); } diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.native.js index da205aada595..c9b83194693d 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.native.js @@ -23,6 +23,7 @@ var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); var randu = require( '@stdlib/random/base/randu' ); +var Float64Array = require( '@stdlib/array/float64' ); var round = require( '@stdlib/math/base/special/round' ); var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive; var tryRequire = require( '@stdlib/utils/try-require' ); @@ -40,14 +41,20 @@ var opts = { // MAIN // bench( pkg+'::native', opts, function benchmark( b ) { + var len; var x; var y; var i; + len = 100; + x = new Float64Array( len ); + for ( i = 0; i < len; i++ ) { + x[ i ] = round( (randu()*1.0e7) - 5.0e6 ); + } + b.tic(); for ( i = 0; i < b.iterations; i++ ) { - x = round( (randu()*1.0e7) - 5.0e6 ); - y = isEven( x ); + y = isEven( x[ i % len ] ); if ( typeof y !== 'boolean' ) { b.fail( 'should return a boolean' ); } diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c index 5605d32ba184..26b946a49c53 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c @@ -92,15 +92,18 @@ static double rand_double( void ) { */ static double benchmark( void ) { double elapsed; - double x; + double x[ 100 ]; double t; bool b; int i; + for ( i = 0; i < 100; i++ ) { + x[ i ] = ( rand_double() * 200.0 ) - 100.0; + } + t = tic(); for ( i = 0; i < ITERATIONS; i++ ) { - x = ( rand_double() * 200.0 ) - 100.0; - b = stdlib_base_is_even( x ); + b = stdlib_base_is_even( x[ i%100 ] ); if ( b != true && b != false ) { printf( "should return either true or false\n" ); break; diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json b/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json index 33756e256dcf..7520d67691f3 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json @@ -1,5 +1,7 @@ { - "options": {}, + "options": { + "task": "build" + }, "fields": [ { "field": "src", @@ -24,6 +26,42 @@ ], "confs": [ { + "task": "build", + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [ + "-lm" + ], + "libpath": [], + "dependencies": [ + "@stdlib/math/base/assert/is-integer", + "@stdlib/napi/export", + "@stdlib/napi/argv", + "@stdlib/napi/argv-double" + ] + }, + { + "task": "benchmark", + "src": [ + "./src/main.c" + ], + "include": [ + "./include" + ], + "libraries": [ + "-lm" + ], + "libpath": [], + "dependencies": [ + "@stdlib/math/base/assert/is-integer" + ] + }, + { + "task": "examples", "src": [ "./src/main.c" ], diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c index 85642e403244..4fafbe173c77 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c @@ -17,10 +17,13 @@ */ #include "stdlib/math/base/assert/is_even.h" +#include "stdlib/napi/argv.h" +#include "stdlib/napi/argv_double.h" +#include "stdlib/napi/export.h" #include -#include #include + /** * Receives JavaScript callback invocation data. * @@ -29,60 +32,18 @@ * @return Node-API value */ static napi_value addon( napi_env env, napi_callback_info info ) { - napi_status status; - - // Get callback arguments: - size_t argc = 1; - napi_value argv[ 1 ]; - status = napi_get_cb_info( env, info, &argc, argv, NULL, NULL ); - assert( status == napi_ok ); - - // Check whether we were provided the correct number of arguments: - if ( argc < 1 ) { - status = napi_throw_error( env, NULL, "invalid invocation. Insufficient arguments." ); - assert( status == napi_ok ); - return NULL; - } - if ( argc > 1 ) { - status = napi_throw_error( env, NULL, "invalid invocation. Too many arguments." ); - assert( status == napi_ok ); - return NULL; - } - - napi_valuetype vtype0; - status = napi_typeof( env, argv[ 0 ], &vtype0 ); - assert( status == napi_ok ); - if ( vtype0 != napi_number ) { - status = napi_throw_type_error( env, NULL, "invalid argument. First argument must be a number." ); - assert( status == napi_ok ); - return NULL; - } - - double x; - status = napi_get_value_double( env, argv[ 0 ], &x ); - assert( status == napi_ok ); + STDLIB_NAPI_ARGV( env, info, argv, argc, 1 ); + STDLIB_NAPI_ARGV_DOUBLE( env, x, argv, 0 ); - bool result = stdlib_base_is_even( x ); + // Check if the number is even: + bool result = stdlib_base_is_even( x ); - napi_value v; - status = napi_create_int32( env, (int32_t)result, &v ); - assert( status == napi_ok ); + napi_value v; + napi_status status = napi_get_boolean( env, result, &v ); + assert( status == napi_ok ); - return v; + return v; } -/** -* Initializes a Node-API module. -* -* @param env environment under which the function is invoked -* @param exports exports object -* @return main export -*/ -static napi_value init( napi_env env, napi_value exports ) { - napi_value fcn; - napi_status status = napi_create_function( env, "exports", NAPI_AUTO_LENGTH, addon, NULL, &fcn ); - assert( status == napi_ok ); - return fcn; -} +STDLIB_NAPI_MODULE_EXPORT_FCN( addon ) -NAPI_MODULE( NODE_GYP_MODULE_NAME, init ) From c1e591df4d59ffe65d26f5d058c9cff63a360308 Mon Sep 17 00:00:00 2001 From: Vivek Maurya Date: Wed, 25 Dec 2024 20:09:34 +0530 Subject: [PATCH 2/6] refactor: update math/base/assert/is-even to follow latest project conventions --- .../math/base/assert/is-even/manifest.json | 3 ++- .../math/base/assert/is-even/src/addon.c | 19 ++++++------------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json b/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json index 7520d67691f3..b3c792d220fd 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json @@ -41,7 +41,8 @@ "@stdlib/math/base/assert/is-integer", "@stdlib/napi/export", "@stdlib/napi/argv", - "@stdlib/napi/argv-double" + "@stdlib/napi/argv-double", + "@stdlib/napi/create-double" ] }, { diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c index 4fafbe173c77..fddd5e3ddbd1 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c @@ -19,10 +19,10 @@ #include "stdlib/math/base/assert/is_even.h" #include "stdlib/napi/argv.h" #include "stdlib/napi/argv_double.h" +#include "stdlib/napi/create_double.h" #include "stdlib/napi/export.h" #include -#include - +#include /** * Receives JavaScript callback invocation data. @@ -32,17 +32,10 @@ * @return Node-API value */ static napi_value addon( napi_env env, napi_callback_info info ) { - STDLIB_NAPI_ARGV( env, info, argv, argc, 1 ); - STDLIB_NAPI_ARGV_DOUBLE( env, x, argv, 0 ); - - // Check if the number is even: - bool result = stdlib_base_is_even( x ); - - napi_value v; - napi_status status = napi_get_boolean( env, result, &v ); - assert( status == napi_ok ); - - return v; + STDLIB_NAPI_ARGV( env, info, argv, argc, 1 ); + STDLIB_NAPI_ARGV_DOUBLE( env, x, argv, 0 ); + STDLIB_NAPI_CREATE_DOUBLE( env, stdlib_base_is_even( x ), out ); + return out; } STDLIB_NAPI_MODULE_EXPORT_FCN( addon ) From ed70d8c15ff3d28ed8090287c1dcf15f79966727 Mon Sep 17 00:00:00 2001 From: Vivek Maurya Date: Fri, 3 Jan 2025 06:41:25 +0530 Subject: [PATCH 3/6] refactor: update math/base/assert/is-even to follow latest project conventions --- type: pre_push_report description: Results of running various checks prior to pushing changes. report: --- --- .../math/base/assert/is-even/benchmark/benchmark.js | 9 ++------- .../base/assert/is-even/benchmark/benchmark.native.js | 9 ++------- .../base/assert/is-even/benchmark/c/native/benchmark.c | 2 +- .../@stdlib/math/base/assert/is-even/manifest.json | 5 +++-- .../@stdlib/math/base/assert/is-even/src/addon.c | 4 ++-- 5 files changed, 10 insertions(+), 19 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.js b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.js index 5bbee72cf256..0ea52481252f 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.js @@ -21,9 +21,7 @@ // MODULES // var bench = require( '@stdlib/bench' ); -var Float64Array = require( '@stdlib/array/float64' ); -var randu = require( '@stdlib/random/base/randu' ); -var round = require( '@stdlib/math/base/special/round' ); +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive; var pkg = require( './../package.json' ).name; var isEven = require( './../lib' ); @@ -38,10 +36,7 @@ bench( pkg, function benchmark( b ) { var i; len = 100; - x = new Float64Array( len ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( (randu()*1.0e7) - 5.0e6 ); - } + x = discreteUniform( len, 0, 1000 ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.native.js b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.native.js index c9b83194693d..b95bed88186f 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.native.js +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/benchmark.native.js @@ -22,9 +22,7 @@ var resolve = require( 'path' ).resolve; var bench = require( '@stdlib/bench' ); -var randu = require( '@stdlib/random/base/randu' ); -var Float64Array = require( '@stdlib/array/float64' ); -var round = require( '@stdlib/math/base/special/round' ); +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive; var tryRequire = require( '@stdlib/utils/try-require' ); var pkg = require( './../package.json' ).name; @@ -47,10 +45,7 @@ bench( pkg+'::native', opts, function benchmark( b ) { var i; len = 100; - x = new Float64Array( len ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( (randu()*1.0e7) - 5.0e6 ); - } + x = discreteUniform( len, 0, 1000 ); b.tic(); for ( i = 0; i < b.iterations; i++ ) { diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c index 26b946a49c53..35cf49658357 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c @@ -98,7 +98,7 @@ static double benchmark( void ) { int i; for ( i = 0; i < 100; i++ ) { - x[ i ] = ( rand_double() * 200.0 ) - 100.0; + x[ i ] = round(( rand_double() * 200.0 ) - 100.0); } t = tic(); diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json b/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json index b3c792d220fd..bf8d463ea77d 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json @@ -42,7 +42,7 @@ "@stdlib/napi/export", "@stdlib/napi/argv", "@stdlib/napi/argv-double", - "@stdlib/napi/create-double" + "@stdlib/napi/create-int32" ] }, { @@ -58,7 +58,8 @@ ], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-integer" + "@stdlib/math/base/assert/is-integer", + "@stdlib/random/array/discrete-uniform" ] }, { diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c index fddd5e3ddbd1..1d3bb94eeca8 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c @@ -19,7 +19,7 @@ #include "stdlib/math/base/assert/is_even.h" #include "stdlib/napi/argv.h" #include "stdlib/napi/argv_double.h" -#include "stdlib/napi/create_double.h" +#include "stdlib/napi/create_int32.h" #include "stdlib/napi/export.h" #include #include @@ -34,7 +34,7 @@ static napi_value addon( napi_env env, napi_callback_info info ) { STDLIB_NAPI_ARGV( env, info, argv, argc, 1 ); STDLIB_NAPI_ARGV_DOUBLE( env, x, argv, 0 ); - STDLIB_NAPI_CREATE_DOUBLE( env, stdlib_base_is_even( x ), out ); + STDLIB_NAPI_CREATE_INT32( env, stdlib_base_is_even( x ), out ); return out; } From 448447712de5f4855f045c688f23bdbf6dfb1aeb Mon Sep 17 00:00:00 2001 From: Vivek Maurya Date: Fri, 3 Jan 2025 06:46:41 +0530 Subject: [PATCH 4/6] refactor: update math/base/assert/is-even to follow latest project conventions --- .../@stdlib/math/base/assert/is-even/manifest.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json b/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json index bf8d463ea77d..accca2c07be0 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/manifest.json @@ -58,8 +58,7 @@ ], "libpath": [], "dependencies": [ - "@stdlib/math/base/assert/is-integer", - "@stdlib/random/array/discrete-uniform" + "@stdlib/math/base/assert/is-integer" ] }, { From 60bb82226045badef1603d0b652c7820dac1d716 Mon Sep 17 00:00:00 2001 From: Athan Date: Thu, 2 Jan 2025 23:30:10 -0800 Subject: [PATCH 5/6] Apply suggestions from code review Signed-off-by: Athan --- .../math/base/assert/is-even/benchmark/c/native/benchmark.c | 2 +- lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c index 35cf49658357..7e0075a0d8a8 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/benchmark/c/native/benchmark.c @@ -98,7 +98,7 @@ static double benchmark( void ) { int i; for ( i = 0; i < 100; i++ ) { - x[ i ] = round(( rand_double() * 200.0 ) - 100.0); + x[ i ] = round( (rand_double()*200.0) - 100.0 ); } t = tic(); diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c index 1d3bb94eeca8..60bcce94f87a 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c @@ -22,7 +22,6 @@ #include "stdlib/napi/create_int32.h" #include "stdlib/napi/export.h" #include -#include /** * Receives JavaScript callback invocation data. From 5ed70b8f7dc18c6eb87ae197f19617680273135f Mon Sep 17 00:00:00 2001 From: Athan Date: Thu, 2 Jan 2025 23:31:43 -0800 Subject: [PATCH 6/6] Apply suggestions from code review Signed-off-by: Athan --- lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c index 60bcce94f87a..b496a218e026 100644 --- a/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c +++ b/lib/node_modules/@stdlib/math/base/assert/is-even/src/addon.c @@ -22,6 +22,7 @@ #include "stdlib/napi/create_int32.h" #include "stdlib/napi/export.h" #include +#include /** * Receives JavaScript callback invocation data. @@ -33,7 +34,7 @@ static napi_value addon( napi_env env, napi_callback_info info ) { STDLIB_NAPI_ARGV( env, info, argv, argc, 1 ); STDLIB_NAPI_ARGV_DOUBLE( env, x, argv, 0 ); - STDLIB_NAPI_CREATE_INT32( env, stdlib_base_is_even( x ), out ); + STDLIB_NAPI_CREATE_INT32( env, (int32_t)stdlib_base_is_even( x ), out ); return out; }