# nv-facutil-simple-test

> nv-facutil-simple-test ====================== - nv-facutil-simple-test simple test tools

Latest version **0.0.22** (published 2023-10-06) · ISC license · 0 weekly downloads

## Install

```sh
npm install nv-facutil-simple-test
pnpm add nv-facutil-simple-test
yarn add nv-facutil-simple-test
bun add nv-facutil-simple-test
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.22 |
| Published | 2023-10-06 |
| First published | 2021-06-25 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 48.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | ihgazni2 |

## Links

- npm: https://www.npmjs.com/package/nv-facutil-simple-test
- npm.io page: https://npm.io/package/nv-facutil-simple-test

## Dependencies (4)

- [nv-array-range](https://npm.io/package/nv-array-range.md) ^1.0.2
- [nv-facutil-basic](https://npm.io/package/nv-facutil-basic.md) ^1.3.20
- [nv-random-string](https://npm.io/package/nv-random-string.md) ^1.0.1
- [nv-error-simple-trace](https://npm.io/package/nv-error-simple-trace.md) ^1.0.2

## Recent versions

- 0.0.22 (latest) — 2023-10-06
- 0.0.20 — 2023-10-03
- 0.0.18 — 2023-07-11
- 0.0.17 — 2023-06-16
- 0.0.16 — 2023-06-15
- 0.0.15 — 2023-06-10
- 0.0.13 — 2022-10-20
- 0.0.12 — 2022-08-27
- 0.0.10 — 2022-06-14
- 0.0.9 — 2022-06-14
- 0.0.8 — 2022-06-14
- 0.0.7 — 2022-06-13
- 0.0.6 — 2022-05-29
- 0.0.5 — 2022-03-07
- 0.0.4 — 2022-02-17
- … 3 more at https://npm.io/package/nv-facutil-simple-test/versions

## README

nv-facutil-simple-test
======================
- nv-facutil-simple-test simple test tools 


install
=======
- npm install nv-facutil-simple-test 

usage
=====

    const {sync,async,Ahook} = require("nv-facutil-simple-test")


    
example
-------



### sync

    function tst0(ary0,ary1) {
        ary0.concat(ary1)
    }

    > sync(10000000,tst0,[1,2],[3,4,5])
    { rounds: 10000000, f: [Function: tst0], costed: 2894.0468668937683 }
    >


### async

     function tst1(delay) {
         let p = new Promise(
             (rs,rj)=> {
                 setTimeout(()=>{rs(true)},delay)
             }
         );
         return(p)
     }

     var p = async(5,tst1,3000)

     > p
     Promise { <pending> }
     > p
     Promise {
       { rounds: 5, f: [Function: tst1], costed: 15013.968754768372 }
     }
     >

### compare for fastest

        class Cnode  {
            constructor(a,b) {
                this.a = a;
                this.b = b;
            }
        }

        function Fnode(a,b) {
            this.a = a;
            this.b = b;
        }

        class Anode extends Array {
            get a()  {return(this[0])}
            set a(v) {this[0]=v}
            get b()  {return(this[1])}
            set b(v) {this[1]=v}
        }

        var new_cnd = (a,b)=>new Cnode(a,b);
        var new_fnd = (a,b)=>new Fnode(a,b);
        var new_arynd = (a,b)=>new Anode(a,b);

        var obj_creat = (a,b) => {
            let nd = Object.create(Cnode.prototype)
            nd.a = a;
            nd.b = b;
            return(nd)
        }

        var nul_creat = (a,b) => {
            let nd = Object.create(null);
            nd.a = a;
            nd.b = b;
            return(nd)
        }


        var shape = { a:0,b:0}
        var plain_obj = (a,b) => ({a,b})


        var plain_ary = (a,b) => [a,b]

        var reflect = (a,b) => Reflect.construct(Fnode, [a,b]);

        class Priv {
            #a 
            #b 
            constructor(a,b) {
                this.#a = a;
                this.#b = b;
            }
        }

        var priv = (a,b) =>new Priv(a,b);


        var obj_with_gtst = (a,b) =>({
            "#a":100,
            "#b":200,
            get a() {return(this["#a"])},
            set a(v) {this["#a"] =v},
            get b() {return(this["#b"])},
            set b(v) {this["#b"] =v}
        })

        cmp(10000000,[new_cnd,new_fnd,obj_creat,nul_creat,plain_obj,new_arynd,plain_ary,reflect,priv,obj_with_gtst],111,222)

        /*
            [
              {
                rounds: 10000000,
                f: [Function: plain_obj],
                costed: 167.5416979789734
              },
              {
                rounds: 10000000,
                f: [Function: plain_ary],
                costed: 197.22762298583984
              },
              {
                rounds: 10000000,
                f: [Function: new_arynd],
                costed: 202.34725713729858
              },
              {
                rounds: 10000000,
                f: [Function: new_fnd],
                costed: 208.09321069717407
              },
              {
                rounds: 10000000,
                f: [Function: new_cnd],
                costed: 211.60849380493164
              },
              {
                rounds: 10000000,
                f: [Function: obj_creat],
                costed: 332.6821961402893
              },
              {
                rounds: 10000000,
                f: [Function: reflect],
                costed: 514.2599349021912
              },
              {
                rounds: 10000000,
                f: [Function: nul_creat],
                costed: 675.6858191490173
              },
              { rounds: 10000000, f: [Function: priv], costed: 2362.0123538970947 },
              {
                rounds: 10000000,
                f: [Function: obj_with_gtst],
                costed: 13023.659306049347
              }
            ]
        */





### Ahook
- only work in nodejs, coz it use async\_hook

#### 

     var a = new Ahook();
     a.enable();

     > a.lst_
     {
       id: 222,
       type: 'TickObject',
       trigger: 5,
       resource: {
         callback: [Function: afterWriteTick],
         args: [ [Object] ],
         [Symbol(async_id_symbol)]: 222,
         [Symbol(trigger_async_id_symbol)]: 5
       }
     }
     > a.Timeout_
     [
       {
         id: 201,
         type: 'Timeout',
         trigger: 5,
         resource: Timeout {
           _idleTimeout: 15,
           _idlePrev: null,
           _idleNext: null,
           _idleStart: 75616,
           _onTimeout: [Function: flushHistory],
           _timerArgs: undefined,
           _repeat: null,
           _destroyed: true,
           [Symbol(refed)]: true,
           [Symbol(kHasPrimitive)]: false,
           [Symbol(asyncId)]: 201,
           [Symbol(triggerId)]: 5
         }
       },
       {
         id: 202,
         type: 'Timeout',
         trigger: 5,
         resource: {
           callback: [Function: maybeReadMore_],
           args: [Array],
           [Symbol(async_id_symbol)]: 202,
           [Symbol(trigger_async_id_symbol)]: 5
         }
       },
       ......
     ]

     a.disable();


METHODS
=======

### 
    Ahook.prototype.enable
    Ahook.prototype.disable
    Ahook.prototype.clear

### getter

    Ahook.prototype.FSEVENTWRAP_          Ahook.prototype.FSREQCALLBACK_
    Ahook.prototype.GETADDRINFOREQWRAP_   Ahook.prototype.GETNAMEINFOREQWRAP_
    Ahook.prototype.HTTPCLIENTREQUEST_    Ahook.prototype.HTTPINCOMINGMESSAGE_
    Ahook.prototype.Immediate_            Ahook.prototype.JSSTREAM_
    Ahook.prototype.Microtask_            Ahook.prototype.PBKDF2REQUEST_
    Ahook.prototype.PIPECONNECTWRAP_      Ahook.prototype.PIPEWRAP_
    Ahook.prototype.PROCESSWRAP_          Ahook.prototype.PROMISE_
    Ahook.prototype.QUERYWRAP_            Ahook.prototype.RANDOMBYTESREQUEST_
    Ahook.prototype.SHUTDOWNWRAP_         Ahook.prototype.SIGNALWRAP_
    Ahook.prototype.SSLCONNECTION_        Ahook.prototype.STATWATCHER_
    Ahook.prototype.TCPCONNECTWRAP_       Ahook.prototype.TCPSERVERWRAP_
    Ahook.prototype.TCPWRAP_              Ahook.prototype.TLSWRAP_
    Ahook.prototype.TTYWRAP_              Ahook.prototype.TickObject_
    Ahook.prototype.Timeout_              Ahook.prototype.UDPSENDWRAP_
    Ahook.prototype.UDPWRAP_              Ahook.prototype.WRITEWRAP_
    Ahook.prototype.ZLIB_                 
    
    Ahook.prototype.all_
    Ahook.prototype.length_               
    Ahook.prototype.lst_



API
====
- sync(rounds,f,...args)
- async(rounds,f,...args)
- cmp(rounds,func\_ary,...args)
- acmp(rounds,func\_ary,...args)
- fastest(rounds,func\_ary,...args)
- afastest(rounds,func\_ary,...args)


TESTS
=====

### ++  VS  i =i+1


        > var i =0
        > var f0 = ()=>i++                 //a little little slightly faster,can be ignored
        > var f1 = ()=>i=i+1

        > const {sync} = require("nv-facutil-simple-test");
        > sync(10000000,f0)
        { rounds: 10000000, f: [Function: f0], costed: 127.74292135238647 }
        > sync(10000000,f1)
        { rounds: 10000000, f: [Function: f1], costed: 130.06517267227173 }
        > sync(10000000,f0)
        { rounds: 10000000, f: [Function: f0], costed: 139.97180604934692 }
        > sync(10000000,f1)
        { rounds: 10000000, f: [Function: f1], costed: 130.97596168518066 }
        > sync(10000000,f0)
        { rounds: 10000000, f: [Function: f0], costed: 132.0758399963379 }
        > sync(10000000,f1)
        { rounds: 10000000, f: [Function: f1], costed: 144.76730298995972 }
        >
        > sync(100000000,f0)
        { rounds: 100000000, f: [Function: f0], costed: 1218.9988231658936 }
        > sync(100000000,f1)
        { rounds: 100000000, f: [Function: f1], costed: 1279.4322390556335 }
        > sync(100000000,f0)
        { rounds: 100000000, f: [Function: f0], costed: 1324.279109954834 }
        > sync(100000000,f1)
        { rounds: 100000000, f: [Function: f1], costed: 1343.4789361953735 }
        >
        > sync(100000000,f0)
        { rounds: 100000000, f: [Function: f0], costed: 1257.3673729896545 }
        > sync(100000000,f1)
        { rounds: 100000000, f: [Function: f1], costed: 1372.1064085960388 }
        >


### gt 

        > var f0 = (a,b)=>a>b;
        > var f1 = (i)=>i++;


        > sync(10000000,f0,100,200)
        { rounds: 10000000, f: [Function: f0], costed: 215.06074380874634 }
        > sync(10000000,f1,3)
        { rounds: 10000000, f: [Function: f1], costed: 236.30819702148438 }
        
        
        > i =0
        0
        > var f2 = ()=>i++;
        > sync(10000000,f2)
        > sync(10000000,f0,100,200)
        { rounds: 10000000, f: [Function: f0], costed: 209.85319900512695 }
        >

        { rounds: 10000000, f: [Function: f2], costed: 235.23615026474 }


### array 

        const x = require("nv-facutil-simple-test")  

#### push AND shift

        function push_and_then_shift(arr,v) {
            arr.push(v)
            arr.shift()
        }

        function just_move_ele(arr,v) {
            let lngth = arr.length;
            for(let i=0;i<lngth-1;i++) {
                arr[i]= arr[i+1]
            }
            arr[lngth-1] = v
        }


        > push_and_then_shift(arr0,8888)
        > arr0
        [ 20, 30, 40, 8888 ]
        >
        > just_move_ele(arr0,7777)
        > arr0
        [ 30, 40, 8888, 7777 ]
        >



##### mini size  0~6     pppnext pprev prev current next nnext nnnext

        //seemed  just_move_ele MAYBE  faster

        var arr = [10,20,30,40]

        > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 10000000,
          f: [Function: just_move_ele],
          costed: 161.05021619796753
        }
        >


        > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        [
          {
            rounds: 10000000,
            f: [Function: just_move_ele],
            costed: 162.34449529647827
          },
          {
            rounds: 10000000,
            f: [Function: push_and_then_shift],
            costed: 385.70706367492676
          }
        ]
        > x.sync(10000000,just_move_ele,arr0,888)
        {
          rounds: 10000000,
          f: [Function: just_move_ele],
          costed: 202.35962390899658
        }
        > x.sync(10000000,push_and_then_shift,arr0,888)
        {
          rounds: 10000000,
          f: [Function: push_and_then_shift],
          costed: 382.8467917442322
        }
        >

#### small size 128


        //seemed push_and_then_shift MAYBE faster

        var arr0 = Array.from({length:128}).map((r,i)=>i)
       

        > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 10000000,
          f: [Function: push_and_then_shift],
          costed: 1024.305088043213
        }
        > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        [
          {
            rounds: 10000000,
            f: [Function: push_and_then_shift],
            costed: 947.6514468193054
          },
          {
            rounds: 10000000,
            f: [Function: just_move_ele],
            costed: 1104.9360208511353
          }
        ]
        >
        > x.sync(10000000,just_move_ele,arr0,888)
        {
          rounds: 10000000,
          f: [Function: just_move_ele],
          costed: 1109.8695631027222
        }
        > x.sync(10000000,push_and_then_shift,arr0,888)
        {
          rounds: 10000000,
          f: [Function: push_and_then_shift],
          costed: 999.6719512939453
        }
        >
      
### other size

        var arr0 = Array.from({length:2**26}).map((r,i)=>i)

        x.fastest(100,[push_and_then_shift,just_move_ele],arr0,8888)
        > x.fastest(100,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 100,
          f: [Function: push_and_then_shift],
          costed: 6895.157344341278
        }

        var arr0 = Array.from({length:2**16}).map((r,i)=>i)

        > x.fastest(100000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 100000,
          f: [Function: push_and_then_shift],
          costed: 2241.0950689315796
        }
        >

        var arr0 = Array.from({length:2**15}).map((r,i)=>i)

        x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

        > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 1000000,
          f: [Function: push_and_then_shift],
          costed: 9688.172526836395
        }
        >


        > var arr0 = Array.from({length:2**14}).map((r,i)=>i)

        >
        > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 1000000,
          f: [Function: push_and_then_shift],
          costed: 4321.872590065002
        }
        >

        var arr0 = Array.from({length:2**13}).map((r,i)=>i)

        x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

        > var arr0 = Array.from({length:2**13}).map((r,i)=>i)
        >
        > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 1000000,
          f: [Function: push_and_then_shift],
          costed: 113.6801929473877
        }
        >


        var arr0 = Array.from({length:2**12}).map((r,i)=>i)

        x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

        > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 1000000,
          f: [Function: push_and_then_shift],
          costed: 139.2634081840515
        }


        var arr0 = Array.from({length:2**11}).map((r,i)=>i)

        x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
        > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 1000000,
          f: [Function: push_and_then_shift],
          costed: 112.35720729827881
        }


        var arr0 = Array.from({length:2**10}).map((r,i)=>i)

        x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

        > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 1000000,
          f: [Function: push_and_then_shift],
          costed: 109.84335327148438
        }
        >

        var arr0 = Array.from({length:2**9}).map((r,i)=>i)
        x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

        /*
        > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 1000000,
          f: [Function: push_and_then_shift],
          costed: 104.96030282974243
        }
        > x.cmp(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
        [
          {
            rounds: 1000000,
            f: [Function: push_and_then_shift],
            costed: 109.10006427764893
          },
          {
            rounds: 1000000,
            f: [Function: just_move_ele],
            costed: 354.9349093437195
          }
        ]
        >

        */

        var arr0 = Array.from({length:2**8}).map((r,i)=>i)
        x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)

        /*
        > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 10000000,
          f: [Function: push_and_then_shift],
          costed: 965.2179284095764
        }
        > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        [
          {
            rounds: 10000000,
            f: [Function: push_and_then_shift],
            costed: 1006.8404927253723
          },
          {
            rounds: 10000000,
            f: [Function: just_move_ele],
            costed: 1912.6992869377136
          }
        ]
        >

        */


        var arr0 = Array.from({length:2**7}).map((r,i)=>i)
        x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)

        /*
        > var arr0 = Array.from({length:2**7}).map((r,i)=>i)
        > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 10000000,
          f: [Function: push_and_then_shift],
          costed: 975.0886740684509
        }
        > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        [
          {
            rounds: 10000000,
            f: [Function: push_and_then_shift],
            costed: 1021.1277914047241
          },
          {
            rounds: 10000000,
            f: [Function: just_move_ele],
            costed: 1123.0839891433716
          }
        ]
        >
        */


        var arr0 = Array.from({length:2**6}).map((r,i)=>i)
        x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)


        /*
        > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 10000000,
          f: [Function: push_and_then_shift],
          costed: 506.3333601951599
        }
        > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        [
          {
            rounds: 10000000,
            f: [Function: push_and_then_shift],
            costed: 634.4168033599854
          },
          {
            rounds: 10000000,
            f: [Function: just_move_ele],
            costed: 697.2383561134338
          }
        ]
        >

        */


        var arr0 = Array.from({length:2**5}).map((r,i)=>i)
        x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)

        /*
        > var arr0 = Array.from({length:2**5}).map((r,i)=>i)
        undefined
        > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 10000000,
          f: [Function: push_and_then_shift],
          costed: 270.8724579811096
        }
        > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        [
          {
            rounds: 10000000,
            f: [Function: push_and_then_shift],
            costed: 266.78145694732666
          },
          {
            rounds: 10000000,
            f: [Function: just_move_ele],
            costed: 378.65622091293335
          }
        ]
        >

        */


        var arr0 = Array.from({length:2**4}).map((r,i)=>i)
        x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)

        /*
        > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 10000000,
          f: [Function: push_and_then_shift],
          costed: 228.02108192443848
        }
        > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
        [
          {
            rounds: 10000000,
            f: [Function: push_and_then_shift],
            costed: 259.8764510154724
          },
          {
            rounds: 10000000,
            f: [Function: just_move_ele],
            costed: 264.2375192642212
          }
        ]
        >
        */

        var arr0 = Array.from({length:2**3}).map((r,i)=>i)
        x.fastest(100000000,[push_and_then_shift,just_move_ele],arr0,8888)
        x.cmp(100000000,[push_and_then_shift,just_move_ele],arr0,8888)

        /*
        > x.fastest(100000000,[push_and_then_shift,just_move_ele],arr0,8888)
        {
          rounds: 100000000,
          f: [Function: just_move_ele],
          costed: 1979.1184711456299
        }
        > x.cmp(100000000,[push_and_then_shift,just_move_ele],arr0,8888)
        [
          {
            rounds: 100000000,
            f: [Function: just_move_ele],
            costed: 2022.5493369102478
          },
          {
            rounds: 100000000,
            f: [Function: push_and_then_shift],
            costed: 2156.524836063385
          }
        ]
        >

        */


prop OR key size
-----------------


        const {sync,mem_change} = require("nv-facutil-simple-test")

        class GPS0 {
            constructor(lat,lon,alt) {
                this.latitude   = lat;
                this.longitude  = lon;
                this.altitude   = alt;
            }
        }


        class GPS1 {
            constructor(lat,lon,alt) {
                this.x  = lat;
                this.y  = lon;
                this.z  = alt;
            }
            get latitude_()  {return(this.x)}
            get longitude_() {return(this.y)}
            get altitude_()  {return(this.z)}
        }



        function f0() {return(new GPS0(100,100,100))}
        function f1() {return(new GPS1(100,100,100))}

        sync(5000000,f0)
        sync(5000000,f1)

        /* creat speed nearly same
        > sync(5000000,f0)
        { rounds: 5000000, f: [Function: f0], costed: 88.10719192028046 }
        > sync(5000000,f1)
        { rounds: 5000000, f: [Function: f1], costed: 86.56737101078033 }
        >
        > sync(5000000,f0)
        { rounds: 5000000, f: [Function: f0], costed: 87.2494729757309 }
        > sync(5000000,f1)
        { rounds: 5000000, f: [Function: f1], costed: 89.2833321094513 }
        >

        */


        > process.memoryUsage()
        {
          rss: 46972928,
          heapTotal: 8511488,
          heapUsed: 6355072,
          external: 1058023,
          arrayBuffers: 17147
        }
        >
        > mem_change()
        {
          rss: -2600960,
          heapTotal: -3145728,
          heapUsed: -1426304,
          external: 4,
          arrayBuffers: -15
        }

        > mem_change()
        { rss: 0, heapTotal: 0, heapUsed: 83224, external: 4, arrayBuffers: 4 }
        >


        var arr0 = Array.from({length:1000000})
        var arr1 = Array.from({length:1000000})



        > mem_change()
        {
          rss: 14991360,
          heapTotal: 16277504,
          heapUsed: 15118816,
          external: -1823,
          arrayBuffers: -1056
        }
        >




        arr0.forEach((r,i)=>{arr0[i]=f0()})



        >  mem_change()
        {
          rss: 72437760,
          heapTotal: 63700992,
          heapUsed: 47852128,
          external: -1138,
          arrayBuffers: 1
        }
        >


        arr1.forEach((r,i)=>{arr0[i]=f1()})

        >  mem_change()
        {
          rss: 35741696,
          heapTotal: 31457280,
          heapUsed: 33430368,           //
          external: 35,
          arrayBuffers: 36
        }
        >

###  instanceof  VS constructor.name

        var u8a = new Uint8Array(4);
        var f0 = (o)=>(o instanceof Uint8Array);
        var f1 = (o)=>o.constructor.name === 'Uint8Array';

        > f0(u8a)
        true
        > f1(u8a)
        true
        >
        > x.sync(10000000,f0,u8a)
        { rounds: 10000000, f: [Function: f0], costed: 148.99506187438965 }
        >
        > x.sync(10000000,f1,u8a)
        { rounds: 10000000, f: [Function: f1], costed: 385.277530670166 }
        > x.sync(20000000,f0,u8a)
        { rounds: 20000000, f: [Function: f0], costed: 294.7771701812744 }
        >
        > x.sync(20000000,f1,u8a)
        { rounds: 20000000, f: [Function: f1], costed: 673.4802875518799 }
        >


### getter speed test


        const {sync} = require("../index");

        var ra = ["v0","v1"]

        const get_from_rawa_with_index  = ()=>[ra[0],ra[1]]

        sync(10000000,get_from_rawa_with_index)


        /*
        > sync(10000000,get_from_rawa_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_rawa_with_index],
          costed: 210.45516967773438
        }
        > sync(10000000,get_from_rawa_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_rawa_with_index],
          costed: 211.53196907043457
        }
        > sync(10000000,get_from_rawa_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_rawa_with_index],
          costed: 208.35104370117188
        }
        > sync(10000000,get_from_rawa_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_rawa_with_index],
          costed: 216.23346519470215
        }
        >
        */


        class EA extends Array {
            constructor(v0,v1) {
                super();
                    this.push(v0,v1)
                }
                get v0() {return(this[0])}
                get v1() {return(this[1])}
        }

        var ea   = new EA("v0","v1")

        const get_from_ea_with_index  = ()=>[ea[0],ea[1]]

        sync(10000000,get_from_ea_with_index)

        /*
        > sync(10000000,get_from_ea_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_ea_with_index],
          costed: 202.84191703796387
        }
        > sync(10000000,get_from_ea_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_ea_with_index],
          costed: 215.38772010803223
        }
        > sync(10000000,get_from_ea_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_ea_with_index],
          costed: 214.39294815063477
        }
        > sync(10000000,get_from_ea_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_ea_with_index],
          costed: 210.52841758728027
        }
        >
        */

        const get_from_ea_with_getter = ()=>[ea.v0,ea.v1]
        sync(10000000,get_from_ea_with_getter)
        /*
        > sync(10000000,get_from_ea_with_getter)
        {
          rounds: 10000000,
          f: [Function: get_from_ea_with_getter],
          costed: 208.8599624633789
        }
        > sync(10000000,get_from_ea_with_getter)
        {
          rounds: 10000000,
          f: [Function: get_from_ea_with_getter],
          costed: 199.53731155395508
        }
        > sync(10000000,get_from_ea_with_getter)
        {
          rounds: 10000000,
          f: [Function: get_from_ea_with_getter],
          costed: 205.06519317626953
        }
        > sync(10000000,get_from_ea_with_getter)
        {
          rounds: 10000000,
          f: [Function: get_from_ea_with_getter],
          costed: 209.24454879760742
        }
        >
        */



        var rd   = {v0:"v0",v1:"v1"}

        const get_from_rd = ()=> [rd.v0,rd.v1]

        sync(10000000,get_from_rd)

        /*
        > sync(10000000,get_from_rd)
        {
          rounds: 10000000,
          f: [Function: get_from_rd],
          costed: 201.54963493347168
        }
        > sync(10000000,get_from_rd)
        {
          rounds: 10000000,
          f: [Function: get_from_rd],
          costed: 203.9611873626709
        }
        > sync(10000000,get_from_rd)
        {
          rounds: 10000000,
          f: [Function: get_from_rd],
          costed: 211.65743827819824
        }
        >
        */


        var mp  = new Map(Object.entries(rd));

        const get_from_mp = () =>[mp.get("v0"),mp.get("v1")]


        sync(10000000,get_from_mp)

        /*
        > sync(10000000,get_from_mp)
        {
          rounds: 10000000,
          f: [Function: get_from_mp],
          costed: 431.3168029785156
        }
        > sync(10000000,get_from_mp)
        {
          rounds: 10000000,
          f: [Function: get_from_mp],
          costed: 436.4684009552002
        }
        > sync(10000000,get_from_mp)
        {
          rounds: 10000000,
          f: [Function: get_from_mp],
          costed: 453.76171684265137
        }
        > sync(10000000,get_from_mp)
        {
          rounds: 10000000,
          f: [Function: get_from_mp],
          costed: 470.9776554107666
        }
        >
        */


        class D {
            v0="v0"
            v1="v1"
        }

        var d = new D()

        const get_from_d = ()=> [d.v0,d.v1]
        /*
        > sync(10000000,get_from_d)
        {
          rounds: 10000000,
          f: [Function: get_from_d],
          costed: 201.63967323303223
        }
        > sync(10000000,get_from_d)
        {
          rounds: 10000000,
          f: [Function: get_from_d],
          costed: 200.51382064819336
        }
        > sync(10000000,get_from_d)
        {
          rounds: 10000000,
          f: [Function: get_from_d],
          costed: 201.8022174835205
        }
        > sync(10000000,get_from_d)
        {
          rounds: 10000000,
          f: [Function: get_from_d],
          costed: 228.96243858337402
        }
        >
        */



        class PA extends Array {
            constructor(v0,v1) {
                super();
                this.push(v0,v1)
            }
        }

        Object.defineProperty(PA.prototype,"v0",{get:function(){return(this[0])}})
        Object.defineProperty(PA.prototype,"v1",{get:function(){return(this[1])}})


        var pa = new PA("v0","v1")
        /*
        > pa
        PA(2) [ 'v0', 'v1' ]
        >
        */

        const get_from_pa_with_index   = ()=>[pa[0],pa[1]]
        /*
        > sync(10000000,get_from_pa_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_pa_with_index],
          costed: 207.52319526672363
        }
        > sync(10000000,get_from_pa_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_pa_with_index],
          costed: 212.59967613220215
        }
        > sync(10000000,get_from_pa_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_pa_with_index],
          costed: 211.38087272644043
        }
        > sync(10000000,get_from_pa_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_pa_with_index],
          costed: 222.359037399292
        }
        >
        */
        const get_from_pa_with_getter  = ()=>[pa.v0,pa.v1]

        /*
        > sync(10000000,get_from_pa_with_getter)
        {
          rounds: 10000000,
          f: [Function: get_from_pa_with_getter],
          costed: 207.68007278442383
        }
        > sync(10000000,get_from_pa_with_getter)
        {
          rounds: 10000000,
          f: [Function: get_from_pa_with_getter],
          costed: 208.297456741333
        }
        > sync(10000000,get_from_pa_with_getter)
        {
          rounds: 10000000,
          f: [Function: get_from_pa_with_getter],
          costed: 223.48654747009277
        }
        > sync(10000000,get_from_pa_with_getter)
        {
          rounds: 10000000,
          f: [Function: get_from_pa_with_getter],
          costed: 226.50678253173828
        }
        > sync(10000000,get_from_pa_with_getter)
        {
          rounds: 10000000,
          f: [Function: get_from_pa_with_getter],
          costed: 211.12835502624512
        }
        >
        */

        var a = ["v0","v1"]

        var px = new Proxy(
            a,
            {
                get: function(target, property, receiver) {
                     if(property === "v0") {
                          return(Reflect.get(target,0))
                     } else if(property === "v1") {
                          return(Reflect.get(target,1))
                     } else {
                          return(Reflect.get(target,property))
                     }
                }
            }
        )

        /*
        > px.v0
        'v0'
        > px.v1
        'v1'
        > px[0]
        'v0'
        > px[1]
        'v1'
        >
        */

        const get_from_px_with_index  = ()=>[px[0],px[1]]
        /*
        > sync(10000000,get_from_px_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_px_with_index],
          costed: 6042.160470962524
        }
        > sync(10000000,get_from_px_with_index)
        {
          rounds: 10000000,
          f: [Function: get_from_px_with_index],
          costed: 6012.279012680054
        }
        >

        */

        const get_from_px_with_prop  = ()=>[px.v0,px.v1]
        /*
        > sync(10000000,get_from_px_with_prop)
        {
          rounds: 10000000,
          f: [Function: get_from_px_with_prop],
          costed: 1954.2461643218994
        }
        > sync(10000000,get_from_px_with_prop)
        {
          rounds: 10000000,
          f: [Function: get_from_px_with_prop],
          costed: 1921.415605545044
        }
        > sync(10000000,get_from_px_with_prop)
        {
          rounds: 10000000,
          f: [Function: get_from_px_with_prop],
          costed: 1951.849027633667
        }
        >
        */



### big fixed data length speed test

            const rnd_sen = require("nv-random-sentence");


            var D = {}
            const creat_frag = (D,idx) =>{
                let d = {}
                for(let i=0;i<500000;i++) {
                   let k = rnd_sen.NVN_
                   d[k]  = rnd_sen.NVN_
                       D[k]  = d[k]
                }   
                    fs.writeFileSync(`frag${idx}.json`,JSON.stringify(d))
            }


            for(let idx=0;idx<10;idx++) {
                creat_frag(D,idx)
            }

            TEST# ls -l
            total 275796
            -rw-r--r-- 1 root root 28234445 Oct 19 15:33 frag0.json
            -rw-r--r-- 1 root root 28243940 Oct 19 15:33 frag1.json
            -rw-r--r-- 1 root root 28241764 Oct 19 15:33 frag2.json
            -rw-r--r-- 1 root root 28240741 Oct 19 15:33 frag3.json
            -rw-r--r-- 1 root root 28245468 Oct 19 15:33 frag4.json
            -rw-r--r-- 1 root root 28239630 Oct 19 15:33 frag5.json
            -rw-r--r-- 1 root root 28240529 Oct 19 15:33 frag6.json
            -rw-r--r-- 1 root root 28239675 Oct 19 15:34 frag7.json
            -rw-r--r-- 1 root root 28232199 Oct 19 15:34 frag8.json
            -rw-r--r-- 1 root root 28237992 Oct 19 15:34 frag9.json
            TEST# 


            > Object.keys(D).length
            5000000
            > 

            const len = (D)=>Object.keys(D).length;

            /*
            > sync(10,len,D)
            { rounds: 10, f: [Function: len], costed: 41091.69201660156 }       //計算一個length就需要4秒
            > 
            */

            const get = (k)=>D[k];

            > get('dialyzer_chouse_brill')
            'callboard_imitate_estaminet'
            > 

            > sync(10000000,get,'dialyzer_chouse_brill')
            { rounds: 10000000, f: [Function: get], costed: 253.25781440734863 }
            > 

            .exit



            var entries = Array(5000000);
            for(let i=0;i<5000000;i++) {
                entries[i] = ['','']
            }

            var c = 0
            for(let idx=0;idx<10;idx++) {
                let frag = JSON.parse(fs.readFileSync(`frag${idx}.json`).toString());
                    for(let k in frag) {
                         entries[c] = [k,frag[k]]
                             c=c+1;
                    }
            }

            > entries.length                                                    
            5000000



            const len = (es)=>es.length;
            > sync(10,len,entries)
            { rounds: 10, f: [Function: len], costed: 0.028247833251953125 }    //計算length基本不需要時間
            > 





            > entries[2500000]
            [ 'dialyzer_chouse_brill', 'callboard_imitate_estaminet' ]
            > 

            const get = (k)=> {
                for(let i=0;i<5000000;i++) {
                        if(entries[i][0] === k) {
                                return(entries[i][1])
                            }
                    }
            }

            > get('dialyzer_chouse_brill')
            'callboard_imitate_estaminet'
            > 

            > sync(10,get,'dialyzer_chouse_brill')
            { rounds: 10, f: [Function: get], costed: 263.88294410705566 }             //耗時不可接受 單次需要25毫秒
            > 

            .exit 




            var mp = new Map();
            for(let idx=0;idx<10;idx++) {
                let frag = JSON.parse(fs.readFileSync(`frag${idx}.json`).toString());
                    for(let k in frag) {
                         mp.set(k,frag[k])
                    }
            }

            const len = (mp)=>mp.size;
            > sync(10,len,mp)
            { rounds: 10, f: [Function: len], costed: 0.009061813354492188 }       //計算length基本不需要時間
            > 

            const get = (k)=> {
                 return(mp.get(k))
            }
            > get('dialyzer_chouse_brill')
            'callboard_imitate_estaminet'
            > 

            > sync(10000000,get,'dialyzer_chouse_brill')
            { rounds: 10000000, f: [Function: get], costed: 390.18969535827637 }          //1千萬次調用get 400ms，單次耗時忽略不記
            > 


            .exit


            var entries = Array(5000000);
            for(let i=0;i<5000000;i++) {
                entries[i] = ['','']
            }

            var c = 0
            for(let idx=0;idx<10;idx++) {
                let frag = JSON.parse(fs.readFileSync(`frag${idx}.json`).toString());
                    for(let k in frag) {
                         entries[c] = [k,frag[k]]
                             entries[k] = frag[k]
                             c=c+1;
                    }
            }



### ary\_destructor  IF you sure the right-hand IS a array with the default iterator-implement


		var PAIR_WITH_ARY_TYPE_MARK = [100,200];

		var FST;
		var SND;


		var f0 = () => {
		    [FST,SND] = PAIR_WITH_ARY_TYPE_MARK;
		}

		var f1 = () => {
		    FST = PAIR_WITH_ARY_TYPE_MARK[0];
		    SND = PAIR_WITH_ARY_TYPE_MARK[1];
		}


		console.log(sync(100000000,f0))
		console.log(sync(100000000,f1))

		/*
		> console.log(sync(100000000,f0))
		{ rounds: 100000000, f: [Function: f0], costed: 1398.456472992897 }

		> console.log(sync(100000000,f1))
		{ rounds: 100000000, f: [Function: f1], costed: 1185.4215869903564 }
		   //---  this is because , the destrotor need to call iterator
		*/


		var ary = [1,2,3,4,5,6];
		var FST;
		var SND;
		var TRD;
		var QUA;
		var PNT;
		var HEX;

		var f0 = () => {[FST,SND,TRD,QUA,PNT,HEX] = ary;}
		var f1 = () => {
		    FST = ary[0];
		    SND = ary[1];
		    TRD = ary[2];
		    QUA = ary[3];
		    PNT = ary[4];
		    HEX = ary[5];
		}


		console.log(sync(100000000,f0))
		console.log(sync(100000000,f1))

		/*
		{ rounds: 100000000, f: [Function: f0], costed: 1607.1520830392838 }
		{ rounds: 100000000, f: [Function: f1], costed: 897.0708520412445 }  
		   // 被解構的結構越複雜 這個差異越明顯

		*/


###  for-loop-on-64k-string


		10000
		{
		  rounds: 65536,
		  f: [Function: using_char_code_at],
		  costed: 5297.109977960587
		}
		{
		  rounds: 65536,
		  f: [Function: using_many_if],
		  costed: 6676.725782871246
		}
		{
		  rounds: 65536,
		  f: [Function: using_many_case],
		  costed: 6721.5950429439545
		}
		{ rounds: 65536, f: [Function: using_tbl], costed: 18946.27202105522 }

### BigUInt64Array

		const make_using_u16a = (dt=new Date) => {
		    let mts = dt.getTime();
		    let r0  = mts %   4294967296;
		    let q0  = (mts - r0)/4294967296;
		    let r1  = r0 % (65536);
		    let  q1 = (r0-r1) /65536;
			let u16a = new Uint16Array(4);
			u16a[3] = 0x7ffa;
		    u16a[2]=q0;
		    u16a[1]=q1;
		    u16a[0]=r1;
		    return(new Uint8Array(u16a.buffer))
		}
		const make_using_u32a = (dt=new Date) => {
		    let mts = dt.getTime();
		    let r0  = mts %   4294967296;
		    let q0  = (mts - r0)/4294967296;
			let u32a = new Uint32Array(2);
		    u32a[1] = 0x7ffa0000 | q0;
			u32a[0] = r0 ;
		    return(new Uint8Array(u32a.buffer))
		}
		const make_using_u64a = (dt=new Date) => {
		    let mts = dt.getTime();
		    let u64a = new BigUint64Array(1);
		    u64a[0]        = BigInt(mts);
		    let u16a = new Uint16Array(u64a.buffer);
		    u16a[3]  = 0x7ffa;
		    return(new Uint8Array(u64a.buffer))
		}


		const {sync} = require("nv-facutil-simple-test");


		console.log(sync(10000000,make_using_u16a))
		console.log(sync(10000000,make_using_u32a))
		console.log(sync(10000000,make_using_u64a))


		/*
		{
		  rounds: 10000000,
		  f: [Function: make_using_u16a],
		  costed: 6253.4816637039185
		}
		{
		  rounds: 10000000,
		  f: [Function: make_using_u32a],
		  costed: 6245.351312637329
		}
		{
		  rounds: 10000000,
		  f: [Function: make_using_u64a],
		  costed: 7142.871691703796
		}
		*/

### updt

		class V {
		    _v =888
			set v(val) { console.log("setter enter");this._v=val;    console.log("setter exit");} 
			get v()    { console.log("getter enter");return(this._v);}
		}

		/*


		> ++v.v
		getter enter
		setter enter
		setter exit
		889
		> v
		V { _v: 889 }
		> 
		> v.v++
		getter enter
		setter enter
		setter exit
		889
		> v
		V { _v: 890 }

		> v.v = 0
		setter enter
		setter exit
		0

		*/

		/*
		> (1+v.v++)
		getter enter
		setter enter
		setter exit
		1
		> v.v = 0
		setter enter
		setter exit
		0
		> 
		*/

		/*
		> (1+ ++v.v)
		getter enter
		setter enter
		setter exit
		2
		> (((v.v)))++
		getter enter
		setter enter
		setter exit
		1
		> 
		*/


				class V1 {
                    _v =888
                        set v(val) { this._v=val;}
                        get v()    { return(this._v);}
                }

                var v  = 888;
                var v1 = new V1();
				var v2 = {v:888}

                var f0 = ()=>++v;
                var f1 = ()=>++v1.v;
				var f2 = ()=>++v2.v;

                console.log(sync(1000000000,f0))
				//{ rounds: 1000000000, f: [Function: f0], costed: 12089.421229362488 }
                console.log(sync(1000000000,f1))
				//{ rounds: 1000000000, f: [Function: f1], costed: 12359.855974197388 }
				console.log(sync(1000000000,f2))
				//{ rounds: 1000000000, f: [Function: f2], costed: 7612.168771743774 }
                /*
                   > v
                   1000000888
                   > v1
                   V1 { _v: 1000000888 }
                   > v2
                   { v: 1000000888 }
                   > 
				*/
				
				console.log(sync(1000000000,f0))
				//{ rounds: 1000000000, f: [Function: f0], costed: 7590.657766342163 }
				console.log(sync(1000000000,f1))
				//{ rounds: 1000000000, f: [Function: f1], costed: 7561.783745765686 }
				console.log(sync(1000000000,f2))
				//{ rounds: 1000000000, f: [Function: f2], costed: 11850.260585784912 }
				
				console.log(sync(1000000000,f0))
				//{ rounds: 1000000000, f: [Function: f0], costed: 19522.066294670105 }
				console.log(sync(1000000000,f1))
				//{ rounds: 1000000000, f: [Function: f1], costed: 9180.399136543274 }
				console.log(sync(1000000000,f2))
				//{ rounds: 1000000000, f: [Function: f2], costed: 13682.482397079468 }
				
				console.log(sync(1000000000,f0))
				console.log(sync(1000000000,f1))
				console.log(sync(1000000000,f2))
				
                >                               console.log(sync(1000000000,f0))
                
                { rounds: 1000000000, f: [Function: f0], costed: 28632.76893234253 }
                >                               console.log(sync(1000000000,f1))
                
                { rounds: 1000000000, f: [Function: f1], costed: 9588.860234260559 }
                >                               console.log(sync(1000000000,f2))
                
                { rounds: 1000000000, f: [Function: f2], costed: 14136.279594421387 }



LICENSE
=======
- ISC

---
_Source: https://npm.io/package/nv-facutil-simple-test · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
