@ -42,12 +42,12 @@ begin
DictTestP : process is
DictTestP : process is
variable v_key : string ( 1 to 4 ) ;
variable v_key : t_dict_key_ptr ;
variable v_random : RandomPType ;
variable v_random : RandomPType ;
variable v_input : std_logic_vector ( 7 downto 0 ) ;
variable v_input : std_logic_vector ( 7 downto 0 ) ;
variable v_output : std_logic_vector ( 7 downto 0 ) ;
variable v_output : std_logic_vector ( 7 downto 0 ) ;
variable v_scoreboard : t_scoreboard ( 0 to 256 ) ;
variable v_scoreboard : t_scoreboard ( 0 to 256 ) ;
variable v_error : boolean ;
variable v_error : t_dict_error ;
begin
begin
v_random . InitSeed ( v_random 'instance_name ) ;
v_random . InitSeed ( v_random 'instance_name ) ;
@ -56,11 +56,19 @@ begin
report "ERROR: Dict should be empty"
report "ERROR: Dict should be empty"
severity failure ;
severity failure ;
-- The dict shouldn_t accept an empty key string
report "INFO: Test 0: Try to set an entry with empty key string" ;
sv_dict . set ( "" , x"0123456789" , v_error ) ;
assert v_error = KEY_INVALID
report "ERROR: Key '' should raise a KEY_INVALID error"
severity failure ;
report "INFO: Test successful" ;
-- fill dictionary and check count
-- fill dictionary and check count
report "INFO: Test 0: Fill dictionary" ;
report "INFO: Test 1 : Fill dictionary" ;
for i in 0 to 255 loop
for i in 0 to 255 loop
v_input : = v_random . RandSlv ( 8 ) ;
v_input : = v_random . RandSlv ( 8 ) ;
sv_dict . set ( integer 'image ( i ) , v_input ) ;
sv_dict . set ( integer 'image ( i ) , v_input , v_error ) ;
v_scoreboard ( i ) : = v_input ;
v_scoreboard ( i ) : = v_input ;
assert sv_dict . size = i + 1
assert sv_dict . size = i + 1
report "ERROR: Dict should have " & to_string ( i + 1 ) & " entries"
report "ERROR: Dict should have " & to_string ( i + 1 ) & " entries"
@ -69,7 +77,7 @@ begin
report "INFO: Test successful" ;
report "INFO: Test successful" ;
-- read all entries and check for correct data
-- read all entries and check for correct data
report "INFO: Test 1 : Read dictionary" ;
report "INFO: Test 2 : Read dictionary" ;
for i in 0 to 255 loop
for i in 0 to 255 loop
sv_dict . get ( integer 'image ( i ) , v_output , v_error ) ;
sv_dict . get ( integer 'image ( i ) , v_output , v_error ) ;
assert v_output = v_scoreboard ( i )
assert v_output = v_scoreboard ( i )
@ -79,9 +87,9 @@ begin
report "INFO: Test successful" ;
report "INFO: Test successful" ;
-- overwrite a key/value pair
-- overwrite a key/value pair
report "INFO: Test 2 : Overwrite a entry" ;
report "INFO: Test 3 : Overwrite a entry" ;
v_input : = v_random . RandSlv ( 8 ) ;
v_input : = v_random . RandSlv ( 8 ) ;
sv_dict . set ( "128" , v_input ) ;
sv_dict . set ( "128" , v_input , v_error ) ;
v_scoreboard ( 128 ) : = v_input ;
v_scoreboard ( 128 ) : = v_input ;
sv_dict . get ( "128" , v_output , v_error ) ;
sv_dict . get ( "128" , v_output , v_error ) ;
assert v_output = v_scoreboard ( 128 )
assert v_output = v_scoreboard ( 128 )
@ -89,8 +97,8 @@ begin
severity failure ;
severity failure ;
report "INFO: Test successful" ;
report "INFO: Test successful" ;
-- overwrite a key/value pair
report "INFO: Test 3 : Check hasKey() method" ;
-- check for existing keys
report "INFO: Test 4 : Check hasKey() method" ;
for i in 0 to 255 loop
for i in 0 to 255 loop
assert sv_dict . hasKey ( integer 'image ( i ) )
assert sv_dict . hasKey ( integer 'image ( i ) )
report "ERROR: Key" & integer 'image ( i ) & " should exist in dictionary"
report "ERROR: Key" & integer 'image ( i ) & " should exist in dictionary"
@ -101,8 +109,47 @@ begin
severity failure ;
severity failure ;
report "INFO: Test successful" ;
report "INFO: Test successful" ;
-- iterate up over all entries
report "INFO: Test 5: Iterate up over all entries" ;
sv_dict . setFirst ;
for i in 0 to 255 loop
v_key : = new string ' ( sv_dict . iter ( UP ) ) ;
assert v_key . all = integer 'image ( i )
report "ERROR: Got key " & v_key . all & ", expected " & integer 'image ( i )
severity failure ;
sv_dict . get ( v_key . all , v_output , v_error ) ;
assert v_key . all = integer 'image ( i ) and v_output = v_scoreboard ( i )
report "ERROR: Got 0x" & to_hstring ( v_output ) & ", expected 0x" & to_hstring ( v_scoreboard ( i ) )
severity failure ;
end loop ;
v_key : = new string ' ( sv_dict . iter ( UP ) ) ;
assert v_key . all = ""
report "ERROR: Got key " & v_key . all & ", expected empty key"
severity failure ;
report "INFO: Test successful" ;
-- iterate down over all entries
report "INFO: Test 6: Iterate down over all entries" ;
sv_dict . setLast ;
for i in 255 downto 0 loop
v_key : = new string ' ( sv_dict . iter ( DOWN ) ) ;
assert v_key . all = integer 'image ( i )
report "ERROR: Got key " & v_key . all & ", expected " & integer 'image ( i )
severity failure ;
sv_dict . get ( v_key . all , v_output , v_error ) ;
assert v_key . all = integer 'image ( i ) and v_output = v_scoreboard ( i )
report "ERROR: Got 0x" & to_hstring ( v_output ) & ", expected 0x" & to_hstring ( v_scoreboard ( i ) )
severity failure ;
end loop ;
v_key : = new string ' ( sv_dict . iter ( DOWN ) ) ;
assert v_key . all = ""
report "ERROR: Got key " & v_key . all & ", expected empty key"
severity failure ;
deallocate ( v_key ) ;
report "INFO: Test successful" ;
-- Remove key/value pair from head of dictionary
-- Remove key/value pair from head of dictionary
report "INFO: Test 4: Removing entry from head of dictionary" ;
report "INFO: Test 7 : Removing entry from head of dictionary" ;
sv_dict . del ( "255" , v_error ) ;
sv_dict . del ( "255" , v_error ) ;
assert not ( sv_dict . hasKey ( "255" ) )
assert not ( sv_dict . hasKey ( "255" ) )
report "ERROR: Key 255 shouldn't exist in dictionary"
report "ERROR: Key 255 shouldn't exist in dictionary"
@ -110,7 +157,7 @@ begin
report "INFO: Test successful" ;
report "INFO: Test successful" ;
-- Remove key/value pair from head of dictionary
-- Remove key/value pair from head of dictionary
report "INFO: Test 5 : Removing entry from middle of dictionary" ;
report "INFO: Test 8 : Removing entry from middle of dictionary" ;
sv_dict . del ( "127" , v_error ) ;
sv_dict . del ( "127" , v_error ) ;
assert not ( sv_dict . hasKey ( "127" ) )
assert not ( sv_dict . hasKey ( "127" ) )
report "ERROR: Key 127 shouldn't exist in dictionary"
report "ERROR: Key 127 shouldn't exist in dictionary"
@ -118,7 +165,7 @@ begin
report "INFO: Test successful" ;
report "INFO: Test successful" ;
-- Remove key/value pair from head of dictionary
-- Remove key/value pair from head of dictionary
report "INFO: Test 6 : Removing entry from beginning of dictionary" ;
report "INFO: Test 9 : Removing entry from beginning of dictionary" ;
sv_dict . del ( "0" , v_error ) ;
sv_dict . del ( "0" , v_error ) ;
assert not ( sv_dict . hasKey ( "0" ) )
assert not ( sv_dict . hasKey ( "0" ) )
report "ERROR: Key 0 shouldn't exist in dictionary"
report "ERROR: Key 0 shouldn't exist in dictionary"
@ -126,7 +173,7 @@ begin
report "INFO: Test successful" ;
report "INFO: Test successful" ;
-- Remove key/value pair from head of dictionary
-- Remove key/value pair from head of dictionary
report "INFO: Test 7 : Clear all entries from dictionary" ;
report "INFO: Test 10 : Clear all entries from dictionary" ;
sv_dict . clear ( v_error ) ;
sv_dict . clear ( v_error ) ;
assert sv_dict . size = 0
assert sv_dict . size = 0
report "ERROR: Dict should be empty"
report "ERROR: Dict should be empty"