| <!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> |