test closures!
This commit is contained in:
parent
af28442913
commit
2167b524ec
|
|
@ -548,4 +548,51 @@ mod tests {
|
||||||
let the_answerer = remember.call(None, &[Some(42.into())]);
|
let the_answerer = remember.call(None, &[Some(42.into())]);
|
||||||
assert_eq!(call(&the_answerer, &[]), Some(42.into()));
|
assert_eq!(call(&the_answerer, &[]), Some(42.into()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_rw() {
|
||||||
|
let make_cell = Function {
|
||||||
|
name: Some("make_cell".into()),
|
||||||
|
args: vec![],
|
||||||
|
body: vec![Statement::Local {
|
||||||
|
name: "data".into(),
|
||||||
|
init: None,
|
||||||
|
}],
|
||||||
|
ret: Some(Box::new(Expression::new_table(
|
||||||
|
[
|
||||||
|
(
|
||||||
|
"get",
|
||||||
|
Expression::Function(Function {
|
||||||
|
name: None,
|
||||||
|
args: vec![],
|
||||||
|
body: vec![],
|
||||||
|
ret: Some(Box::new(Expression::new_variable("data"))),
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"set",
|
||||||
|
Expression::Function(Function {
|
||||||
|
name: None,
|
||||||
|
args: vec!["value".into()],
|
||||||
|
body: vec![Statement::Assign {
|
||||||
|
target: Location::new_variable("data"),
|
||||||
|
source: Box::new(Expression::new_variable("value")),
|
||||||
|
}],
|
||||||
|
ret: None,
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
.into_iter(),
|
||||||
|
))),
|
||||||
|
};
|
||||||
|
let make_cell = build(&make_cell);
|
||||||
|
let cell1 = make_cell.call(None, &[]);
|
||||||
|
let cell2 = make_cell.call(None, &[]);
|
||||||
|
assert_eq!(call(&get(&cell1, "get"), &[]), None);
|
||||||
|
call(&get(&cell1, "set"), &[Some(42.into())]);
|
||||||
|
call(&get(&cell2, "set"), &[Some("foobar".into())]);
|
||||||
|
assert_eq!(call(&get(&cell1, "get"), &[]), Some(42.into()));
|
||||||
|
call(&get(&cell1, "set"), &[call(&get(&cell2, "get"), &[])]);
|
||||||
|
assert_eq!(call(&get(&cell1, "get"), &[]), Some("foobar".into()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user