UNPKG

react-native-benchmark

Version:

React Native benchmarking library inspired by benchmark.js

110 lines (109 loc) 3.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Stats = void 0; /** * T-Distribution two-tailed critical values for 95% confidence. * * For more info see http://www.itl.nist.gov/div898/handbook/eda/section3/eda3672.htm. */ const tTable = { '1': 12.706, '2': 4.303, '3': 3.182, '4': 2.776, '5': 2.571, '6': 2.447, '7': 2.365, '8': 2.306, '9': 2.262, '10': 2.228, '11': 2.201, '12': 2.179, '13': 2.16, '14': 2.145, '15': 2.131, '16': 2.12, '17': 2.11, '18': 2.101, '19': 2.093, '20': 2.086, '21': 2.08, '22': 2.074, '23': 2.069, '24': 2.064, '25': 2.06, '26': 2.056, '27': 2.052, '28': 2.048, '29': 2.045, '30': 2.042, 'infinity': 1.96 }; /** * An object of stats including mean, margin or error, and standard deviation. * @link inspired by https://github.com/bestiejs/benchmark.js/blob/42f3b732bac3640eddb3ae5f50e445f3141016fd/benchmark.js#L1911-L1927 */ class Stats { constructor() { this.sample = []; } /** * The margin of error. * */ get moe() { // Compute the degrees of freedom. const df = this.sample.length - 1; // Compute the critical value. const critical = tTable[Math.round(df) || 1] || tTable.infinity; // Compute the margin of error. return this.sem * critical; } ; /** * The relative margin of error (expressed as a percentage of the mean). * */ get rme() { // Compute the relative margin of error. return (this.moe / this.mean) * 100 || 0; } ; /** * The standard error of the mean. * */ get sem() { // Compute the standard error of the mean (a.k.a. the standard deviation of the sampling distribution of the sample mean). return this.deviation / Math.sqrt(this.sample.length); } ; /** * The sample standard deviation. * */ get deviation() { // Compute the sample standard deviation (estimate of the population standard deviation). return Math.sqrt(this.variance); } ; /** * The sample arithmetic mean (secs). * */ get mean() { // Compute the sample mean (estimate of the population mean). return this.sample.reduce((sum, x) => sum + x) / this.sample.length || 0; } ; /** * The sample variance. * */ get variance() { // Compute the sample variance (estimate of the population variance). return this.sample.reduce((sum, x) => sum + Math.pow(x - this.mean, 2), 0) / this.sample.length || 0; } ; toString() { const { moe, mean, rme, deviation, variance, sem, sample } = this; const obj = { moe, mean, rme, deviation, variance, sem, sample }; return `Stats: ${JSON.stringify(obj, null, 2)}`; } toJSON() { const { moe, mean, rme, deviation, variance, sem, sample } = this; return { moe, mean, rme, deviation, variance, sem, sample }; } } exports.Stats = Stats;