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<Range<i64>>,
pub lvl_b: Vec<RangeInclusive<i64>>,
pub action_block: Option<Vec<LdActionExec>>,
pub action_unblock: Option<Vec<LdActionExec>>,
}
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());
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!");
}
}