blob: f16cbe797818392de0856731873cfb76bbb6bd12 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2016 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/tracing/base/running_statistics.html">
<link rel="import" href="/tracing/base/statistics.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
var RunningStatistics = tr.b.RunningStatistics;
var Statistics = tr.b.Statistics;
function run(data) {
var running = new RunningStatistics();
data.forEach(x => running.add(x));
return running;
}
test('sum', function() {
var data;
data = [];
assert.closeTo(Statistics.sum(data), run(data).sum, 1e-6);
data = [1];
assert.closeTo(Statistics.sum(data), run(data).sum, 1e-6);
data = [1, 2, 3];
assert.closeTo(Statistics.sum(data), run(data).sum, 1e-6);
data = [2, 4, 4, 2];
assert.closeTo(Statistics.sum(data), run(data).sum, 1e-6);
data = [Infinity, Infinity, Infinity, 4, 4, Infinity, 1];
assert.equal(Statistics.sum(data), run(data).sum, Infinity);
data = [-Infinity, -Infinity, 2, -Infinity, 5, -Infinity];
assert.equal(Statistics.sum(data), run(data).sum, -Infinity);
});
test('min', function() {
var data;
data = [];
assert.equal(Statistics.min(data), run(data).min);
data = [1];
assert.equal(Statistics.min(data), run(data).min);
data = [1, 2, 3];
assert.equal(Statistics.min(data), run(data).min);
data = [2, 4, 4, 2];
assert.equal(Statistics.min(data), run(data).min);
});
test('max', function() {
var data;
data = [];
assert.equal(Statistics.max(data), run(data).max);
data = [1];
assert.equal(Statistics.max(data), run(data).max);
data = [1, 2, 3];
assert.equal(Statistics.max(data), run(data).max);
data = [2, 4, 4, 2];
assert.equal(Statistics.max(data), run(data).max);
});
test('mean', function() {
var data;
data = [];
assert.equal(Statistics.mean(data), run(data).mean);
data = [1];
assert.equal(Statistics.mean(data), run(data).mean);
data = [1, 2, 3];
assert.closeTo(Statistics.mean(data), run(data).mean, 1e-6);
data = [2, 4, 4, 2];
assert.closeTo(Statistics.mean(data), run(data).mean, 1e-6);
data = [Infinity, Infinity, Infinity, 4, 4, Infinity, 1];
assert.equal(Statistics.mean(data), run(data).mean, Infinity);
data = [-Infinity, -Infinity, 2, -Infinity, 5, -Infinity];
assert.equal(Statistics.mean(data), run(data).mean, -Infinity);
});
test('geometricMean', function() {
var data;
data = [];
assert.equal(Statistics.geometricMean(data), run(data).geometricMean);
data = [-1];
assert.equal(Statistics.geometricMean(data), run(data).geometricMean);
data = [1];
assert.equal(Statistics.geometricMean(data), run(data).geometricMean);
data = [1, 2, 3];
assert.closeTo(Statistics.geometricMean(data),
run(data).geometricMean, 1e-6);
data = [2, 4, 4, 2];
assert.closeTo(Statistics.geometricMean(data),
run(data).geometricMean, 1e-6);
});
test('variance', function() {
var data;
data = [];
assert.equal(Statistics.variance(data), run(data).variance);
data = [1];
assert.equal(Statistics.variance(data), run(data).variance);
data = [1, 2, 3];
assert.closeTo(Statistics.variance(data), run(data).variance, 1e-6);
data = [2, 4, 4, 2];
assert.closeTo(Statistics.variance(data), run(data).variance, 1e-6);
});
test('stddev', function() {
var data;
data = [];
assert.equal(Statistics.stddev(data), run(data).stddev);
data = [1];
assert.equal(Statistics.stddev(data), run(data).stddev);
data = [1, 2, 3];
assert.closeTo(Statistics.stddev(data), run(data).stddev, 1e-6);
data = [2, 4, 4, 2];
assert.closeTo(Statistics.stddev(data), run(data).stddev, 1e-6);
});
test('merge', function() {
var data1, data2, data, stats;
data1 = [];
data2 = [];
data = data1.concat(data2);
stats = run(data1).merge(run(data2));
assert.equal(Statistics.sum(data), stats.sum);
assert.equal(Statistics.min(data), stats.min);
assert.equal(Statistics.max(data), stats.max);
assert.equal(Statistics.mean(data), stats.mean);
assert.equal(Statistics.variance(data), stats.variance);
assert.equal(Statistics.stddev(data), stats.stddev);
assert.equal(Statistics.geometricMean(data), stats.geometricMean);
data1 = [];
data2 = [1, 2, 3];
data = data1.concat(data2);
stats = run(data1).merge(run(data2));
assert.equal(Statistics.sum(data), stats.sum);
assert.equal(Statistics.min(data), stats.min);
assert.equal(Statistics.max(data), stats.max);
assert.equal(Statistics.mean(data), stats.mean);
assert.closeTo(Statistics.variance(data), stats.variance, 1e-6);
assert.closeTo(Statistics.stddev(data), stats.stddev, 1e-6);
assert.closeTo(Statistics.geometricMean(data), stats.geometricMean, 1e-6);
data1 = [1, 2, 3];
data2 = [];
data = data1.concat(data2);
stats = run(data1).merge(run(data2));
assert.equal(Statistics.sum(data), stats.sum);
assert.equal(Statistics.min(data), stats.min);
assert.equal(Statistics.max(data), stats.max);
assert.equal(Statistics.mean(data), stats.mean);
assert.closeTo(Statistics.variance(data), stats.variance, 1e-6);
assert.closeTo(Statistics.stddev(data), stats.stddev, 1e-6);
assert.closeTo(Statistics.geometricMean(data), stats.geometricMean, 1e-6);
data1 = [1, 2, 3];
data2 = [10, 20, 100];
data = data1.concat(data2);
stats = run(data1).merge(run(data2));
assert.equal(Statistics.sum(data), stats.sum);
assert.equal(Statistics.min(data), stats.min);
assert.equal(Statistics.max(data), stats.max);
assert.equal(Statistics.mean(data), stats.mean);
assert.closeTo(Statistics.variance(data), stats.variance, 1e-6);
assert.closeTo(Statistics.stddev(data), stats.stddev, 1e-6);
assert.closeTo(Statistics.geometricMean(data), stats.geometricMean, 1e-6);
data1 = [1, 1, 1, 1, 1];
data2 = [10, 20, 10, 40];
data = data1.concat(data2);
stats = run(data1).merge(run(data2));
assert.equal(Statistics.sum(data), stats.sum);
assert.equal(Statistics.min(data), stats.min);
assert.equal(Statistics.max(data), stats.max);
assert.equal(Statistics.mean(data), stats.mean);
assert.closeTo(Statistics.variance(data), stats.variance, 1e-6);
assert.closeTo(Statistics.stddev(data), stats.stddev, 1e-6);
assert.closeTo(Statistics.geometricMean(data), stats.geometricMean, 1e-6);
});
test('serialization', function() {
var data = [1, 2, 3];
var dict = run(data).asDict();
var cloneDict = RunningStatistics.fromDict(dict).asDict();
for (var field in dict)
assert.closeTo(dict[field], cloneDict[field], 1e-6);
});
});
</script>