Skip to content

Commit efe6954

Browse files
committed
Add tests for dict with strings as keys
1 parent 4b8c870 commit efe6954

1 file changed

Lines changed: 97 additions & 34 deletions

File tree

data_structures/test/tb_dictionary.vhd

Lines changed: 97 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ end entity tb_data_structures;
2323
architecture test_fixture of tb_data_structures is
2424

2525

26-
shared variable sv_dict : Integer_Slv_Dict;
26+
shared variable sv_int_slv_dict : Integer_Slv_Dict;
27+
shared variable sv_string_slv_dict : String_Slv_Dict;
2728

2829

2930
begin
@@ -36,56 +37,118 @@ begin
3637
checker_init(display_format => verbose);
3738
while test_suite loop
3839
if run("Test that dictionary is empty in initial state") then
39-
check_equal(sv_dict.Count, 0);
40+
-- Integer_Slv_Dict
41+
check_equal(sv_int_slv_dict.Count, 0);
42+
-- String_Slv_Dict
43+
check_equal(sv_string_slv_dict.Count, 0);
4044
elsif run("Test that dictionary data can be set") then
41-
sv_dict.Set(42, x"DEADBEEF");
42-
check(sv_dict.HasKey(42));
45+
-- Integer_Slv_Dict
46+
sv_int_slv_dict.Set(42, x"DEADBEEF");
47+
check(sv_int_slv_dict.HasKey(42));
48+
-- String_Slv_Dict
49+
sv_string_slv_dict.Set("42", x"DEADBEEF");
50+
check(sv_string_slv_dict.HasKey("42"));
4351
elsif run("Test that dictionary data can be set and count is updated") then
44-
sv_dict.Set(42, x"DEADBEEF");
45-
check_equal(sv_dict.Count, 1);
52+
-- Integer_Slv_Dict
53+
sv_int_slv_dict.Set(42, x"DEADBEEF");
54+
check_equal(sv_int_slv_dict.Count, 1);
55+
-- String_Slv_Dict
56+
sv_string_slv_dict.Set("42", x"DEADBEEF");
57+
check_equal(sv_string_slv_dict.Count, 1);
4658
elsif run("Test that dictionary data can be set and retrieved") then
47-
sv_dict.Set(42, x"DEADBEEF");
48-
check_equal(sv_dict.Get(42), std_logic_vector'(x"DEADBEEF"));
59+
-- Integer_Slv_Dict
60+
sv_int_slv_dict.Set(42, x"DEADBEEF");
61+
check_equal(sv_int_slv_dict.Get(42), std_logic_vector'(x"DEADBEEF"));
62+
-- String_Slv_Dict
63+
sv_string_slv_dict.Set("42", x"DEADBEEF");
64+
check_equal(sv_string_slv_dict.Get("42"), std_logic_vector'(x"DEADBEEF"));
4965
elsif run("Test that dictionary data can be set and removed") then
50-
sv_dict.Set(42, x"DEADBEEF");
51-
check(sv_dict.HasKey(42));
52-
sv_dict.Del(42);
53-
check_false(sv_dict.HasKey(42));
66+
-- Integer_Slv_Dict
67+
sv_int_slv_dict.Set(42, x"DEADBEEF");
68+
check(sv_int_slv_dict.HasKey(42));
69+
sv_int_slv_dict.Del(42);
70+
check_false(sv_int_slv_dict.HasKey(42));
71+
-- String_Slv_Dict
72+
sv_string_slv_dict.Set("42", x"DEADBEEF");
73+
check(sv_string_slv_dict.HasKey("42"));
74+
sv_string_slv_dict.Del("42");
75+
check_false(sv_string_slv_dict.HasKey("42"));
5476
elsif run("Test that dictionary data can be overwritten when having same key") then
55-
sv_dict.Set(42, x"DEADBEEF");
56-
sv_dict.Set(42, x"DEADAFFE");
57-
check_equal(sv_dict.Get(42), std_logic_vector'(x"DEADAFFE"));
77+
-- Integer_Slv_Dict
78+
sv_int_slv_dict.Set(42, x"DEADBEEF");
79+
sv_int_slv_dict.Set(42, x"DEADAFFE");
80+
check_equal(sv_int_slv_dict.Get(42), std_logic_vector'(x"DEADAFFE"));
81+
-- String_Slv_Dict
82+
sv_string_slv_dict.Set("42", x"DEADBEEF");
83+
sv_string_slv_dict.Set("42", x"DEADAFFE");
84+
check_equal(sv_string_slv_dict.Get("42"), std_logic_vector'(x"DEADAFFE"));
5885
elsif run("Test that dictionary data with same hash table slot can be set and retrieved") then
59-
sv_dict.Set(1, x"DEADBEEF");
60-
sv_dict.Set(129, x"DEADAFFE");
61-
check_equal(sv_dict.Get(1), std_logic_vector'(x"DEADBEEF"));
62-
check_equal(sv_dict.Get(129), std_logic_vector'(x"DEADAFFE"));
63-
check_equal(sv_dict.Count, 2);
86+
-- Integer_Slv_Dict
87+
sv_int_slv_dict.Set(1, x"DEADBEEF");
88+
sv_int_slv_dict.Set(129, x"DEADAFFE");
89+
check_equal(sv_int_slv_dict.Get(1), std_logic_vector'(x"DEADBEEF"));
90+
check_equal(sv_int_slv_dict.Get(129), std_logic_vector'(x"DEADAFFE"));
91+
check_equal(sv_int_slv_dict.Count, 2);
92+
-- String_Slv_Dict
93+
sv_string_slv_dict.Set("1", x"DEADBEEF");
94+
sv_string_slv_dict.Set("129", x"DEADAFFE");
95+
check_equal(sv_string_slv_dict.Get("1"), std_logic_vector'(x"DEADBEEF"));
96+
check_equal(sv_string_slv_dict.Get("129"), std_logic_vector'(x"DEADAFFE"));
97+
check_equal(sv_string_slv_dict.Count, 2);
6498
elsif run("Test that dictionary data with same hash table slot can be set and completely removed") then
65-
sv_dict.Set(1, x"DEADBEEF");
66-
sv_dict.Set(129, x"DEADAFFE");
67-
check_equal(sv_dict.Count, 2);
68-
sv_dict.Del(1);
69-
check_equal(sv_dict.Count, 1);
70-
sv_dict.Del(129);
71-
check_equal(sv_dict.Count, 0);
99+
sv_int_slv_dict.Set(1, x"DEADBEEF");
100+
sv_int_slv_dict.Set(129, x"DEADAFFE");
101+
check_equal(sv_int_slv_dict.Count, 2);
102+
sv_int_slv_dict.Del(1);
103+
check_equal(sv_int_slv_dict.Count, 1);
104+
sv_int_slv_dict.Del(129);
105+
check_equal(sv_int_slv_dict.Count, 0);
106+
-- String_Slv_Dict
107+
sv_string_slv_dict.Set("1", x"DEADBEEF");
108+
sv_string_slv_dict.Set("129", x"DEADAFFE");
109+
check_equal(sv_string_slv_dict.Count, 2);
110+
sv_string_slv_dict.Del("1");
111+
check_equal(sv_string_slv_dict.Count, 1);
112+
sv_string_slv_dict.Del("129");
113+
check_equal(sv_string_slv_dict.Count, 0);
72114
elsif run("Test that dictionary data can be stored and retrieved in every hash table slot") then
115+
-- Integer_Slv_Dict
73116
v_random.InitSeed(test_runner'instance_name);
74117
for i in 0 to 127 loop
75-
sv_dict.Set(i, v_random.RandSlv(32));
118+
sv_int_slv_dict.Set(i, v_random.RandSlv(32));
119+
sv_string_slv_dict.Set(to_string(i), v_random.RandSlv(32));
76120
end loop;
77121
v_random.InitSeed(test_runner'instance_name);
78122
for i in 0 to 127 loop
79-
check_equal(sv_dict.Get(i), v_random.RandSlv(32));
123+
check_equal(sv_int_slv_dict.Get(i), v_random.RandSlv(32));
124+
check_equal(sv_string_slv_dict.Get(to_string(i)), v_random.RandSlv(32));
80125
end loop;
81-
check_equal(sv_dict.Count, 128);
126+
check_equal(sv_int_slv_dict.Count, 128);
127+
-- String_Slv_Dict
128+
v_random.InitSeed(test_runner'instance_name);
129+
for i in 0 to 127 loop
130+
sv_string_slv_dict.Set(to_string(i), v_random.RandSlv(32));
131+
end loop;
132+
v_random.InitSeed(test_runner'instance_name);
133+
for i in 0 to 127 loop
134+
check_equal(sv_string_slv_dict.Get(to_string(i)), v_random.RandSlv(32));
135+
end loop;
136+
check_equal(sv_string_slv_dict.Count, 128);
82137
elsif run("Test that dictionary data can be cleared") then
138+
-- Integer_Slv_Dict
139+
for i in 0 to 127 loop
140+
sv_int_slv_dict.Set(i, std_logic_vector(to_unsigned(i, 32)));
141+
end loop;
142+
check_equal(sv_int_slv_dict.Count, 128);
143+
sv_int_slv_dict.Clear;
144+
check_equal(sv_int_slv_dict.Count, 0);
145+
-- String_Slv_Dict
83146
for i in 0 to 127 loop
84-
sv_dict.Set(i, std_logic_vector(to_unsigned(i, 32)));
147+
sv_string_slv_dict.Set(to_string(i), std_logic_vector(to_unsigned(i, 32)));
85148
end loop;
86-
check_equal(sv_dict.Count, 128);
87-
sv_dict.Clear;
88-
check_equal(sv_dict.Count, 0);
149+
check_equal(sv_string_slv_dict.Count, 128);
150+
sv_string_slv_dict.Clear;
151+
check_equal(sv_string_slv_dict.Count, 0);
89152
end if;
90153
end loop;
91154
test_runner_cleanup(runner);

0 commit comments

Comments
 (0)