JSFiddle - React, Tailwind, and code Playground
Simple LCG Duplication Test with Large Dictionary Indexing
by skibulk
HTML
<p><button id="toggleButton">Start/Stop</button></p>
<p>Dictionary Volumes: <span id="volumeCount"></span></p>
<p>Dictionary Keys: <span id="keyCount"></span></p>
<p>Duplicate Keys: <span id="duplicateCount"></span></p>
JavaScript
console.clear();
var toggleButton = document.getElementById("toggleButton");
var volumeCount = document.getElementById("volumeCount");
var keyCount = document.getElementById("keyCount");
var duplicateCount = document.getElementById("duplicateCount");
var stop = true;
var dict = new BigDict();
var seed = 2100483647;
var duplicates = 0;
toggleButton.onclick = function() {
if (stop) {
stop = false;
runner = setTimeout(run, 100);
} else {
stop = true;
}
}
function run() {
for (var i = 0; i < 1e6; i++) {
// https://gist.github.com/blixt/f17b47c62508be59987b
// 1993 Park-Miller LCC
seed = seed * 48271 % 2147483647;
if (dict.get(seed)) duplicates++;
dict.set(seed, true);
}
volumeCount.innerHTML = dict.volumes;
keyCount.innerHTML = ((dict.volumes - 1) * (dict.keyLimit + 1)) + dict.keyCount;
duplicateCount.innerHTML = duplicates;
if (!stop) setTimeout(run, 100);
}
// Utils --------------------------
function BigDict() {
var dict = [];
dict.push(dict.current = {});
dict.volumes = 1;
dict.keyCount = 0;
dict.keyLimit = 8e6 - 1;
dict.set = function(key, value) {
dict.current[key] = value;
if (dict.keyCount++ == dict.keyLimit) {
dict.push(dict.current = {});
dict.volumes++;
dict.keyCount = 0;
}
}
dict.get = function(key) {
for (var i = 0; i < dict.length; i++) {
var value = dict[i][key];
return value !== undefined ? value : undefined;
}
}
return dict;
}