use std::collections::HashMap;
use std::path::Path;
use crate::error::Result;
use crate::types::Type;
#[derive(Debug, Default)]
#[allow(dead_code)]
pub struct TypeTrace {
variables: HashMap<String, Vec<Type>>,
functions: HashMap<String, (Vec<Vec<Type>>, Vec<Type>)>,
}
#[allow(dead_code)]
pub struct RuntimeTracer {
traces: TypeTrace,
verbose: bool,
}
impl RuntimeTracer {
pub fn new(verbose: bool) -> Self {
Self { traces: TypeTrace::default(), verbose }
}
pub fn run<P: AsRef<Path>>(&mut self, path: P, test_name: Option<&str>) -> Result<()> {
if self.verbose {
println!("Running runtime tracer on: {:?}", path.as_ref());
if let Some(name) = test_name {
println!("Test: {}", name);
}
}
Ok(())
}
pub fn into_traces(self) -> TypeTrace {
self.traces
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_tracer_initialization() {
let tracer = RuntimeTracer::new(false);
assert!(!tracer.verbose);
}
}