library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.float_pkg.all; library std; use std.textio.all; package test_utility is constant TEST_FAIL : string := "[ FAIL ]"; constant TEST_OK : string := "[ OK ]" & LF; type real_array is array ( natural range <> ) of real; procedure assert_eq( variable a : in std_logic_vector; variable b : in std_logic_vector ); procedure assert_near( variable a : in real; variable b : in real; variable abs_err : in real ); procedure assert_element_near( variable a : in real; variable b : in real; variable abs_err : in real; variable index : in integer ); end package test_utility; package body test_utility is procedure assert_eq( variable a : in std_logic_vector; variable b : in std_logic_vector ) is begin assert( a = b ) report TEST_FAIL & "assert_eq" & LF & " a: " & to_string( a ) & LF & " b: " & to_string( b ) & LF severity error; end procedure assert_eq; procedure assert_near( variable a : in real; variable b : in real; variable abs_err : in real ) is variable abs_diff : real; begin abs_diff := abs( a - b ); assert( abs_diff <= abs_err ) report TEST_FAIL & "assert_near" & LF & " a: " & to_string( a ) & LF & " b: " & to_string( b ) & LF & " " & to_string( abs_diff ) & " > " & to_string( abs_err ) & LF severity error; end procedure assert_near; procedure assert_element_near( variable a : in real; variable b : in real; variable abs_err : in real; variable index : in integer ) is variable abs_diff : real; begin abs_diff := abs( a - b ); assert( abs_diff <= abs_err ) report TEST_FAIL & "assert_element_near" & LF & " element: " & integer'image( index ) & LF & " a: " & to_string( a ) & LF & " b: " & to_string( b ) & LF & " " & to_string( abs_diff ) & " > " & to_string( abs_err ) & LF severity error; end procedure assert_element_near; end package body test_utility;