Narcissistic Preening Monarch

    wedgetail
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.0 • Public • Published

    Wedgetail

    Performance test your functions

    View on npm npm downloads Dependencies Build Status codecov NSP StatusKnown Vulnerabilities

    Wedgetail is a small performance tesing library that runs on NodeJS 9.5.0 and above. It's designed to be used inside your tests, to ensure your desired function is always as fast as you want it to be.

    Getting Started

    Add wedgetail to your devDependencies.

    yarn add -D wedgetail

    npm install --save-dev wedgetail

    Wedgetail can be easily inserted into your tests. It's reccomended you create a seperate test just for performance, as you cannot use the result of the function you are testing.

    The function you are testing can also be your whole test.

    Usage

    To use wedgetail you need to call in inside the callback.

    // javascript
    import test from "ava";
     
    import { timeExecution } from "wedgetail";
     
    test("Can time a function", async t => {
        // This object contains a definition of the threshold
        // at which your function is too slow.
        // All timings are in milliseconds(ms)
        const allowedPerformance = {
            average: 0.001,
            high: 1,
            low: 0.001,
            percentiles: {
                ninetieth: 0.0004,
                ninetyFifth: 0.001,
                ninetyNinth: 0.001,
                tenth: 0.0005,
            },
        };
     
        const timings = await timeExecution({
            expectedTimings: allowedPerformance,
            numberOfExecutions: 5000,
            // By using an anonymous arrow function you should
            // be able to maintain the correct scope
            // of `this`.
            callback: () => {
                // Your function goes here
                Math.sqrt(Math.random());
            },
        });
        // You can use any testing or assertion library.
        // if the timings are below your expected values then
        // `timings.results.passed` will be `true`
        t.true(timings.results.passed, "timings failed");
    });
    // typescript
    import test from "ava";
     
    import { timeExecution, Timings, TimedPerformance } from "wedgetail";
     
    test("Can time a function", async t => {
        // This object contains a definition of the threshold
        // at which your function is too slow.
        // All timings are in milliseconds(ms)
        const allowedPerformance: Timings = {
            average: 0.001,
            high: 1,
            low: 0.001,
            percentiles: {
                ninetieth: 0.0004,
                ninetyFifth: 0.001,
                ninetyNinth: 0.001,
                tenth: 0.0005,
            },
        };
     
        const timings: TimedPerformance = await timeExecution({
            expectedTimings: allowedPerformance,
            numberOfExecutions: 5000,
            // By using an anonymous arrow function you should
            // be able to maintain the correct scope
            // of `this`.
            callback: () => {
                // Your function goes here
                Math.sqrt(Math.random());
            },
        });
        // You can use any testing or assertion library.
        // if the timings are below your expected values then
        // `timings.results.passed` will be `true`
        t.true(timings.results.passed, "timings failed");
    });

    You will need to play around with numberOfExecutions to find the right number. If your function is slow (2ms+) you may want to use a number less than 5000.

    Running the tests

    Use yarn tests or npm run tests.

    Tests are written with ava, and we would strongly like tests with any new functionality.

    Contributing

    Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

    Versioning

    We use SemVer for versioning. For the versions available, see the tags on this repository.

    Authors

    License

    This project is licensed under the MIT License - see the LICENSE.md file for details

    Install

    npm i wedgetail

    DownloadsWeekly Downloads

    22

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    164 kB

    Total Files

    17

    Last publish

    Collaborators

    • ojkelly