rune-testing 0.6.15

Test helpers for Rune, an embeddable dynamic programming language for Rust.
Documentation
use rune_testing::*;

#[test]
fn test_linked_list() {
    assert_eq! {
        rune! {
            Vec<i64> => r#"
            /// An empty placeholder in a node.
            struct Empty;

            /// A single node in the linked list.
            struct Node {
                value,
                next,
            }

            /// The linked list.
            struct List {
                first,
                last,
            }

            impl List {
                /// Construct a new linked list.
                fn new() {
                    List {
                        first: Empty,
                        last: Empty,
                    }
                }

                /// Construct an iterator over the linked list.
                fn iter(self) {
                    Iter {
                        current: self.first,
                    }
                }

                /// Push an element to the back of the linked list.
                fn push_back(self, value) {
                    let prev = self.last;

                    self.last = Node {
                        value,
                        next: Empty,
                    };

                    if prev is Empty {
                        self.first = self.last;
                    } else {
                        prev.next = self.last;
                    }
                }
            }

            struct Iter {
                current,
            }

            impl Iter {
                /// Iterate over the next element.
                fn next(self) {
                    if self.current is Empty {
                        return None;
                    }

                    let value = self.current;
                    self.current = value.next;
                    Some(value.value)
                }
            }

            fn main() {
                let ll = List::new();
                ll.push_back(1);
                ll.push_back(2);
                ll.push_back(3);

                let it = ll.iter();

                let out = [];

                while let Some(value) = Iter::next(it) {
                    out.push(value);
                }

                out
            }
            "#
        },
        vec![1, 2, 3],
    };
}