void Test_keys() { string[] expectedKeys = { "a", "b", "c" }; MyHashTableSeperateChaining <string, int> table = new MyHashTableSeperateChaining <string, int>(); table.Insert("a", 1); table.Insert("b", 2); table.Insert("c", 3); var keys = table.Keys(); Assert.Equal(3, keys.Count); keys.ForEach(k => { int index = Array.IndexOf(expectedKeys, k); Assert.NotEqual(-1, index); expectedKeys[index] = null; }); foreach (var k in expectedKeys) { Assert.Null(k); } }
void Test_exhaustively() { MyHashTableSeperateChaining <string, string> table = new MyHashTableSeperateChaining <string, string>(); table.Insert("a", "1"); table.Insert("b", "2"); table.Insert("c", "3"); Assert.Equal(3, table.Size); Assert.False(table.IsEmpty()); table.Remove("a"); Assert.False(table.ContainsKey("a")); Assert.True(table.ContainsKey("b")); Assert.True(table.ContainsKey("c")); Assert.Equal(2, table.Size); var keys = table.Keys(); var values = table.Values(); Assert.Equal(2, keys.Count); Assert.Equal(2, values.Count); table.Clear(); Assert.True(table.IsEmpty()); Assert.False(table.ContainsKey("a")); Assert.False(table.ContainsKey("b")); Assert.False(table.ContainsKey("c")); var keys2 = table.Keys(); var values2 = table.Values(); Assert.Empty(keys2); Assert.Empty(values2); table.Insert("h", "100"); table.Insert("z", "255"); table.Insert("z", "300"); Assert.Equal(2, table.Size); Assert.False(table.IsEmpty()); Assert.Equal("300", table.GetValue("z")); Assert.False(table.ContainsKey("a")); Assert.False(table.ContainsKey("b")); Assert.False(table.ContainsKey("c")); Assert.True(table.ContainsKey("h")); Assert.True(table.ContainsKey("z")); var keys3 = table.Keys(); var values3 = table.Values(); Assert.Equal(2, keys3.Count); Assert.Equal(2, values3.Count); table.Remove("z"); Assert.Equal(1, table.Size); Assert.False(table.IsEmpty()); Assert.True(table.ContainsKey("h")); Assert.False(table.ContainsKey("z")); table.Remove("h"); Assert.True(table.IsEmpty()); Assert.False(table.ContainsKey("h")); Assert.False(table.ContainsKey("z")); var keys4 = table.Keys(); var values4 = table.Values(); Assert.Empty(keys4); Assert.Empty(values4); Assert.Throws <ArgumentException>(() => table.Remove("z")); }