[INFO] updating cached repository https://github.com/df5602/interpreter_tutorial [INFO] running `"git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "-c" "remote.origin.fetch=refs/heads/*:refs/heads/*" "fetch" "origin" "--force" "--prune"` [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 56cce21a7c0ad1d6cbf3bcc5751fc2196ae345b2 [INFO] testing df5602/interpreter_tutorial against 1.44.0 for beta-1.45-1 [INFO] running `"git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdf5602%2Finterpreter_tutorial" "/workspace/builds/worker-8/source"` [INFO] [stderr] Cloning into '/workspace/builds/worker-8/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/df5602/interpreter_tutorial on toolchain 1.44.0 [INFO] running `"/workspace/cargo-home/bin/cargo" "+1.44.0" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started tweaking git repo https://github.com/df5602/interpreter_tutorial [INFO] finished tweaking git repo https://github.com/df5602/interpreter_tutorial [INFO] tweaked toml for git repo https://github.com/df5602/interpreter_tutorial written to /workspace/builds/worker-8/source/Cargo.toml [INFO] crate git repo https://github.com/df5602/interpreter_tutorial already has a lockfile, it will not be regenerated [INFO] running `"/workspace/cargo-home/bin/cargo" "+1.44.0" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-8/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-8/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "MAP_USER_ID=0" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--network" "none" "rustops/crates-build-env" "/opt/rustwide/cargo-home/bin/cargo" "+1.44.0" "build" "--frozen"` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] e6efdf02c8bce5bc162b76d601e8ef1d25744aeaa0ff8b8575a4a2ded0ed68dd [INFO] running `"docker" "start" "-a" "e6efdf02c8bce5bc162b76d601e8ef1d25744aeaa0ff8b8575a4a2ded0ed68dd"` [INFO] [stderr] sudo: setrlimit(RLIMIT_CORE): Operation not permitted [INFO] [stderr] Compiling leftpad v0.2.0 [INFO] [stderr] Compiling interpreter_tutorial v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | / macro_rules! int_node { [INFO] [stderr] 2 | | ($ast:expr, $value:expr) => {{ [INFO] [stderr] 3 | | let node = NumberNode::new(Value::Integer($value), [INFO] [stderr] 4 | | Token::new(TokenType::IntegerLiteral, [INFO] [stderr] ... | [INFO] [stderr] 8 | | }} [INFO] [stderr] 9 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_macros)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:11:1 [INFO] [stderr] | [INFO] [stderr] 11 | / macro_rules! real_node { [INFO] [stderr] 12 | | ($ast:expr, $value:expr) => {{ [INFO] [stderr] 13 | | let node = NumberNode::new(Value::Real($value), [INFO] [stderr] 14 | | Token::new(TokenType::RealLiteral, [INFO] [stderr] ... | [INFO] [stderr] 18 | | }} [INFO] [stderr] 19 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:21:1 [INFO] [stderr] | [INFO] [stderr] 21 | / macro_rules! binop_node { [INFO] [stderr] 22 | | ($ast:expr, $left:expr, $right:expr, $op:expr) => {{ [INFO] [stderr] 23 | | let node = BinaryOperatorNode::new($left, $right, $op, [INFO] [stderr] 24 | | Token::new(TokenType::Operator, [INFO] [stderr] ... | [INFO] [stderr] 28 | | }} [INFO] [stderr] 29 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:31:1 [INFO] [stderr] | [INFO] [stderr] 31 | / macro_rules! unop_node { [INFO] [stderr] 32 | | ($ast:expr, $operand:expr, $op:expr) => {{ [INFO] [stderr] 33 | | let node = UnaryOperatorNode::new($operand, $op, [INFO] [stderr] 34 | | Token::new(TokenType::Operator, [INFO] [stderr] ... | [INFO] [stderr] 38 | | }} [INFO] [stderr] 39 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:41:1 [INFO] [stderr] | [INFO] [stderr] 41 | / macro_rules! cmpd_stmt_node { [INFO] [stderr] 42 | | ($ast:expr, $statements:expr) => {{ [INFO] [stderr] 43 | | let node = CompoundStmtNode::new($statements, [INFO] [stderr] 44 | | Token::new(TokenType::Begin, None, Span::default()), [INFO] [stderr] ... | [INFO] [stderr] 47 | | }} [INFO] [stderr] 48 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:50:1 [INFO] [stderr] | [INFO] [stderr] 50 | / macro_rules! var_node { [INFO] [stderr] 51 | | ($ast:expr, $name:expr) => {{ [INFO] [stderr] 52 | | let node = VariableNode::new($name.to_string(), [INFO] [stderr] 53 | | Token::new(TokenType::Identifier, [INFO] [stderr] ... | [INFO] [stderr] 57 | | }} [INFO] [stderr] 58 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:60:1 [INFO] [stderr] | [INFO] [stderr] 60 | / macro_rules! assign_node { [INFO] [stderr] 61 | | ($ast:expr, $var:expr, $expr:expr) => {{ [INFO] [stderr] 62 | | let node = AssignmentStmtNode::new($var, $expr, [INFO] [stderr] 63 | | Token::new(TokenType::Assign, None, Span::default())); [INFO] [stderr] 64 | | $ast.add_node(node) [INFO] [stderr] 65 | | }} [INFO] [stderr] 66 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:68:1 [INFO] [stderr] | [INFO] [stderr] 68 | / macro_rules! block_node { [INFO] [stderr] 69 | | ($ast:expr, $declarations:expr, $cmpd_stmt:expr) => {{ [INFO] [stderr] 70 | | let node = BlockNode::new($declarations, $cmpd_stmt); [INFO] [stderr] 71 | | $ast.add_node(node) [INFO] [stderr] 72 | | }} [INFO] [stderr] 73 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:75:1 [INFO] [stderr] | [INFO] [stderr] 75 | / macro_rules! type_node { [INFO] [stderr] 76 | | ($ast:expr, $type_spec:expr) => {{ [INFO] [stderr] 77 | | let node = TypeNode::new($type_spec, [INFO] [stderr] 78 | | Token::new(TokenType::TypeSpecifier, [INFO] [stderr] ... | [INFO] [stderr] 82 | | }} [INFO] [stderr] 83 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:85:1 [INFO] [stderr] | [INFO] [stderr] 85 | / macro_rules! var_decl_node { [INFO] [stderr] 86 | | ($ast:expr, $var_name:expr, $type_spec:expr) => {{ [INFO] [stderr] 87 | | let node = VariableDeclNode::new($var_name, $type_spec); [INFO] [stderr] 88 | | $ast.add_node(node) [INFO] [stderr] 89 | | }} [INFO] [stderr] 90 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/ast/macros.rs:92:1 [INFO] [stderr] | [INFO] [stderr] 92 | / macro_rules! program_node { [INFO] [stderr] 93 | | ($ast:expr, $name:expr, $variable:expr, $block:expr) => {{ [INFO] [stderr] 94 | | let node = ProgramNode::new($name.to_string(), $variable, $block); [INFO] [stderr] 95 | | $ast.add_node(node) [INFO] [stderr] 96 | | }} [INFO] [stderr] 97 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:75:20 [INFO] [stderr] | [INFO] [stderr] 75 | nodes: Vec>, [INFO] [stderr] | ^^^^^^^^^^^^ help: use `dyn`: `dyn AstNode + 'a` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(bare_trait_objects)]` on by default [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:111:49 [INFO] [stderr] | [INFO] [stderr] 111 | pub fn get_node(&self, index: AstIndex) -> &AstNode { [INFO] [stderr] | ^^^^^^^ help: use `dyn`: `dyn AstNode` [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:121:61 [INFO] [stderr] | [INFO] [stderr] 121 | pub fn get_node_mut(&mut self, index: AstIndex) -> &mut AstNode { [INFO] [stderr] | ^^^^^^^ help: use `dyn`: `dyn AstNode` [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:126:39 [INFO] [stderr] | [INFO] [stderr] 126 | pub fn get_root(&self) -> Option<&AstNode> { [INFO] [stderr] | ^^^^^^^ help: use `dyn`: `dyn AstNode` [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/main.rs:53:50 [INFO] [stderr] | [INFO] [stderr] 53 | ... file_res.unwrap_err().description())); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(deprecated)]` on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/main.rs:59:77 [INFO] [stderr] | [INFO] [stderr] 59 | Err(why) => Err(format!("Couldn't read {}: {}", path.display(), why.description())), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/lexer/pascal_lexer.rs:221:34 [INFO] [stderr] | [INFO] [stderr] 221 | ... e.description(), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/lexer/pascal_lexer.rs:232:30 [INFO] [stderr] | [INFO] [stderr] 232 | ... e.description(), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: 19 warnings emitted [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 2.95s [INFO] running `"docker" "inspect" "e6efdf02c8bce5bc162b76d601e8ef1d25744aeaa0ff8b8575a4a2ded0ed68dd"` [INFO] running `"docker" "rm" "-f" "e6efdf02c8bce5bc162b76d601e8ef1d25744aeaa0ff8b8575a4a2ded0ed68dd"` [INFO] [stdout] e6efdf02c8bce5bc162b76d601e8ef1d25744aeaa0ff8b8575a4a2ded0ed68dd [INFO] running `"docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-8/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-8/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "MAP_USER_ID=0" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--network" "none" "rustops/crates-build-env" "/opt/rustwide/cargo-home/bin/cargo" "+1.44.0" "test" "--frozen" "--no-run"` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] 8e2577b8d9e8922c438e5bde36aa99b59d49e69d981873854bbf705f882b39b7 [INFO] running `"docker" "start" "-a" "8e2577b8d9e8922c438e5bde36aa99b59d49e69d981873854bbf705f882b39b7"` [INFO] [stderr] sudo: setrlimit(RLIMIT_CORE): Operation not permitted [INFO] [stderr] Compiling interpreter_tutorial v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ast/assignment_stmt_node.rs:251:50 [INFO] [stderr] | [INFO] [stderr] 251 | ... real_node!(ast, (i64::MAX as f64 + 1000.0))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_parens)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ast/assignment_stmt_node.rs:251:50 [INFO] [stderr] | [INFO] [stderr] 251 | ... real_node!(ast, (i64::MAX as f64 + 1000.0))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:75:20 [INFO] [stderr] | [INFO] [stderr] 75 | nodes: Vec>, [INFO] [stderr] | ^^^^^^^^^^^^ help: use `dyn`: `dyn AstNode + 'a` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(bare_trait_objects)]` on by default [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:111:49 [INFO] [stderr] | [INFO] [stderr] 111 | pub fn get_node(&self, index: AstIndex) -> &AstNode { [INFO] [stderr] | ^^^^^^^ help: use `dyn`: `dyn AstNode` [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:121:61 [INFO] [stderr] | [INFO] [stderr] 121 | pub fn get_node_mut(&mut self, index: AstIndex) -> &mut AstNode { [INFO] [stderr] | ^^^^^^^ help: use `dyn`: `dyn AstNode` [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:126:39 [INFO] [stderr] | [INFO] [stderr] 126 | pub fn get_root(&self) -> Option<&AstNode> { [INFO] [stderr] | ^^^^^^^ help: use `dyn`: `dyn AstNode` [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/main.rs:53:50 [INFO] [stderr] | [INFO] [stderr] 53 | ... file_res.unwrap_err().description())); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(deprecated)]` on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/main.rs:59:77 [INFO] [stderr] | [INFO] [stderr] 59 | Err(why) => Err(format!("Couldn't read {}: {}", path.display(), why.description())), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/lexer/pascal_lexer.rs:221:34 [INFO] [stderr] | [INFO] [stderr] 221 | ... e.description(), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/lexer/pascal_lexer.rs:232:30 [INFO] [stderr] | [INFO] [stderr] 232 | ... e.description(), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: 10 warnings emitted [INFO] [stderr] [INFO] [stderr] Finished test [unoptimized + debuginfo] target(s) in 5.06s [INFO] running `"docker" "inspect" "8e2577b8d9e8922c438e5bde36aa99b59d49e69d981873854bbf705f882b39b7"` [INFO] running `"docker" "rm" "-f" "8e2577b8d9e8922c438e5bde36aa99b59d49e69d981873854bbf705f882b39b7"` [INFO] [stdout] 8e2577b8d9e8922c438e5bde36aa99b59d49e69d981873854bbf705f882b39b7 [INFO] running `"docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-8/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-8/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "MAP_USER_ID=0" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--network" "none" "rustops/crates-build-env" "/opt/rustwide/cargo-home/bin/cargo" "+1.44.0" "test" "--frozen"` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] fd98cdc5882b23e06d07b9cb5564a6e35ce247926a861c42cabe0313a23b889f [INFO] running `"docker" "start" "-a" "fd98cdc5882b23e06d07b9cb5564a6e35ce247926a861c42cabe0313a23b889f"` [INFO] [stderr] sudo: setrlimit(RLIMIT_CORE): Operation not permitted [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ast/assignment_stmt_node.rs:251:50 [INFO] [stderr] | [INFO] [stderr] 251 | ... real_node!(ast, (i64::MAX as f64 + 1000.0))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_parens)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unnecessary parentheses around function argument [INFO] [stderr] --> src/ast/assignment_stmt_node.rs:251:50 [INFO] [stderr] | [INFO] [stderr] 251 | ... real_node!(ast, (i64::MAX as f64 + 1000.0))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:75:20 [INFO] [stderr] | [INFO] [stderr] 75 | nodes: Vec>, [INFO] [stderr] | ^^^^^^^^^^^^ help: use `dyn`: `dyn AstNode + 'a` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(bare_trait_objects)]` on by default [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:111:49 [INFO] [stderr] | [INFO] [stderr] 111 | pub fn get_node(&self, index: AstIndex) -> &AstNode { [INFO] [stderr] | ^^^^^^^ help: use `dyn`: `dyn AstNode` [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:121:61 [INFO] [stderr] | [INFO] [stderr] 121 | pub fn get_node_mut(&mut self, index: AstIndex) -> &mut AstNode { [INFO] [stderr] | ^^^^^^^ help: use `dyn`: `dyn AstNode` [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/ast/mod.rs:126:39 [INFO] [stderr] | [INFO] [stderr] 126 | pub fn get_root(&self) -> Option<&AstNode> { [INFO] [stderr] | ^^^^^^^ help: use `dyn`: `dyn AstNode` [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/main.rs:53:50 [INFO] [stderr] | [INFO] [stderr] 53 | ... file_res.unwrap_err().description())); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(deprecated)]` on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/main.rs:59:77 [INFO] [stderr] | [INFO] [stderr] 59 | Err(why) => Err(format!("Couldn't read {}: {}", path.display(), why.description())), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/lexer/pascal_lexer.rs:221:34 [INFO] [stderr] | [INFO] [stderr] 221 | ... e.description(), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string() [INFO] [stderr] --> src/lexer/pascal_lexer.rs:232:30 [INFO] [stderr] | [INFO] [stderr] 232 | ... e.description(), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: 10 warnings emitted [INFO] [stderr] [INFO] [stderr] Finished test [unoptimized + debuginfo] target(s) in 0.06s [INFO] [stderr] Running /opt/rustwide/target/debug/deps/interpreter_tutorial-b4c160fb7aa2fbc5 [INFO] [stdout] [INFO] [stdout] running 322 tests [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_get_span_returns_span ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_get_value_returns_none ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_get_children_returns_variable_and_expression ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_visit_converts_the_expression_to_target_type_integer ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_get_span_returns_span ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_visit_converts_the_expression_to_target_type_real ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_visit_casting_to_integer_with_overflow_returns_error ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_get_children_returns_left_and_right_children ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_get_value_returns_operator_value ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_visit_updates_entry_in_symbol_table_1 ... ok [INFO] [stdout] test ast::assignment_stmt_node::tests::assignment_statement_node_visit_updates_entry_in_symbol_table_2 ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_error_when_op_is_division_and_rhs_is_zero ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_error_when_subtraction_overflows ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_error_when_addition_overflows ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_error_when_multiplication_overflows ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_product_of_integer_nodes_when_op_is_multiplication ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_error_when_division_overflows ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_difference_of_integer_nodes_when_op_is_subtraction ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_integer_div_gives_floored_quotient_if_one_operand_is_real ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_quotient_of_integer_nodes_when_op_is_int_division ... ok [INFO] [stdout] test ast::block_node::tests::block_node_visit_returns_void ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_quotient_of_nodes_when_op_is_float_division ... ok [INFO] [stdout] test ast::compound_stmt_node::tests::compound_statement_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::compound_stmt_node::tests::compound_statement_node_get_span_returns_span ... ok [INFO] [stdout] test ast::compound_stmt_node::tests::compound_statement_node_get_value_returns_none ... ok [INFO] [stdout] test ast::compound_stmt_node::tests::compound_statement_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test ast::compound_stmt_node::tests::compound_statement_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::compound_stmt_node::tests::compound_statement_node_visit_returns_void ... ok [INFO] [stdout] test ast::number_node::tests::number_node_get_children_returns_no_children ... ok [INFO] [stdout] test ast::number_node::tests::number_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::number_node::tests::number_node_get_span_returns_span ... ok [INFO] [stdout] test ast::number_node::tests::number_node_get_value_returns_integer_value_if_it_contains_integer_value ... ok [INFO] [stdout] test ast::number_node::tests::number_node_get_value_returns_real_value_if_it_contains_real_value ... ok [INFO] [stdout] test ast::number_node::tests::number_node_new_should_set_span_to_token_span ... ok [INFO] [stdout] test ast::number_node::tests::number_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test ast::number_node::tests::number_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::number_node::tests::number_node_visit_returns_integer_value_if_node_contains_integer_value ... ok [INFO] [stdout] test ast::number_node::tests::number_node_visit_returns_real_value_if_node_contains_real_value ... ok [INFO] [stdout] test ast::program_node::tests::program_node_get_children_returns_variable_and_block_nodes ... ok [INFO] [stdout] test ast::program_node::tests::program_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::program_node::tests::program_node_get_span_returns_span ... ok [INFO] [stdout] test ast::program_node::tests::program_node_get_value_returns_name ... ok [INFO] [stdout] test ast::program_node::tests::program_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test ast::program_node::tests::program_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::program_node::tests::program_node_visit_returns_void ... ok [INFO] [stdout] test ast::program_node::tests::program_node_visit_visits_block ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_real_sum_if_at_least_one_operand_is_a_real ... ok [INFO] [stdout] test ast::block_node::tests::block_node_get_children_returns_declarations_and_compound_statement ... ok [INFO] [stdout] test ast::tests::ast_add_node_create_contiguous_graph_when_non_connected_node_is_child_of_connected_node ... ok [INFO] [stdout] test ast::block_node::tests::block_node_get_span_returns_span ... ok [INFO] [stdout] test ast::block_node::tests::block_node_get_value_returns_none ... ok [INFO] [stdout] test ast::block_node::tests::block_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test ast::block_node::tests::block_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::compound_stmt_node::tests::compound_statement_node_get_children_returns_statements ... ok [INFO] [stdout] test ast::block_node::tests::block_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_real_difference_if_at_least_one_operand_is_real ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_sum_of_integer_nodes_when_op_is_addition ... ok [INFO] [stdout] test ast::tests::ast_newly_created_graph_should_have_no_root ... ok [INFO] [stdout] test ast::type_node::tests::type_node_get_children_returns_no_children ... ok [INFO] [stdout] test ast::type_node::tests::type_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::tests::ast_add_node_parent_links_are_updated_when_node_with_child_links_is_added ... ok [INFO] [stdout] test ast::binary_operator_node::tests::binary_operator_node_visit_returns_real_product_if_at_least_one_operand_is_real ... ok [INFO] [stdout] test ast::block_node::tests::block_node_visit_returns_error_when_visited_declaration_returns_error ... ok [INFO] [stdout] test ast::block_node::tests::block_node_visit_visits_compound_statement ... ok [INFO] [stdout] test ast::tests::ast_add_node_returns_one_after_second_element_is_added ... ok [INFO] [stdout] test ast::tests::ast_add_node_returns_zero_after_first_element_is_added ... ok [INFO] [stdout] test ast::tests::ast_add_node_root_points_to_first_added_element_when_two_unrelated_nodes_are_added ... ok [INFO] [stdout] test ast::tests::ast_add_node_creates_contiguous_graph_when_first_node_is_added ... ok [INFO] [stdout] test ast::tests::ast_add_node_sets_root_to_inserted_node_when_first_node_is_added ... ok [INFO] [stdout] test ast::tests::ast_add_node_sets_root_to_parent_node_when_parent_of_root_is_set ... ok [INFO] [stdout] test ast::tests::ast_add_node_creates_non_contiguous_graph_when_two_unrelated_nodes_are_added ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test ast::tests::ast_graph_with_two_disconnected_graphs_is_not_contiguous ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_get_span_returns_span ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_get_value_returns_operator_value ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_get_children_returns_operand ... ok [INFO] [stdout] test ast::block_node::tests::block_node_visit_visits_declarations ... ok [INFO] [stdout] test ast::type_node::tests::type_node_new_should_set_span_to_token_span ... ok [INFO] [stdout] test ast::type_node::tests::type_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::type_node::tests::type_node_get_value_returns_type ... ok [INFO] [stdout] test ast::type_node::tests::type_node_visit_returns_void ... ok [INFO] [stdout] test ast::type_node::tests::type_node_get_span_returns_span ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_visit_returns_error_when_subtraction_overflows ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_visit_returns_integer_operand_when_op_is_addition ... ok [INFO] [stdout] test ast::variable_decl_node::tests::variable_decl_node_get_span_returns_span ... ok [INFO] [stdout] test ast::variable_decl_node::tests::variable_decl_node_get_value_returns_none ... ok [INFO] [stdout] test ast::variable_decl_node::tests::variable_decl_node_get_children_returns_variable_and_type ... ok [INFO] [stdout] test ast::variable_decl_node::tests::variable_decl_node_visit_added_entry_has_correct_type ... ok [INFO] [stdout] test ast::variable_decl_node::tests::variable_decl_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::variable_decl_node::tests::variable_decl_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_visit_returns_negative_real_operand_when_op_is_subtraction ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_visit_returns_real_operand_when_op_is_addition ... ok [INFO] [stdout] test ast::type_node::tests::type_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test ast::type_node::tests::type_node_set_span_sets_span ... ok [INFO] [stdout] test ast::variable_decl_node::tests::variable_decl_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test ast::unary_operator_node::tests::unary_operator_node_visit_returns_negative_integer_operand_when_op_is_subtraction ... ok [INFO] [stdout] test ast::variable_node::tests::variable_node_set_parent_sets_parent_node ... ok [INFO] [stdout] test ast::variable_node::tests::variable_node_visit_returns_error_if_variable_doesnt_exist ... ok [INFO] [stdout] test ast::variable_node::tests::variable_node_get_children_returns_no_children ... ok [INFO] [stdout] test ast::variable_node::tests::variable_node_visit_returns_value_if_variable_exists ... ok [INFO] [stdout] test ast::variable_decl_node::tests::variable_decl_node_visit_returns_error_if_entry_already_exists ... ok [INFO] [stdout] test ast::variable_node::tests::variable_node_get_parent_returns_none_when_node_has_no_parent ... ok [INFO] [stdout] test ast::variable_node::tests::variable_node_get_span_returns_span ... ok [INFO] [stdout] test ast::variable_node::tests::variable_node_get_value_returns_variable_name ... ok [INFO] [stdout] test ast::variable_node::tests::variable_node_visit_returns_error_if_variable_is_uninitialized ... ok [INFO] [stdout] test interpreter::tests::interpreter_assigns_multiple_variables ... ok [INFO] [stdout] test interpreter::tests::interpreter_can_assign_value_of_expression_with_variable_to_other_variable ... ok [INFO] [stdout] test interpreter::tests::interpreter_can_assign_value_of_variable_to_other_variable ... ok [INFO] [stdout] test interpreter::tests::interpreter_returns_error_when_number_is_assigned_to_undeclared_variable ... ok [INFO] [stdout] test ast::variable_decl_node::tests::variable_decl_node_visit_adds_entry_to_symbol_table ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_add_values_when_expression_is_addition ... ok [INFO] [stdout] test ast::variable_node::tests::variable_node_set_parent_fails_when_node_already_has_parent ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_interpret_chained_additions ... ok [INFO] [stdout] test interpreter::tests::interpreter_returns_error_when_assigning_unknown_variable_to_other_variable ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_interpret_chained_multiplications ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_divide_values_when_expression_is_division ... ok [INFO] [stdout] test interpreter::tests::interpreter_returns_result_of_expr_if_input_consists_of_expr_in_parentheses ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_evaluate_chained_additions_and_subtractions_from_left_to_right ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_evaluate_chained_multiplications_and_divisions_from_left_to_right ... ok [INFO] [stdout] test interpreter::tests::interpreter_returns_integer_if_input_consists_of_integer_in_parentheses ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_return_negative_number_when_result_of_subtraction_is_negative ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_return_error_when_division_by_zero ... ok [INFO] [stdout] test lexer::mock_lexer::tests::mocklexer_returns_eof_when_no_more_tokens_are_available ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_return_integer_value_if_input_consists_of_only_integer ... ok [INFO] [stdout] test interpreter::tests::interpreter_can_evaluate_nested_expressions ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_subtract_values_when_expression_is_subtraction ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_return_integer_when_expression_is_unary_plus ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_evaluate_chained_unary_operators ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_give_precedence_to_multiplication_and_division ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_negate_expression_when_expression_is_prefixed_with_unary_minus ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_multiply_values_when_expression_is_multiplication ... ok [INFO] [stdout] test lexer::mock_lexer::tests::mocklexer_returns_token_with_value_none_when_encountering_novalue ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_advances_position_correctly_for_assign_token ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_doesnt_ret_assign_tok_when_input_is_colon_not_followed_by_eq_sign ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_doesnt_return_assign_token_when_input_is_only_colon ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_non_alphanumeric_characters_are_not_part_of_identifier ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_assign_token_when_input_is_assignment_operator ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_begin_token_when_input_is_begin_keyword_uppercase ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_doesnt_return_colon_token_when_input_is_colon_followed_by_eq ... ok [INFO] [stdout] test lexer::mock_lexer::tests::mocklexer_returns_second_token_when_calling_get_next_token_for_the_second_time ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_accepts_floating_point_numbers_with_leading_dot ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_identifiers_dont_end_with_underscore ... ok [INFO] [stdout] test interpreter::tests::interpreter_handles_nested_compound_statements ... ok [INFO] [stdout] test lexer::mock_lexer::tests::mocklexer_returns_first_token_when_calling_get_next_token_for_the_first_time ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_identifiers_dont_start_with_digit ... ok [INFO] [stdout] test interpreter::tests::interpreter_should_negate_integer_when_expression_is_unary_minus ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_identifiers_can_start_with_underscore ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_identifier_token_with_id_value_when_input_is_string ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_identifier_token_when_input_is_string ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_identifier_token_when_input_contains_digits ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_float_division_when_input_is_float_division ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_left_parenthesis_when_input_is_left_parenthesis ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_integer_value_when_input_is_digit ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_minus_when_input_is_minus ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_op_value_float_division_when_input_is_float_division ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_next_token_when_called_second_time ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_op_value_integer_division_when_input_is_integer_division ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_integer_division_when_input_is_integer_division ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_end_token_when_input_is_end_keyword_uppercase ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_integer_when_input_is_digit ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_eof_when_input_is_empty ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_comma_token_when_input_is_comma ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_dot_token_when_input_is_dot ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_begin_token_when_input_is_begin_keyword_mixed_case ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_colon_token_when_input_is_colon ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_end_token_when_input_is_end_keyword_lowercase ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_operator_value_times_when_input_is_operator_times ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_operator_value_plus_when_input_is_operator_plus ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_plus_when_input_is_plus ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_program_token_when_input_is_program_keyword ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_right_parenthesis_when_input_is_right_parenthesis ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_semicolon_token_when_input_is_semicolon ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_times_when_input_is_times ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_token_or_error_when_input_is_not_empty ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_type_integer_when_input_is_integer_keyword ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_type_specifier_token_when_input_is_integer_keyword ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_type_specifier_token_when_input_is_real_keyword ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_should_handle_whitespace_after_comment ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_var_token_when_input_is_var_keyword ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_operator_value_minus_when_input_is_operator_minus ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_returns_type_real_when_input_is_real_keyword ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_advances_position_correctly_when_parsing_float_with_trailing_dot ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_only_advances_as_long_as_there_are_more_digits_in_the_flt_number ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_should_only_advance_as_long_as_there_are_more_digits ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_returns_floating_point_number ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_should_advance_position_correctly_when_parsing_float ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_advances_position_correctly_when_parsing_float_with_leading_dot ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_accepts_floating_point_numbers_with_trailing_dot ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_should_recognize_expressions_that_contain_multi_digit_integer ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_accepts_floating_point_numbers_with_leading_dot ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_should_return_error_when_input_is_larger_than_fit_in_i64 ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_should_return_number_when_input_fits_in_i64 ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_should_skip_double_comments_separated_by_whitespace ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_should_recognize_expressions_that_begin_with_whitespace_characters ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_should_skip_double_comments ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_returns_multi_digit_integer ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_should_skip_single_comment ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_should_advance_position_correctly ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_identifiers_are_case_insensitive ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_parse_number_returns_floating_point_number_with_only_one_point ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_get_next_token_should_skip_comments ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_should_recognize_expressions_that_contain_whitespace_characters ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_skip_comments_should_skip_all_characters_enclosed_in_curly_braces ... ok [INFO] [stdout] test parser::tests::parser_block_parses_compound_statement ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_skip_whitespace_should_not_skip_non_whitespace_characters ... ok [INFO] [stdout] test parser::tests::parser_block_parses_declarations_and_compound_statement ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_skip_whitespace_should_skip_all_whitespaces_until_first_non_whitespace_char ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_returns_error_when_missing_assignment_operator ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_returns_error_when_missing_variable ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_returns_error_when_two_expressions_on_rhs ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_parses_assignment_statement ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_returns_error_when_two_variables_on_lhs ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_doesnt_parse_assignment_without_assign_token_in_the_middle ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_returns_error_when_having_two_assignment_operators ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_parses_assignment_statement_with_expression ... ok [INFO] [stdout] test parser::tests::parser_block_returns_error_if_two_declaration_lists_are_present ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_doesnt_parse_assignment_without_variable_on_the_left ... ok [INFO] [stdout] test parser::tests::parser_assignment_statement_doesnt_parse_assignment_without_expression_on_the_right ... ok [INFO] [stdout] test parser::tests::parser_block_returns_error_if_two_compound_statements_are_present ... ok [INFO] [stdout] test lexer::pascal_lexer::tests::lexer_skip_whitespace_should_skip_all_whitespaces_until_eof ... ok [INFO] [stdout] test parser::tests::parser_compound_statement_parses_nested_compound_statement ... ok [INFO] [stdout] test parser::tests::parser_block_returns_error_if_compound_statement_is_missing ... ok [INFO] [stdout] test parser::tests::parser_compound_statement_parses_compound_statement ... ok [INFO] [stdout] test parser::tests::parser_compound_statement_parses_empty_statement_list ... ok [INFO] [stdout] test parser::tests::parser_compound_statement_returns_error_when_begin_is_missing ... ok [INFO] [stdout] test parser::tests::parser_compound_statement_returns_error_when_end_is_missing ... ok [INFO] [stdout] test parser::tests::parser_compound_statement_returns_error_when_begin_is_repeated_without_matching_end ... ok [INFO] [stdout] test parser::tests::parser_declarations_parses_multiple_variable_declarations ... ok [INFO] [stdout] test parser::tests::parser_compound_statement_returns_error_when_statements_arent_separated_with_semicolons ... ok [INFO] [stdout] test parser::tests::parser_declarations_parses_variable_declarations ... ok [INFO] [stdout] test parser::tests::parser_expr_should_not_parse_empty_string ... ok [INFO] [stdout] test parser::tests::parser_expr_should_create_operator_node_when_expression_is_subtraction ... ok [INFO] [stdout] test parser::tests::parser_declarations_returns_error_if_declarations_are_not_terminated_by_semicolon ... ok [INFO] [stdout] test parser::tests::parser_declarations_returns_error_if_declarations_are_terminated_by_two_semicolons ... ok [INFO] [stdout] test parser::tests::parser_declarations_returns_no_declarations_if_no_variable_declarations_are_present ... ok [INFO] [stdout] test parser::tests::parser_expr_should_create_operator_node_when_expression_is_addition ... ok [INFO] [stdout] test parser::tests::parser_expr_should_not_parse_expressions_that_dont_terminate_with_eof ... ok [INFO] [stdout] test parser::tests::parser_factor_creates_integer_node_if_input_consists_of_integer_in_parentheses ... ok [INFO] [stdout] test parser::tests::parser_factor_creates_unary_operator_node_if_input_consists_of_unary_plus ... ok [INFO] [stdout] test parser::tests::parser_factor_creates_graph_of_expr_if_input_consists_of_expr_in_parentheses ... ok [INFO] [stdout] test parser::tests::parser_compound_statement_returns_error_when_end_occurs_twice ... ok [INFO] [stdout] test parser::tests::parser_declarations_returns_error_if_declarations_are_not_separated_by_semicolon ... ok [INFO] [stdout] test parser::tests::parser_expr_should_not_parse_expressions_that_dont_have_integer_after_operator ... ok [INFO] [stdout] test parser::tests::parser_factor_returns_error_if_parentheses_are_mismatched ... ok [INFO] [stdout] test parser::tests::parser_factor_creates_unary_operator_node_if_input_consists_of_unary_minus ... ok [INFO] [stdout] test parser::tests::parser_declarations_returns_error_if_var_is_directly_followed_by_semicolon ... ok [INFO] [stdout] test parser::tests::parser_declarations_returns_error_if_var_is_not_followed_by_variable_declarations ... ok [INFO] [stdout] test parser::tests::parser_eat_should_consume_token_if_it_has_the_correct_type ... ok [INFO] [stdout] test parser::tests::parser_declarations_returns_error_if_var_token_is_missing ... ok [INFO] [stdout] test parser::tests::parser_eat_should_not_consume_token_if_it_has_the_wrong_type ... ok [INFO] [stdout] test parser::tests::parser_declarations_returns_error_if_var_token_is_repeated ... ok [INFO] [stdout] test parser::tests::parser_expr_should_create_integer_node_if_input_consists_of_only_integer ... ok [INFO] [stdout] test parser::tests::parser_factor_returns_error_if_operator_is_followed_by_rparen ... ok [INFO] [stdout] test parser::tests::parser_factor_returns_error_if_input_consists_of_unary_division ... ok [INFO] [stdout] test parser::tests::parser_factor_returns_error_if_input_consists_of_unary_times ... ok [INFO] [stdout] test parser::tests::parser_factor_returns_error_if_lparen_is_followed_by_rparen ... ok [INFO] [stdout] test parser::tests::parser_program_parses_program_name ... ok [INFO] [stdout] test parser::tests::parser_factor_creates_variable_node_when_it_encounters_identifier ... ok [INFO] [stdout] test parser::tests::parser_factor_should_return_integer_node_if_input_consists_of_only_integer ... ok [INFO] [stdout] test parser::tests::parser_program_returns_error_when_compound_statement_is_missing ... ok [INFO] [stdout] test parser::tests::parser_program_parses_program ... ok [INFO] [stdout] test parser::tests::parser_factor_should_return_real_node_if_input_consists_of_real_literal ... ok [INFO] [stdout] test parser::tests::parser_program_returns_error_when_program_keyword_is_missing ... ok [INFO] [stdout] test parser::tests::parser_program_returns_error_when_program_keyword_occurs_twice ... ok [INFO] [stdout] test parser::tests::parser_program_returns_error_when_program_name_is_missing ... ok [INFO] [stdout] test parser::tests::parser_program_returns_error_when_semicolon_after_program_name_is_missing ... ok [INFO] [stdout] test parser::tests::parser_program_returns_error_when_dot_is_missing ... ok [INFO] [stdout] test parser::tests::parser_program_returns_error_when_program_has_two_names ... ok [INFO] [stdout] test parser::tests::parser_load_first_token_should_load_first_token ... ok [INFO] [stdout] test parser::tests::parser_parse_returns_error_when_ends_with_two_dots ... ok [INFO] [stdout] test parser::tests::parser_statement_list_returns_only_first_stmt_when_stmts_are_not_separated_by_semicolon ... ok [INFO] [stdout] test parser::tests::parser_statement_returns_compound_statement_if_statement_is_compound_statement ... ok [INFO] [stdout] test parser::tests::parser_statement_returns_none_if_no_statement_is_present ... ok [INFO] [stdout] test parser::tests::parser_term_should_create_operator_node_when_expression_is_float_division ... ok [INFO] [stdout] test parser::tests::parser_term_should_create_operator_node_when_expression_is_multiplication ... ok [INFO] [stdout] test parser::tests::parser_statement_list_returns_error_when_statements_not_separated_by_semicolon ... ok [INFO] [stdout] test parser::tests::parser_start_returns_error_if_parentheses_are_mismatched ... ok [INFO] [stdout] test parser::tests::parser_statement_returns_assignment_statement_if_statement_is_assignment_statement ... ok [INFO] [stdout] test parser::tests::parser_statement_list_returns_error_when_multiple_statements_not_separated_by_semicolon ... ok [INFO] [stdout] test parser::tests::parser_statement_list_returns_two_statements_when_statements_are_separated_by_semicolon ... ok [INFO] [stdout] test parser::tests::parser_term_should_return_integer_node_if_input_consists_of_only_integer ... ok [INFO] [stdout] test parser::tests::parser_type_spec_parses_integer_type_specifier ... ok [INFO] [stdout] test parser::tests::parser_term_should_not_parse_expressions_that_dont_terminate_with_eof ... ok [INFO] [stdout] test parser::tests::parser_term_should_create_operator_node_when_expression_is_integer_division ... ok [INFO] [stdout] test parser::tests::parser_term_should_not_parse_expressions_that_dont_have_integer_after_operator ... ok [INFO] [stdout] test parser::tests::parser_statement_list_parses_empty_input ... ok [INFO] [stdout] test parser::tests::parser_statement_list_can_begin_with_semicolon ... ok [INFO] [stdout] test parser::tests::parser_term_should_not_parse_empty_string ... ok [INFO] [stdout] test parser::tests::parser_type_spec_parses_real_integer_specifier ... ok [INFO] [stdout] test parser::tests::parser_statement_list_can_end_with_semicolon ... ok [INFO] [stdout] test parser::tests::parser_statement_list_returns_three_statements_when_given_three_statements ... ok [INFO] [stdout] test parser::tests::parser_statement_returns_error_when_both_statement_types_are_not_separated_by_semicolon ... ok [INFO] [stdout] test parser::tests::parser_program_returns_error_when_two_compound_statements_are_present ... ok [INFO] [stdout] test parser::tests::parser_statement_list_returns_assignment_statement_if_statement_is_assignment ... ok [INFO] [stdout] test parser::tests::parser_program_returns_error_when_two_semicolons_after_program_name ... ok [INFO] [stdout] test parser::tests::parser_type_spec_returns_error_when_two_different_type_specifiers_are_present ... ok [INFO] [stdout] test parser::tests::parser_var_decl_returns_err_when_second_and_third_identifier_are_not_separated_by_comma ... ok [INFO] [stdout] test parser::tests::parser_var_decl_returns_error_when_no_type_specifier_is_present ... ok [INFO] [stdout] test parser::tests::parser_var_decl_returns_error_when_two_identifiers_are_separated_by_two_commas ... ok [INFO] [stdout] test parser::tests::parser_var_decl_parses_single_variable_declaration ... ok [INFO] [stdout] test parser::tests::parser_var_decl_parses_three_variable_declarations ... ok [INFO] [stdout] test parser::tests::parser_type_spec_returns_error_when_two_integer_type_specifiers_are_present ... ok [INFO] [stdout] test parser::tests::parser_var_decl_returns_error_when_no_identifier_is_present ... ok [INFO] [stdout] test parser::tests::parser_var_decl_returns_error_when_two_identifiers_are_not_separated_by_comma ... ok [INFO] [stdout] test parser::tests::parser_variable_returns_error_when_token_is_no_identifier ... ok [INFO] [stdout] test parser::tests::parser_var_decl_returns_error_when_type_specifier_is_separated_by_two_colons ... ok [INFO] [stdout] test parser::tests::parser_variable_creates_variable_node_when_token_is_identifier ... ok [INFO] [stdout] test parser::tests::parser_type_spec_returns_error_when_two_real_type_specifiers_are_present ... ok [INFO] [stdout] test parser::tests::parser_var_decl_parses_two_variable_declarations ... ok [INFO] [stdout] test parser::tests::parser_var_decl_returns_error_when_no_identifier_is_present_after_comma ... ok [INFO] [stdout] test parser::tests::parser_var_decl_returns_error_when_two_type_specifiers_are_present ... ok [INFO] [stdout] test parser::tests::parser_type_spec_returns_error_when_no_type_specifier_is_present ... ok [INFO] [stdout] test parser::tests::parser_var_decl_returns_error_when_type_specifier_is_not_after_colon ... ok [INFO] [stdout] test ast::tests::ast_add_node_cannot_set_parent_of_node_which_already_has_a_parent ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 322 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out [INFO] [stdout] [INFO] running `"docker" "inspect" "fd98cdc5882b23e06d07b9cb5564a6e35ce247926a861c42cabe0313a23b889f"` [INFO] running `"docker" "rm" "-f" "fd98cdc5882b23e06d07b9cb5564a6e35ce247926a861c42cabe0313a23b889f"` [INFO] [stdout] fd98cdc5882b23e06d07b9cb5564a6e35ce247926a861c42cabe0313a23b889f