      def test_end_to_end(self):
          hash_table = HashTable(10)
  
          print("Test: get on an empty hash table index")
          assert_equal(hash_table.get(0), None)
  
          print("Test: set on an empty hash table index")
          hash_table.set(0, 'foo')
          assert_equal(hash_table.get(0), 'foo')
          hash_table.set(1, 'bar')
 
</s> remove     "        assert_equal(hash_table.get(0), None)\n",
 </s> add     "        assert_raises(KeyError, hash_table.get, 0)\n", </s> remove     "        assert_equal(hash_table.get(0), None)\n",
 </s> add     "        assert_raises(KeyError, hash_table.get, 0)\n", </s> remove         hash_table.remove(-1)
 </s> add         assert_raises(KeyError, hash_table.remove, -1) </s> remove         assert_equal(hash_table.get(10), None)
 </s> add         assert_raises(KeyError, hash_table.get, 10) </s> remove     "* get on an empty hash table index\n",
    "* set on an empty hash table index\n",
    "* set on a non empty hash table index\n",
    "* set on a key that already exists\n",
    "* remove on a key with an entry\n",
    "* remove on a key without an entry"
 </s> add     "* `get` no matching key -> KeyError exception\n",
    "* `get` matching key -> value\n",
    "* `set` no matchin gkey -> new key, value\n",
    "* `set` matching key -> update value\n",
    "* `remove` no matching key -> KeyError exception\n",
    "* `remove` matching key -> remove key, value"
        assert_raises(KeyError, hash_table.get, 0)
      def test_end_to_end(self):
          hash_table = HashTable(10)
  
          print("Test: get on an empty hash table index")
        assert_raises(KeyError, hash_table.get, 0)
  
          print("Test: set on an empty hash table index")
          hash_table.set(0, 'foo')
          assert_equal(hash_table.get(0), 'foo')
          hash_table.set(1, 'bar')
keep keep keep keep replace keep keep keep keep keep
 Update hash map (#104)

Update constraints, test cases, algorithm, code, and tests. 
arrays_strings/hash_map/test_hash_map.py