librstb 0.1.1

Write HDL-Testbenches in Rust.
Documentation
use futures::future::BoxFuture;
use once_cell::sync::OnceCell;
use crate::rstb_obj::RstbObjSafe;
use crate::signal;
use crate::RstbResult;

#[derive(Debug)]
pub struct RstbTests (
    Vec<RstbObjSafe<Test>>,
);

impl RstbTests {
    pub fn new() -> Self {
        Self ( Vec::new() )
    }
    pub fn len(&self) -> usize {
        self.0.len()
    }
    pub fn iter(&self) -> core::slice::Iter<RstbObjSafe<Test>> {
        self.0.iter()
    }
    pub fn push(&mut self, test: Test) {
        self.0.push(RstbObjSafe::new(test));
    }
}

#[derive(Debug)]
pub struct Test {
    pub name: String,
    pub generator: fn(signal::SimObject) -> BoxFuture<'static, RstbResult>,
    pub time_secs: f64,
    pub sim_time_ns: u64,
    pub result: Option<RstbResult>,
}

impl Test {
    pub fn new(name: String, generator: fn(signal::SimObject) -> BoxFuture<'static, RstbResult>) -> Self {
        Self { name, generator, time_secs: 0.0, sim_time_ns: 0, result: None }
    }
    pub fn set_result(&mut self, result: RstbResult) {
        self.result = Some(result);
    }
}

pub(crate) static TESTS: OnceCell<RstbTests> = OnceCell::new();