-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_hashmap.py
125 lines (105 loc) · 3.77 KB
/
test_hashmap.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
from hashmap import Hashmap
from hashing import simple_hash, djb2, jenkins_one_at_a_time_hash, fnv_hash
import csv
import tracemalloc
import time
"""
CS 5008
Fall 2023
Final Research Project
Marian Padron
Test_hashmap file, runs a test script for running different calls to a hashmap.
"""
def insert_map(map, words):
"""
Puts a list of words into a hashmap with a value.
:param map: Hashmap object
:param words: list of words
:return: None
"""
for i in range(0, len(words)):
# Put word as key and its appearance in the list as the value
map.map_put(words[i], i + 1)
def search_map(hashmap, words):
"""
Gets each word in a list of words from the hashmap.
:param hashmap: Hashmap object
:param words: list of words
:return: count of all the words looked up
"""
count = 0
for word in words:
if (map.map_get(word) > 0):
count += 1
return count
if __name__ == "__main__":
# Files to iterate through
word_files = ["data_files/words_small.txt", "data_files/words_medium.txt", "data_files/words_large.txt", "data_files/words_x_large.txt"]
hashes = [
simple_hash,
djb2,
jenkins_one_at_a_time_hash,
fnv_hash
]
# Placeholder for data to write to csv
hash_data = []
for hash in hashes:
# For csv
insertion_data = [
["Insertion", "Speed", "Current Memory", "Peak Memory", "Words"],
]
lookup_data = [
["Lookup", "Speed", "Current Memory", "Peak Memory", "Words"],
]
# Iterate through files
for w_file in word_files:
insertion = []
lookup = []
# Get list of words within current file
with open(w_file, "r") as file:
words = [word.strip() for word in file.readlines()]
# Add file name to data
insertion.append(w_file)
lookup.append(w_file)
map = Hashmap(100000000, hash) # initialize the hashmap with a given size and hash type
#Insertion Call
tracemalloc.start() # start memory tracing
start_time = time.time() # start runtime
insert_map(map, words) # function call
current, peak = tracemalloc.get_traced_memory() # save memory usage
tracemalloc.stop()
end_time = time.time()
runtime = end_time - start_time # get runtime
# Add data
insertion.append(runtime)
insertion.append(current)
insertion.append(peak)
insertion.append(map.map_get(words[-1]))
insertion_data.append(insertion)
# Search Call
tracemalloc.start() # start memory tracing
start_time = time.time() # start runtime
total = search_map(map, words) # function call
current, peak = tracemalloc.get_traced_memory() # save memory usage
tracemalloc.stop()
end_time = time.time()
runtime = end_time - start_time # get runtime
lookup.append(runtime)
lookup.append(current)
lookup.append(peak)
lookup.append(total)
lookup_data.append(lookup)
# Add data to one list
hash_data.append([hash])
hash_data.append(insertion_data)
hash_data.append(lookup_data)
hash_data.append([])
# Write to csv file
with open('hash_output.csv', "w", newline='') as file:
writer = csv.writer(file)
for line in hash_data:
if len(line) > 1:
for row in line:
writer.writerow(row)
else:
writer.writerow(line)