1
0
Fork 0
knot-resolver/debian/missing-sources/epoch/tests/render/js/data.js
Daniel Baumann 36534beaa3
Adding debian version 5.7.5-1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-21 13:56:18 +02:00

210 lines
5.5 KiB
JavaScript

(function() {
// Quick data generator
Data = function() {
this.layers = []
};
Data.prototype.add = function(fn) {
fn = fn ? fn : function(x) { return x; };
this.layers.push(fn);
return this;
};
Data.prototype.get = function(domain, step) {
domain = domain ? domain : [0, 10];
step = step ? step : 1;
var data = []
for (var i = 0; i < this.layers.length; i++) {
layer = { label: String.fromCharCode(i + 65), values: [] };
for (var x = domain[0]; x < domain[1]; x += step) {
layer.values.push({ x: x, y: this.layers[i](x) });
}
data.push(layer);
}
return data;
};
Data.prototype.random = function(entries, domain, range) {
entries = entries ? entries : 50;
domain = domain ? domain : [0, 100];
range = range ? range : [0, 100];
var values = [];
for (var i = 0; i < entries; i++) {
var x = (domain[1] - domain[0]) * Math.random() + domain[0],
y = (range[1] - range[0]) * Math.random() + range[1];
values.push({ x: x, y: y });
}
return [{ label: 'A', values: values }];
};
Data.prototype.multiRandom = function(numSeries, entries, domain, range) {
numSeries = numSeries ? numSeries : 3;
entries = entries ? entries : 50;
domain = domain ? domain : [0, 100];
range = range ? range : [0, 100];
var data = [];
for (var j = 0; j < numSeries; j++) {
var layer = { label: String.fromCharCode(65 + j), values: [] };
for (var i = 0; i < entries; i++) {
var x = (domain[1] - domain[0]) * Math.random() + domain[0],
y = (range[1] - range[0]) * Math.random() + range[1];
layer.values.push({ x: x, y: y });
}
data.push(layer);
}
return data;
};
window.data = function() { return new Data(); };
// Quick real-time data generator
Time = function() {
Data.call(this);
};
Time.prototype = new Data()
Time.prototype.get = function(domain, step) {
var data = Data.prototype.get.apply(this, arguments),
time = parseInt(new Date().getTime() / 1000);
for (var i = 0; i < data[0].values.length; i++) {
for (var j = 0; j < this.layers.length; j++) {
delete data[j].values[i].x;
data[j].values[i].time = time + i;
}
}
this.currentTime = time;
this.lastX = domain[1];
return data;
};
Time.prototype.next = function(step) {
this.currentTime++;
this.lastX += (step ? step : 1);
var data = [];
for (var j = 0; j < this.layers.length; j++) {
data.push({ time: this.currentTime, y: this.layers[j](this.lastX) })
}
return data;
}
window.time = function() { return new Time(); };
window.nextTime = (function() {
var currentTime = parseInt(new Date().getTime() / 1000);
return function() { return currentTime++; }
})();
/*
* Normal distribution random histogram data generator.
*/
var NormalData = function(layers) {
this.layers = layers;
this.timestamp = ((new Date()).getTime() / 1000)|0;
};
var normal = function() {
var U = Math.random(),
V = Math.random();
return Math.sqrt(-2*Math.log(U)) * Math.cos(2*Math.PI*V);
};
NormalData.prototype.sample = function() {
return parseInt(normal() * 12.5 + 50);
}
NormalData.prototype.rand = function() {
var histogram = {};
for (var i = 0; i < 1000; i ++) {
var r = this.sample();
if (!histogram[r]) {
histogram[r] = 1;
}
else {
histogram[r]++;
}
}
return histogram;
};
NormalData.prototype.history = function(entries) {
if (typeof(entries) != 'number' || !entries) {
entries = 60;
}
var history = [];
for (var k = 0; k < this.layers; k++) {
history.push({ label: String.fromCharCode(65+k), values: [] });
}
for (var i = 0; i < entries; i++) {
for (var j = 0; j < this.layers; j++) {
history[j].values.push({time: this.timestamp, histogram: this.rand()});
}
this.timestamp++;
}
return history;
};
NormalData.prototype.next = function() {
var entry = [];
for (var i = 0; i < this.layers; i++) {
entry.push({ time: this.timestamp, histogram: this.rand() });
}
this.timestamp++;
return entry;
}
window.NormalData = NormalData;
/*
* Beta distribution histogram data generator.
*/
var BetaData = function(alpha, beta, layers) {
this.alpha = alpha;
this.beta = beta;
this.layers = layers;
this.timestamp = ((new Date()).getTime() / 1000)|0;
};
BetaData.prototype = new NormalData();
BetaData.prototype.sample = function() {
var X = 0,
Y = 0;
for (var j = 1; j <= this.alpha; j++)
X += -Math.log(1 - Math.random());
for (var j = 1; j <= this.beta; j++)
Y += -Math.log(1 - Math.random());
return parseInt(100 * X / (X + Y));
}
window.BetaData = BetaData;
})();