safety_net/
util.rs

1/*!
2
3  Utils for Safety Net development.
4
5*/
6
7/// Compare Verilog as strings up to indentation.
8#[macro_export]
9macro_rules! assert_verilog_eq {
10    ($left:expr, $right:expr $(,)?) => {
11        match (&$left, &$right) {
12            (left_val, right_val) => {
13                for (left_line, right_line) in left_val.lines().map(|x| x.trim()).filter(|x| !x.is_empty()).zip(right_val.lines().map(|x| x.trim()).filter(|x| !x.is_empty())) {
14                    assert_eq!(
15                        left_line.trim(),
16                        right_line.trim()
17                    );
18                }
19            }
20        }
21    };
22    ($left:expr, $right:expr, $($arg:tt)+) => {
23        match (&$left, &$right) {
24            (left_val, right_val) => {
25                for (left_line, right_line) in left_val.lines().map(|x| x.trim()).filter(|x| !x.is_empty()).zip(right_val.lines().map(|x| x.trim()).filter(|x| !x.is_empty())) {
26                    assert_eq!(
27                        left_line.trim(),
28                        right_line.trim(),
29                        std::format_args!($($arg)+)
30                    );
31                }
32            }
33        }
34    };
35}