private PersistentHashTable InitTable(string hashtableName, int tableSize, int keySize, int valueSize, int userHeaderSize) { PersistentHashTable ht; try { ht = new PersistentHashTable(hashtableName, tableSize, keySize, valueSize, userHeaderSize); } catch (FileNameConflictException) { ht = new PersistentHashTable(hashtableName); ht.Delete(); ht = new PersistentHashTable(hashtableName, tableSize, keySize, valueSize, userHeaderSize); } return ht; }
private static void RemoveTestAssert(PersistentHashTable hashTable, int valueSize, byte[] key) { hashTable.Put(key, new byte[valueSize]); hashTable.Remove(key); try { hashTable.Get(key); } catch (KeyNotFoundException){} }
private static byte[] FillTableWithCollisions(int targetHashToCollideOn, PersistentHashTable hashTable) { byte[] collisionKey = new byte[] {0, 0, 0, 0}; for (int run = 0; run < hashTable.GetTableSize(); run++) { collisionKey = GetNextCollisionKey(targetHashToCollideOn, hashTable.GetTableSize(), collisionKey); hashTable.Put(collisionKey, new byte[] {0, 0, 0, (byte) run}); } //assert the table is full try { hashTable.Put(new byte[] { 255, 255, 255, 255 }, new byte[hashTable.GetValueSize()]); Assert.Fail("Should throw exception"); } catch (IndexOutOfRangeException) {} return collisionKey; }
private static void PutGetTestAssert(PersistentHashTable hashTable, byte[] key, byte[] value) { hashTable.Put(key, value); byte[] actual = hashTable.Get(key); TestHelper.AssertByteArraysAreSame(value, actual); }
public void ReopenTest() { string hastTableName = "ReopenHashTableTest"; PersistentHashTable hashTable = InitTable(hastTableName, 20, 4, 4, 6); try { byte[] key = new byte[] {4, 4, 4, 4}; byte[] value = new byte[] { 5,5,5,5 }; hashTable.Put(key, value); hashTable.Close(); hashTable = new PersistentHashTable(hastTableName); TestHelper.AssertByteArraysAreSame(value, hashTable.Get(key)); } finally { hashTable.Close(); } }