add assert_formal helper for running formal proofs in rust tests
This commit is contained in:
		
							parent
							
								
									37bc6eb639
								
							
						
					
					
						commit
						d477252bde
					
				
					 2 changed files with 37 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -50,4 +50,5 @@ pub mod ty;
 | 
			
		|||
pub mod util;
 | 
			
		||||
//pub mod valueless;
 | 
			
		||||
pub mod prelude;
 | 
			
		||||
pub mod testing;
 | 
			
		||||
pub mod wire;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										36
									
								
								crates/fayalite/src/testing.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								crates/fayalite/src/testing.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
// SPDX-License-Identifier: LGPL-3.0-or-later
 | 
			
		||||
// See Notices.txt for copyright information
 | 
			
		||||
use crate::{
 | 
			
		||||
    cli::{FormalArgs, FormalMode, FormalOutput, RunPhase},
 | 
			
		||||
    firrtl::ExportOptions,
 | 
			
		||||
};
 | 
			
		||||
use clap::Parser;
 | 
			
		||||
use std::sync::OnceLock;
 | 
			
		||||
 | 
			
		||||
fn assert_formal_helper() -> FormalArgs {
 | 
			
		||||
    static FORMAL_ARGS: OnceLock<FormalArgs> = OnceLock::new();
 | 
			
		||||
    // ensure we only run parsing once, so errors from env vars don't produce overlapping output if we're called on multiple threads
 | 
			
		||||
    FORMAL_ARGS
 | 
			
		||||
        .get_or_init(|| FormalArgs::parse_from(["fayalite::testing::assert_formal"]))
 | 
			
		||||
        .clone()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[track_caller]
 | 
			
		||||
pub fn assert_formal<M>(
 | 
			
		||||
    module: M,
 | 
			
		||||
    mode: FormalMode,
 | 
			
		||||
    depth: u64,
 | 
			
		||||
    solver: Option<&str>,
 | 
			
		||||
    export_options: ExportOptions,
 | 
			
		||||
) where
 | 
			
		||||
    FormalArgs: RunPhase<M, Output = FormalOutput>,
 | 
			
		||||
{
 | 
			
		||||
    let mut args = assert_formal_helper();
 | 
			
		||||
    args.verilog.firrtl.base.redirect_output_for_rust_test = true;
 | 
			
		||||
    args.verilog.firrtl.export_options = export_options;
 | 
			
		||||
    args.verilog.debug = true;
 | 
			
		||||
    args.mode = mode;
 | 
			
		||||
    args.depth = depth;
 | 
			
		||||
    args.solver = solver.map(String::from);
 | 
			
		||||
    args.run(module).expect("testing::assert_formal() failed");
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue