From 7ed9cdf55d195060e249cd4e241a717530d6760b Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 5 Sep 2026 12:50:44 +0000 Subject: [PATCH] feat: division by zero evaluation error Dividing an integer by zero panicked the interpreter rather than returning an evaluation error, aborting the process in a script and killing the REPL. Handle a zero right hand operand explicitly in the Divide arm of the integer infix evaluation, bailing with a descriptive message consistent with the existing type mismatch and unknown operator errors. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01XWga463nCyZF4gUTekcdUn --- src/evaluator/expression/infix/mod.rs | 12 ++++-- .../mod.rs | 37 +++++++++++++++++++ ...ix_expression_case_1_evaluation_error.snap | 7 ++++ ...ix_expression_case_1_lexical_analysis.snap | 13 +++++++ ...fix_expression_case_1_syntax_analysis.snap | 17 +++++++++ ...ix_expression_case_2_evaluation_error.snap | 7 ++++ ...ix_expression_case_2_lexical_analysis.snap | 13 +++++++ ...fix_expression_case_2_syntax_analysis.snap | 17 +++++++++ ...ix_expression_case_3_evaluation_error.snap | 7 ++++ ...ix_expression_case_3_lexical_analysis.snap | 14 +++++++ ...fix_expression_case_3_syntax_analysis.snap | 19 ++++++++++ ...ix_expression_case_4_evaluation_error.snap | 7 ++++ ...ix_expression_case_4_lexical_analysis.snap | 19 ++++++++++ ...fix_expression_case_4_syntax_analysis.snap | 23 ++++++++++++ ...ix_expression_case_5_evaluation_error.snap | 7 ++++ ...ix_expression_case_5_lexical_analysis.snap | 23 ++++++++++++ ...fix_expression_case_5_syntax_analysis.snap | 25 +++++++++++++ src/tests/evaluation_error/mod.rs | 1 + 18 files changed, 265 insertions(+), 3 deletions(-) create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_evaluation_error.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_lexical_analysis.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_syntax_analysis.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_evaluation_error.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_lexical_analysis.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_syntax_analysis.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_evaluation_error.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_lexical_analysis.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_syntax_analysis.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_evaluation_error.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_lexical_analysis.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_syntax_analysis.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_evaluation_error.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_lexical_analysis.snap create mode 100644 src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_syntax_analysis.snap diff --git a/src/evaluator/expression/infix/mod.rs b/src/evaluator/expression/infix/mod.rs index 4524dbf..6150120 100644 --- a/src/evaluator/expression/infix/mod.rs +++ b/src/evaluator/expression/infix/mod.rs @@ -43,9 +43,15 @@ impl Evaluator { InfixOperator::Multiply => Ok(Object::Integer { value: left_value * right_value, }), - InfixOperator::Divide => Ok(Object::Integer { - value: left_value / right_value, - }), + InfixOperator::Divide => match right_value { + 0 => anyhow::bail!( + "Division by zero, cannot apply the {} infix operator to a right hand operand of 0.", + operator + ), + right_value => Ok(Object::Integer { + value: left_value / right_value, + }), + }, InfixOperator::GreaterThan => match left_value > right_value { true => Ok(Object::True), false => Ok(Object::False), diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs new file mode 100644 index 0000000..b260f38 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs @@ -0,0 +1,37 @@ +use super::*; + +#[template] +#[rstest( + code, + snapshot_name, + case("5 / 0", "division_by_zero_integer_infix_expression_case_1"), + case("0 / 0", "division_by_zero_integer_infix_expression_case_2"), + case("-5 / 0", "division_by_zero_integer_infix_expression_case_3"), + case("10 / (5 - 5)", "division_by_zero_integer_infix_expression_case_4"), + case( + "let denominator = 0; 100 / denominator;", + "division_by_zero_integer_infix_expression_case_5" + ) +)] +fn division_by_zero_integer_infix_expression_cases(code: &str, snapshot_name: &str) {} + +#[apply(division_by_zero_integer_infix_expression_cases)] +fn test_division_by_zero_integer_infix_expression_lexical_analysis( + code: &str, + snapshot_name: &str, +) { + assert_lexical_analysis!(code, snapshot_name); +} + +#[apply(division_by_zero_integer_infix_expression_cases)] +fn test_division_by_zero_integer_infix_expression_syntax_analysis(code: &str, snapshot_name: &str) { + assert_syntax_analysis!(code, snapshot_name); +} + +#[apply(division_by_zero_integer_infix_expression_cases)] +fn test_division_by_zero_integer_infix_expression_evaluation_error( + code: &str, + snapshot_name: &str, +) { + assert_evaluation_error!(code, snapshot_name); +} diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_evaluation_error.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_evaluation_error.snap new file mode 100644 index 0000000..7d34dd1 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_evaluation_error.snap @@ -0,0 +1,7 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: error +--- +Err( + "Division by zero, cannot apply the / infix operator to a right hand operand of 0.", +) diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_lexical_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_lexical_analysis.snap new file mode 100644 index 0000000..9da07db --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_lexical_analysis.snap @@ -0,0 +1,13 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: tokens +--- +[ + Integer { + literal: 5, + }, + Divide, + Integer { + literal: 0, + }, +] diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_syntax_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_syntax_analysis.snap new file mode 100644 index 0000000..9339ab8 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_1_syntax_analysis.snap @@ -0,0 +1,17 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: abstract_syntax_tree +--- +[ + Expression { + expression: Infix { + left_hand: Integer { + literal: 5, + }, + operator: Divide, + right_hand: Integer { + literal: 0, + }, + }, + }, +] diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_evaluation_error.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_evaluation_error.snap new file mode 100644 index 0000000..7d34dd1 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_evaluation_error.snap @@ -0,0 +1,7 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: error +--- +Err( + "Division by zero, cannot apply the / infix operator to a right hand operand of 0.", +) diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_lexical_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_lexical_analysis.snap new file mode 100644 index 0000000..7504cb4 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_lexical_analysis.snap @@ -0,0 +1,13 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: tokens +--- +[ + Integer { + literal: 0, + }, + Divide, + Integer { + literal: 0, + }, +] diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_syntax_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_syntax_analysis.snap new file mode 100644 index 0000000..f5c8fa4 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_2_syntax_analysis.snap @@ -0,0 +1,17 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: abstract_syntax_tree +--- +[ + Expression { + expression: Infix { + left_hand: Integer { + literal: 0, + }, + operator: Divide, + right_hand: Integer { + literal: 0, + }, + }, + }, +] diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_evaluation_error.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_evaluation_error.snap new file mode 100644 index 0000000..7d34dd1 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_evaluation_error.snap @@ -0,0 +1,7 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: error +--- +Err( + "Division by zero, cannot apply the / infix operator to a right hand operand of 0.", +) diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_lexical_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_lexical_analysis.snap new file mode 100644 index 0000000..1dbcf51 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_lexical_analysis.snap @@ -0,0 +1,14 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: tokens +--- +[ + Minus, + Integer { + literal: 5, + }, + Divide, + Integer { + literal: 0, + }, +] diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_syntax_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_syntax_analysis.snap new file mode 100644 index 0000000..39a21bb --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_3_syntax_analysis.snap @@ -0,0 +1,19 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: abstract_syntax_tree +--- +[ + Expression { + expression: Infix { + left_hand: MinusPrefix { + right_hand: Integer { + literal: 5, + }, + }, + operator: Divide, + right_hand: Integer { + literal: 0, + }, + }, + }, +] diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_evaluation_error.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_evaluation_error.snap new file mode 100644 index 0000000..7d34dd1 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_evaluation_error.snap @@ -0,0 +1,7 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: error +--- +Err( + "Division by zero, cannot apply the / infix operator to a right hand operand of 0.", +) diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_lexical_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_lexical_analysis.snap new file mode 100644 index 0000000..5c8062c --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_lexical_analysis.snap @@ -0,0 +1,19 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: tokens +--- +[ + Integer { + literal: 10, + }, + Divide, + OpeningRoundBracket, + Integer { + literal: 5, + }, + Minus, + Integer { + literal: 5, + }, + ClosingRoundBracket, +] diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_syntax_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_syntax_analysis.snap new file mode 100644 index 0000000..f0b9c1a --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_4_syntax_analysis.snap @@ -0,0 +1,23 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: abstract_syntax_tree +--- +[ + Expression { + expression: Infix { + left_hand: Integer { + literal: 10, + }, + operator: Divide, + right_hand: Infix { + left_hand: Integer { + literal: 5, + }, + operator: Minus, + right_hand: Integer { + literal: 5, + }, + }, + }, + }, +] diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_evaluation_error.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_evaluation_error.snap new file mode 100644 index 0000000..7d34dd1 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_evaluation_error.snap @@ -0,0 +1,7 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: error +--- +Err( + "Division by zero, cannot apply the / infix operator to a right hand operand of 0.", +) diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_lexical_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_lexical_analysis.snap new file mode 100644 index 0000000..c1377c4 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_lexical_analysis.snap @@ -0,0 +1,23 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: tokens +--- +[ + Let, + Identifier { + literal: "denominator", + }, + Assign, + Integer { + literal: 0, + }, + SemiColon, + Integer { + literal: 100, + }, + Divide, + Identifier { + literal: "denominator", + }, + SemiColon, +] diff --git a/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_syntax_analysis.snap b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_syntax_analysis.snap new file mode 100644 index 0000000..e53fbb5 --- /dev/null +++ b/src/tests/evaluation_error/division_by_zero_integer_infix_expression/snapshots/monkey_interpreter__tests__evaluation_error__division_by_zero_integer_infix_expression__test_division_by_zero_integer_infix_expression_case_5_syntax_analysis.snap @@ -0,0 +1,25 @@ +--- +source: src/tests/evaluation_error/division_by_zero_integer_infix_expression/mod.rs +expression: abstract_syntax_tree +--- +[ + Statement { + statement: Let { + identifier: "denominator", + expression: Integer { + literal: 0, + }, + }, + }, + Expression { + expression: Infix { + left_hand: Integer { + literal: 100, + }, + operator: Divide, + right_hand: Identifier { + identifier: "denominator", + }, + }, + }, +] diff --git a/src/tests/evaluation_error/mod.rs b/src/tests/evaluation_error/mod.rs index fea6cf2..6749ce0 100644 --- a/src/tests/evaluation_error/mod.rs +++ b/src/tests/evaluation_error/mod.rs @@ -3,6 +3,7 @@ use super::*; #[macro_use] mod macros; +mod division_by_zero_integer_infix_expression; mod type_mismatch_boolean_infix_expression; mod type_mismatch_boolean_prefix_expression; mod type_mismatch_integer_infix_expression;