time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

main.js (3163B)


      1 /**
      2 * @license Apache-2.0
      3 *
      4 * Copyright (c) 2018 The Stdlib Authors.
      5 *
      6 * Licensed under the Apache License, Version 2.0 (the "License");
      7 * you may not use this file except in compliance with the License.
      8 * You may obtain a copy of the License at
      9 *
     10 *    http://www.apache.org/licenses/LICENSE-2.0
     11 *
     12 * Unless required by applicable law or agreed to in writing, software
     13 * distributed under the License is distributed on an "AS IS" BASIS,
     14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15 * See the License for the specific language governing permissions and
     16 * limitations under the License.
     17 */
     18 
     19 'use strict';
     20 
     21 // MODULES //
     22 
     23 var incrcount = require( './../../../incr/count' );
     24 var incrmax = require( './../../../incr/max' );
     25 var incrmin = require( './../../../incr/min' );
     26 var incrrange = require( './../../../incr/range' );
     27 var incrmidrange = require( './../../../incr/midrange' );
     28 var incrsum = require( './../../../incr/sum' );
     29 var incrmean = require( './../../../incr/mean' );
     30 var incrvariance = require( './../../../incr/variance' );
     31 var incrstdev = require( './../../../incr/stdev' );
     32 var incrskewness = require( './../../../incr/skewness' );
     33 var incrkurtosis = require( './../../../incr/kurtosis' );
     34 
     35 
     36 // MAIN //
     37 
     38 /**
     39 * Returns an accumulator function which incrementally computes a statistical summary.
     40 *
     41 * @returns {Function} accumulator function
     42 *
     43 * @example
     44 * var accumulator = incrsummary();
     45 *
     46 * var summary = accumulator();
     47 * // returns {}
     48 *
     49 * summary = accumulator( 2.0 );
     50 * // returns {...}
     51 *
     52 * summary = accumulator( -5.0 );
     53 * // returns {...}
     54 *
     55 * summary = accumulator();
     56 * // returns {...}
     57 */
     58 function incrsummary() {
     59 	var midrange;
     60 	var variance;
     61 	var skewness;
     62 	var kurtosis;
     63 	var summary;
     64 	var count;
     65 	var range;
     66 	var stdev;
     67 	var mean;
     68 	var max;
     69 	var min;
     70 	var sum;
     71 
     72 	// Incremental count:
     73 	count = incrcount();
     74 
     75 	// Sum:
     76 	sum = incrsum();
     77 
     78 	// Sample mean:
     79 	mean = incrmean();
     80 
     81 	// Unbiased sample variance:
     82 	variance = incrvariance();
     83 
     84 	// Corrected sample standard deviation:
     85 	stdev = incrstdev();
     86 
     87 	// Corrected sample skewness:
     88 	skewness = incrskewness();
     89 
     90 	// Corrected excess sample kurtosis:
     91 	kurtosis = incrkurtosis();
     92 
     93 	// Maximum value:
     94 	max = incrmax();
     95 
     96 	// Minimum value:
     97 	min = incrmin();
     98 
     99 	// Range (i.e., max-min):
    100 	range = incrrange();
    101 
    102 	// Mid-range:
    103 	midrange = incrmidrange();
    104 
    105 	// Initial an object for tracking state:
    106 	summary = {};
    107 
    108 	return accumulator;
    109 
    110 	/**
    111 	* If provided a value, the accumulator function returns an updated summary. If not provided a value, the accumulator function returns the current summary.
    112 	*
    113 	* @private
    114 	* @param {number} [x] - new value
    115 	* @returns {Object} summary
    116 	*/
    117 	function accumulator( x ) {
    118 		if ( arguments.length === 0 ) {
    119 			return summary;
    120 		}
    121 		summary.count = count( x );
    122 		summary.max = max( x );
    123 		summary.min = min( x );
    124 		summary.range = range( x );
    125 		summary.midrange = midrange( x );
    126 		summary.sum = sum( x );
    127 		summary.mean = mean( x );
    128 		summary.variance = variance( x );
    129 		summary.stdev = stdev( x );
    130 		summary.skewness = skewness( x );
    131 		summary.kurtosis = kurtosis( x );
    132 		return summary;
    133 	}
    134 }
    135 
    136 
    137 // EXPORTS //
    138 
    139 module.exports = incrsummary;