1use crate::value::Value;
2use tidepool_repr::VarId;
3use im::HashMap;
4
5pub type Env = HashMap<VarId, Value>;
8
9#[cfg(test)]
10mod tests {
11 use super::*;
12 use tidepool_repr::Literal;
13
14 #[test]
15 fn test_env_sharing() {
16 let env1 = Env::new();
17 let var1 = VarId(1);
18 let val1 = Value::Lit(Literal::LitInt(10));
19
20 let mut env2 = env1.clone();
21 env2.insert(var1, val1.clone());
22
23 assert!(env1.get(&var1).is_none());
24 assert_eq!(
25 match env2.get(&var1) {
26 Some(Value::Lit(Literal::LitInt(n))) => *n,
27 _ => 0,
28 },
29 10
30 );
31
32 let mut env3 = env2.clone();
33 let var2 = VarId(2);
34 let val2 = Value::Lit(Literal::LitInt(20));
35 env3.insert(var2, val2);
36
37 assert_eq!(env2.len(), 1);
38 assert_eq!(env3.len(), 2);
39 }
40}