use flexcell::FlexCell;
#[derive(Debug)]
struct Node {
value: i32,
next: Option<Box<Node>>,
}
impl Node {
fn new(value: i32) -> Self {
Node { value, next: None }
}
}
fn recursive_build(head: &FlexCell<Node>, start: i32, end: i32) {
if start >= end {
return;
}
let mut new_node = Node::new(start);
head.lend(&mut new_node, || {
recursive_build(head, start + 1, end);
});
head.with_mut(|head_node| {
head_node.next = Some(Box::new(new_node));
});
}
fn main() {
let head = FlexCell::new(Node::new(0));
recursive_build(&head, 1, 4);
head.with(|node| {
let mut current = Some(node);
let mut expected = 0;
while let Some(n) = current {
assert_eq!(n.value, expected);
expected += 1;
current = n.next.as_deref();
}
assert_eq!(expected, 4);
});
}