Generate random strings (v2)

Revision 2 of this benchmark created on


Setup

let uint8a = new Uint8Array(10);
let uint16a = new Uint16Array(6);
let uint32a = new Uint32Array(3);
let alph = "0123456789abcdefghijklmnopqrstuvwxyz";

let alph2 = [];
for (let i = 0; i < alph.length; i++) {
	for (let j = 0; j < alph.length; j++) {
		alph2.push(alph[i] + alph[j]);
	}
}
let result = "";

Test runner

Ready to run.

Testing in
TestOps/sec
crypto (uint8)
crypto.getRandomValues(uint8a);

let remain = (uint8a[0] >>> 5)
  | ((uint8a[1] & 0xe0) >>> 2)
  | ((uint8a[2] & 0xe0) << 1)
  | ((uint8a[3] & 0xe0) << 4)
  | ((uint8a[4] & 0xe0) << 7)
  | ((uint8a[5] & 0xe0) << 10)
  | ((uint8a[6] & 0xe0) << 13)
  | ((uint8a[7] & 0xe0) << 16)
  | ((uint8a[8] & 0xe0) << 19)
  | ((uint8a[9] & 0xe0) << 21);

result = alph[uint8a[0] & 0x1f]
+ alph[uint8a[1] & 0x1f]
+ alph[uint8a[2] & 0x1f]
+ alph[uint8a[3] & 0x1f]
+ alph[uint8a[4] & 0x1f]
+ alph[uint8a[5] & 0x1f]
+ alph[uint8a[6] & 0x1f]
+ alph[uint8a[7] & 0x1f]
+ alph[uint8a[8] & 0x1f]
+ alph[uint8a[9] & 0x1f]
+ alph[remain & 0x1f]
+ alph[(remain >>> 5) & 0x1f]
+ alph[(remain >>> 10) & 0x1f]
+ alph[(remain >>> 15) & 0x1f]
+ alph[(remain >>> 20) & 0x1f]
+ alph[(remain >>> 25) & 0x1f];




ready
crypto (uint16)
crypto.getRandomValues(uint16a);

result = alph[uint16a[0] & 0x1f]
+ alph[(uint16a[0] >>> 5) & 0x1f]
+ alph[uint16a[0] >>> 11]
+ alph[uint16a[1] & 0x1f]
+ alph[(uint16a[1] >>> 5) & 0x1f]
+ alph[uint16a[1] >>> 11]
+ alph[uint16a[2] & 0x1f]
+ alph[(uint16a[2] >>> 5) & 0x1f]
+ alph[uint16a[2] >>> 11]
+ alph[uint16a[3] & 0x1f]
+ alph[(uint16a[3] >>> 5) & 0x1f]
+ alph[uint16a[3] >>> 11]
+ alph[uint16a[4] & 0x1f]
+ alph[(uint16a[4] >>> 5) & 0x1f]
+ alph[uint16a[4] >>> 11]
+ alph[uint16a[5] & 0x1f];
ready
crypto (uint32)
crypto.getRandomValues(uint32a)

result = alph[uint32a[0] & 0x1f]
+ alph[(uint32a[0] >>> 5) & 0x1f]
+ alph[(uint32a[0] >>> 10) & 0x1f]
+ alph[(uint32a[0] >>> 15) & 0x1f]
+ alph[(uint32a[0] >>> 20) & 0x1f]
+ alph[uint32a[0] >>> 27]
+ alph[uint32a[1] & 0x1f]
+ alph[(uint32a[1] >>> 5) & 0x1f]
+ alph[(uint32a[1] >>> 10) & 0x1f]
+ alph[(uint32a[1] >>> 15) & 0x1f]
+ alph[(uint32a[1] >>> 20) & 0x1f]
+ alph[uint32a[1] >>> 27]
+ alph[uint32a[2] & 0x1f]
+ alph[(uint32a[2] >>> 5) & 0x1f]
+ alph[uint32a[2] >>> 27]
ready
bigint
crypto.getRandomValues(uint8a);

let v1 = 
  uint8a[0]
  + uint8a[1] * 256
  + uint8a[2] * 65536
  + uint8a[3] * 16777216
  + uint8a[4] * 4294967296;

let v2 =
  uint8a[5]
  + uint8a[6] * 256
  + uint8a[7] * 65536
  + uint8a[8] * 16777216
  + uint8a[9] * 4294967296;


result = alph2[v1 & 0x3ff]
  + alph2[(v1 / 1024) & 0x3ff]
  + alph2[(v1 / 1048576) & 0x3ff]
  + alph2[(v1 / 1073741824) & 0x3ff]
  + alph2[v2 & 0x3ff]
  + alph2[(v2 / 1024) & 0x3ff]
  + alph2[(v2 / 1048576) & 0x3ff]
  + alph2[(v2 / 1073741824) & 0x3ff]
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.