mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 07:04:52 +09:00
48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
const assert = require("assert");
|
|
const stringUtils = require("./stringUtils");
|
|
|
|
describe("stringUtils.js", function(){
|
|
describe("hashCode", function(){
|
|
it("Produces a 32bit signed int hash from a string", function(){
|
|
let x = stringUtils.hashCode("whatever");
|
|
let y = stringUtils.hashCode(" a much longer string to prove this works for long strings as well and also special characters &!¤(#)¤");
|
|
|
|
assert(typeof x == "number", "hashCode should be returning a 32 bit signed int");
|
|
assert(x.toString() == "1934383586");
|
|
assert(y.toString() == "1648886132");
|
|
});
|
|
let permutations = 1000;
|
|
it("Rarely produces same hash for different strings ("+permutations+" hashes with collision check)", function(){
|
|
let keyHashPairs = [];
|
|
for(let i = 0; i < permutations; i++){
|
|
let string = Math.random().toString();
|
|
keyHashPairs.push({
|
|
key:string,
|
|
hash:stringUtils.hashCode(string),
|
|
});
|
|
}
|
|
|
|
for(let i = 0; i < permutations; i++){
|
|
for(let o = 0; o < permutations; o++){
|
|
assert(i == o || keyHashPairs[o].key != keyHashPairs[i].key, "Woha, Math.random() generated 2 equal numbers???");
|
|
assert(i == o || keyHashPairs[o].hash != keyHashPairs[i].hash, "Hash collision, as long at it doesn't happen again its fine.");
|
|
}
|
|
}
|
|
});
|
|
it("Returns 0 for 0 length strings", function(){
|
|
let x = stringUtils.hashCode("");
|
|
assert.deepEqual(x, 0);
|
|
});
|
|
it("Throws when supplied with anything other than a string", function(){
|
|
assert.throws(function(){
|
|
stringUtils.hashCode([]);
|
|
}, "ERROR: Not a string")
|
|
assert.throws(function(){
|
|
stringUtils.hashCode({});
|
|
}, "ERROR: Not a string")
|
|
assert.throws(function(){
|
|
stringUtils.hashCode(0);
|
|
}, "ERROR: Not a string")
|
|
});
|
|
});
|
|
}); |