UNPKG

ts-ds-tool

Version:

Data structure and algorithm of TypeScript

141 lines (126 loc) 5.18 kB
import { NullPointerException } from "../../exception/NotNullException"; import { HashTable } from "../HashTable"; describe("HashTable test", () => { test("should create hash table of certain size", () => { const hashTable = new HashTable<number>(); expect(hashTable.Count).toBe(0); expect(hashTable.TableSize).toBe(11); const hastTable2 = new HashTable<number>(32); expect(hastTable2.TableSize).toBe(32); HashTable.setDefaultTableSize(33); const hashTable3 = new HashTable<number>(); expect(hashTable3.TableSize).toBe(33); HashTable.setDefaultTableSize(11); }); test("should generate hashkey from property key", () => { const hashTable = new HashTable<number>(); hashTable.put("a", 1); hashTable.put("b", 2); hashTable.put("c", 3); hashTable.put("ab", 4); expect(() => hashTable.put(null, 4)).toThrowError(new NullPointerException()); expect(() => hashTable.put(undefined, 4)).toThrowError(new NullPointerException()); expect(hashTable.getHashKey("a")).toBe(9); expect(hashTable.getHashKey("b")).toBe(10); expect(hashTable.getHashKey("c")).toBe(0); expect(hashTable.getHashKey("ab")).toBe(3); for (let i = 0; i < 10; i++){ const code = "d".charCodeAt(0); hashTable.put(String.fromCharCode(code + i), 3); } expect(hashTable.getHashKey("a")).toBe(5); expect(hashTable.getHashKey("b")).toBe(6); expect(hashTable.getHashKey("c")).toBe(7); }); test("should get item in hashtable", () => { const hashTable = new HashTable<number>(); hashTable.put("a", 1); hashTable.put("b", 2); hashTable.put("c", 3); hashTable.put("ab", 4); expect(hashTable.get("c")).toBe(3); expect(hashTable.get("ab")).toBe(4); }); test("should delete item in hashtable", () => { const hashTable = new HashTable<number>(); hashTable.put("a", 1); hashTable.put("b", 2); hashTable.put("c", 3); hashTable.put("ab", 4); expect(hashTable.get("c")).toBe(3); hashTable.remove("c"); expect(hashTable.get("c")).toBeNull(); expect(hashTable.remove("d")).toBe(false); }); test("should contains item in hashtable", () => { const hashTable = new HashTable<number>(); hashTable.put("a", 1); hashTable.put("b", 2); hashTable.put("c", 3); hashTable.put("ab", 4); expect(hashTable.contains("c")).toBe(true); expect(hashTable.contains("abc")).toBe(false); }); test("should getKeys in hashtable", () => { const hashTable = new HashTable<number>(); hashTable.put("a", 1); hashTable.put("b", 2); hashTable.put("c", 3); expect(hashTable.getKeys().length).toBe(3); expect(hashTable.getKeys()).toContain("a"); expect(hashTable.getKeys()).toContain("b"); expect(hashTable.getKeys()).toContain("c"); }); test("should getOrignalKeys in hashtable", () => { const hashTable = new HashTable<number>(); hashTable.put("a", 1); hashTable.put("b", 2); hashTable.put("c", 3); expect(hashTable.getOrignalKeys().length).toBe(3); expect(hashTable.getOrignalKeys()).toContain("a"); expect(hashTable.getOrignalKeys()).toContain("b"); expect(hashTable.getOrignalKeys()).toContain("c"); }); test("should values in hashtable", () => { const hashTable = new HashTable<number>(); hashTable.put("a", 1); hashTable.put("b", 2); hashTable.put("c", 3); expect(hashTable.values().length).toBe(3); expect(hashTable.values()).toContain(1); expect(hashTable.values()).toContain(2); expect(hashTable.values()).toContain(3); }); test("should clear in hashtable", () => { const hashTable = new HashTable<number>(); hashTable.put("a", 1); hashTable.put("b", 2); hashTable.put("c", 3); hashTable.clear(); expect(hashTable.Count).toBe(0); expect(hashTable.getKeys().length).toBe(0); }); test("should put object key in hashtable", () => { const hashTable = new HashTable<number>(); hashTable.put(1, 1); hashTable.put(2, 2); hashTable.put(3, 3); expect(hashTable.getHashKey(1)).toBe(5); expect(hashTable.getHashKey(2)).toBe(6); expect(hashTable.getHashKey(3)).toBe(7); const hashTable2 = new HashTable<number>(); hashTable2.put(true, 1); hashTable2.put(false, 0); expect(hashTable2.get(true)).toBe(1); expect(hashTable2.get(false)).toBe(0); const hashTable3 = new HashTable<number>(); hashTable3.put({a: 1}, 1); const key = {a: 3}; hashTable3.put(key, 2); expect(hashTable3.contains(key)).toBe(true); expect(hashTable3.get(key)).toBe(2); hashTable3.put(key, 3); expect(hashTable3.get(key)).toBe(3); expect(hashTable3.toString()).not.toBeNull(); }); });