use std::ops::{RangeInclusive, Range}; use serde::{Serialize, Deserialize}; use shm_rs::lexer::lexer; use shm_rs::serializator::serializator; use shm_rs::static_scheme::init; use shm_rs::dynamic_scheme::environment; #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] pub struct LdActionExec { pub executable: String, } #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] pub struct CommonLevels { pub lvl_a: Vec>, pub lvl_b: Vec>, pub action_block: Option>, pub action_unblock: Option>, } pub fn main() { let mut curdir = std::env::current_dir().unwrap(); curdir.push("examples/scheme_vector/test_vec1.shm"); println!("{}", curdir.display()); let lex = lexer::Lexer::from_file(curdir).unwrap(); let schm = init::SchemeInit::new().unwrap(); let res = schm.run(&lex, None).unwrap(); let resser = res.get("test10").unwrap().clone(); println!("Static: \n{:?}\n", res); let mut curdir = std::env::current_dir().unwrap(); curdir.push("examples/scheme_vector/test_vec1_data.shm"); let lex = lexer::Lexer::from_file(curdir).unwrap(); let dynenv = environment::DynEnvironment::new_root(resser.clone()).unwrap(); let dynres = environment::DynEnvironment::run(&lex, dynenv).unwrap(); println!("Dynamic: \n{:?}\n", dynres); let ret = serializator::Serialization::serialize(resser, dynres.clone()).unwrap(); let serialized = serde_json::to_string(&ret).unwrap(); let tr = CommonLevels { lvl_a: vec![-2..8, 4..5], lvl_b: vec![-4..=5, -6..=4], action_block: Some( vec![ LdActionExec{ executable: "test1".to_string()}, LdActionExec{ executable: "test2".to_string()}, ] ), action_unblock: None, }; let res = serde_json::to_string(&tr).unwrap(); println!("control: {}", res); let deser: CommonLevels = serde_json::from_str(&serialized).unwrap(); println!("{:?}", deser); if deser != tr { panic!("did not match!"); } else { println!("matched!"); } }