1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
mod processors;

use crate::core::tester::TesterAPI;
use crate::generator::processors::TargetTester;
use crate::prog_gen::processors::{ExtractToModel, NestOnResultNodes};
use crate::testers::smt::V93K_SMT7;
use crate::testers::SupportedTester;
use crate::{Result, FLOW};
use std::path::PathBuf;

/// Main entry point to render the current test program, paths to all files generated are returned
pub fn render_test_program(tester: &V93K_SMT7) -> Result<Vec<PathBuf>> {
    let mut files = vec![];

    let output_dir = tester.output_dir()?.join("test_program");
    let flow_dir = output_dir.join("testflow");
    if !flow_dir.exists() {
        std::fs::create_dir_all(&flow_dir)?;
    }

    FLOW.with_all_flows(|flows| {
        for (name, flow) in flows {
            log_debug!("Rendering flow '{}' for V93k SMT7", name);
            let ast = flow.process(&mut |n| TargetTester::run(n, SupportedTester::V93KSMT7))?;
            let (ast, mut model) = ExtractToModel::run(&ast, SupportedTester::V93KSMT7, name)?;
            let ast = NestOnResultNodes::run(&ast)?;
            files.push(processors::write_to_file::run(&ast, &flow_dir, &mut model)?);
        }
        Ok(())
    })?;

    Ok(files)
}