use steel::{SteelVal, gc::Gc};
pub const TIME: &str = "time";
pub fn time(secs: f64) -> SteelVal {
let map = steel::HashMap::new().update(SteelVal::SymbolV(TIME.into()), SteelVal::NumV(secs));
SteelVal::HashMapV(Gc::new(map).into())
}
pub fn default() -> SteelVal {
time(0.0)
}
#[cfg(test)]
mod tests {
use super::*;
use steel::steel_vm::engine::Engine;
#[test]
fn args_time_roundtrips_through_the_vm() {
let mut vm = Engine::new_base();
vm.register_value(crate::ARGS, default());
let v = vm.run("(hash-ref %args 'time)").unwrap();
assert_eq!(v.last(), Some(&SteelVal::NumV(0.0)));
vm.update_value(crate::ARGS, time(1.5));
let v = vm.run("(hash-ref %args 'time)").unwrap();
assert_eq!(v.last(), Some(&SteelVal::NumV(1.5)));
}
}