Javascript Java Hash (v2)

Revision 2 of this benchmark created on


Description

math.imul vs << vs * 31

Preparation HTML

<script>
function hashCode(str) {
  var hash = 0,
    i, chr;
  if (str.length === 0) return hash;
  for (i = 0; i < str.length; i++) {
    chr = str.charCodeAt(i);
    hash = ((hash << 5) - hash) + chr;
    hash |= 0; // Convert to 32bit integer
  }
  return hash;
}

function hashCodeImul(str) {
  var hash = 0,
    i, chr;
  if (str.length === 0) return hash;
  for (i = 0; i < str.length; i++) {
    chr = str.charCodeAt(i);
    hash = Math.imul(hash, 31) + chr;
    hash |= 0; // Convert to 32bit integer
  }
  return hash;
}

function hashCodeMulti(str) {
  var hash = 0,
    i, chr;
  if (str.length === 0) return hash;
  for (i = 0; i < str.length; i++) {
    chr = str.charCodeAt(i);
    hash = (hash * 31) + chr;
    hash |= 0; // Convert to 32bit integer
  }
  return hash;
}
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
regular
hashCode('test')
ready
imulation
hashCodeImul('test')
ready
multiplication
hashCodeMulti('test')
ready

Revisions

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