From b96dd07b7ca0d1bcf08c35556536478db28cbbcc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Aug 2026 21:56:47 +0000 Subject: [PATCH 1/3] Add if/else-if testcase Co-authored-by: saintsHr <209705081+saintsHr@users.noreply.github.com> --- testcases/if_else_elseif_pass.slfr | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 testcases/if_else_elseif_pass.slfr diff --git a/testcases/if_else_elseif_pass.slfr b/testcases/if_else_elseif_pass.slfr new file mode 100644 index 0000000..b3d5103 --- /dev/null +++ b/testcases/if_else_elseif_pass.slfr @@ -0,0 +1,10 @@ +u64 score = 85; +u64 payout = 0; + +if (score >= 90) { + payout = 300; +} else if (score >= 80) { + payout = 200; +} else { + payout = 100; +} From 012a398d35b2e9cbae4ec5f8514d9d44782a56e6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Aug 2026 21:57:25 +0000 Subject: [PATCH 2/3] Add pass and fail testcase set Co-authored-by: saintsHr <209705081+saintsHr@users.noreply.github.com> --- testcases/bool_numeric_cast_fail.slfr | 1 + testcases/increment_non_variable_fail.slfr | 3 +++ testcases/non_bool_if_condition_fail.slfr | 3 +++ testcases/non_bool_while_condition_fail.slfr | 3 +++ testcases/out_of_scope_use_fail.slfr | 5 +++++ testcases/precedence_chain_pass.slfr | 6 ++++++ testcases/scope_shadowing_pass.slfr | 9 +++++++++ testcases/symbol_redefinition_fail.slfr | 2 ++ testcases/unary_not_pass.slfr | 2 ++ testcases/unary_updates_pass.slfr | 6 ++++++ testcases/while_block_pass.slfr | 7 +++++++ 11 files changed, 47 insertions(+) create mode 100644 testcases/bool_numeric_cast_fail.slfr create mode 100644 testcases/increment_non_variable_fail.slfr create mode 100644 testcases/non_bool_if_condition_fail.slfr create mode 100644 testcases/non_bool_while_condition_fail.slfr create mode 100644 testcases/out_of_scope_use_fail.slfr create mode 100644 testcases/precedence_chain_pass.slfr create mode 100644 testcases/scope_shadowing_pass.slfr create mode 100644 testcases/symbol_redefinition_fail.slfr create mode 100644 testcases/unary_not_pass.slfr create mode 100644 testcases/unary_updates_pass.slfr create mode 100644 testcases/while_block_pass.slfr diff --git a/testcases/bool_numeric_cast_fail.slfr b/testcases/bool_numeric_cast_fail.slfr new file mode 100644 index 0000000..5612584 --- /dev/null +++ b/testcases/bool_numeric_cast_fail.slfr @@ -0,0 +1 @@ +i64 x = true as i64; diff --git a/testcases/increment_non_variable_fail.slfr b/testcases/increment_non_variable_fail.slfr new file mode 100644 index 0000000..fb5848a --- /dev/null +++ b/testcases/increment_non_variable_fail.slfr @@ -0,0 +1,3 @@ +u64 x = 1; + +(x + 1)++; diff --git a/testcases/non_bool_if_condition_fail.slfr b/testcases/non_bool_if_condition_fail.slfr new file mode 100644 index 0000000..12baff7 --- /dev/null +++ b/testcases/non_bool_if_condition_fail.slfr @@ -0,0 +1,3 @@ +i64 cond = 1; + +if (cond) cond = 0; diff --git a/testcases/non_bool_while_condition_fail.slfr b/testcases/non_bool_while_condition_fail.slfr new file mode 100644 index 0000000..063b691 --- /dev/null +++ b/testcases/non_bool_while_condition_fail.slfr @@ -0,0 +1,3 @@ +u64 i = 1; + +while (i) i--; diff --git a/testcases/out_of_scope_use_fail.slfr b/testcases/out_of_scope_use_fail.slfr new file mode 100644 index 0000000..8c5550c --- /dev/null +++ b/testcases/out_of_scope_use_fail.slfr @@ -0,0 +1,5 @@ +{ + i64 inner = 1; +} + +i64 outer = inner; diff --git a/testcases/precedence_chain_pass.slfr b/testcases/precedence_chain_pass.slfr new file mode 100644 index 0000000..bde0e91 --- /dev/null +++ b/testcases/precedence_chain_pass.slfr @@ -0,0 +1,6 @@ +u64 x = 2; +u64 y = 3; +u64 z = 4; + +u64 result = x + y * z << 1; +bool check = result > 0 && x < y || false; diff --git a/testcases/scope_shadowing_pass.slfr b/testcases/scope_shadowing_pass.slfr new file mode 100644 index 0000000..725f320 --- /dev/null +++ b/testcases/scope_shadowing_pass.slfr @@ -0,0 +1,9 @@ +i64 value = 10; +i64 result = value; + +{ + i64 value = 20; + result = value; +} + +result = value; diff --git a/testcases/symbol_redefinition_fail.slfr b/testcases/symbol_redefinition_fail.slfr new file mode 100644 index 0000000..0787c72 --- /dev/null +++ b/testcases/symbol_redefinition_fail.slfr @@ -0,0 +1,2 @@ +i64 x = 1; +i64 x = 2; diff --git a/testcases/unary_not_pass.slfr b/testcases/unary_not_pass.slfr new file mode 100644 index 0000000..6564112 --- /dev/null +++ b/testcases/unary_not_pass.slfr @@ -0,0 +1,2 @@ +bool done = false; +bool check = !done; diff --git a/testcases/unary_updates_pass.slfr b/testcases/unary_updates_pass.slfr new file mode 100644 index 0000000..ed46ab6 --- /dev/null +++ b/testcases/unary_updates_pass.slfr @@ -0,0 +1,6 @@ +u64 i = 10; + +++i; +i++; +--i; +i--; diff --git a/testcases/while_block_pass.slfr b/testcases/while_block_pass.slfr new file mode 100644 index 0000000..959c1ee --- /dev/null +++ b/testcases/while_block_pass.slfr @@ -0,0 +1,7 @@ +u64 i = 0; +u64 total = 0; + +while (i < 4) { + total += i; + i++; +} From 6bcbf24c1fdd77010c37870221aa444af877cb72 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Aug 2026 22:04:59 +0000 Subject: [PATCH 3/3] Add broad testcase expansion batches Co-authored-by: saintsHr <209705081+saintsHr@users.noreply.github.com> --- testcases/arithmetic_mixed_signed_width_pass.slfr | 4 ++++ testcases/arithmetic_mixed_unsigned_width_pass.slfr | 4 ++++ testcases/arithmetic_negative_literal_pass.slfr | 3 +++ testcases/arithmetic_precedence_parentheses_pass.slfr | 4 ++++ testcases/assignment_cast_expr_pass.slfr | 3 +++ testcases/assignment_parenthesized_expr_pass.slfr | 2 ++ testcases/bitwise_complex_expression_pass.slfr | 3 +++ testcases/cast_chain_signed_pass.slfr | 2 ++ testcases/cast_chain_unsigned_pass.slfr | 2 ++ testcases/cast_self_type_pass.slfr | 2 ++ testcases/comments_inline_pass.slfr | 3 +++ testcases/comments_strip_pass.slfr | 4 ++++ testcases/complex_nested_program_pass.slfr | 11 +++++++++++ testcases/declaration_init_from_expr_pass.slfr | 3 +++ testcases/declaration_multiple_scopes_pass.slfr | 8 ++++++++ testcases/declaration_shadow_chain_pass.slfr | 9 +++++++++ testcases/division_expression_pass.slfr | 3 +++ testcases/expression_statement_arithmetic_pass.slfr | 2 ++ testcases/expression_statement_cast_pass.slfr | 2 ++ testcases/hex_binary_literal_ops_pass.slfr | 3 +++ testcases/if_dangling_else_pass.slfr | 8 ++++++++ testcases/if_else_blocks_pass.slfr | 7 +++++++ testcases/if_nested_else_pass.slfr | 9 +++++++++ testcases/lexer_invalid_binary_literal_fail.slfr | 1 + testcases/lexer_invalid_hex_literal_fail.slfr | 1 + testcases/lexer_invalid_token_fail.slfr | 2 ++ testcases/literals_base_prefix_pass.slfr | 3 +++ testcases/literals_signed_bounds_pass.slfr | 4 ++++ testcases/literals_unsigned_bounds_pass.slfr | 4 ++++ testcases/logical_nested_parentheses_pass.slfr | 4 ++++ testcases/logical_relational_mix_pass.slfr | 3 +++ testcases/relational_bool_equality_pass.slfr | 4 ++++ testcases/relational_width_match_cast_pass.slfr | 3 +++ testcases/semantic_bool_to_int_assignment_fail.slfr | 1 + testcases/semantic_decrement_bool_fail.slfr | 2 ++ testcases/semantic_division_by_zero_fail.slfr | 1 + testcases/semantic_increment_bool_fail.slfr | 2 ++ testcases/semantic_int_bool_binary_fail.slfr | 3 +++ testcases/semantic_int_to_bool_assignment_fail.slfr | 1 + testcases/semantic_invalid_cast_bool_to_u8_fail.slfr | 2 ++ testcases/semantic_invalid_cast_int_to_bool_fail.slfr | 2 ++ testcases/semantic_logical_int_operands_fail.slfr | 1 + testcases/semantic_negative_unsigned_fail.slfr | 1 + .../semantic_relational_group_mismatch_fail.slfr | 3 +++ .../semantic_relational_width_mismatch_fail.slfr | 3 +++ testcases/semantic_shift_left_out_of_range_fail.slfr | 2 ++ testcases/semantic_shift_right_out_of_range_fail.slfr | 2 ++ testcases/semantic_signed_unsigned_binary_fail.slfr | 3 +++ testcases/semantic_undeclared_assignment_fail.slfr | 1 + .../semantic_uninitialized_if_condition_fail.slfr | 4 ++++ testcases/semantic_uninitialized_rhs_fail.slfr | 2 ++ .../semantic_uninitialized_while_condition_fail.slfr | 4 ++++ testcases/shift_edge_valid_pass.slfr | 3 +++ testcases/shift_variable_amount_pass.slfr | 3 +++ testcases/syntax_cast_missing_type_fail.slfr | 1 + .../syntax_declaration_missing_identifier_fail.slfr | 1 + testcases/syntax_else_without_if_fail.slfr | 3 +++ testcases/syntax_empty_paren_expr_fail.slfr | 1 + testcases/syntax_expression_missing_operand_fail.slfr | 1 + testcases/syntax_missing_lparen_if_fail.slfr | 3 +++ testcases/syntax_missing_rbrace_block_fail.slfr | 2 ++ testcases/syntax_missing_rparen_if_fail.slfr | 3 +++ testcases/syntax_missing_rparen_while_fail.slfr | 3 +++ testcases/syntax_missing_semicolon_assign_fail.slfr | 2 ++ testcases/syntax_missing_semicolon_decl_fail.slfr | 1 + testcases/syntax_missing_semicolon_expr_fail.slfr | 1 + testcases/unary_chain_not_pass.slfr | 2 ++ testcases/unary_postfix_expression_pass.slfr | 2 ++ testcases/unary_prefix_expression_pass.slfr | 2 ++ testcases/while_condition_not_pass.slfr | 6 ++++++ testcases/while_nested_block_pass.slfr | 8 ++++++++ testcases/while_with_if_else_pass.slfr | 10 ++++++++++ 72 files changed, 228 insertions(+) create mode 100644 testcases/arithmetic_mixed_signed_width_pass.slfr create mode 100644 testcases/arithmetic_mixed_unsigned_width_pass.slfr create mode 100644 testcases/arithmetic_negative_literal_pass.slfr create mode 100644 testcases/arithmetic_precedence_parentheses_pass.slfr create mode 100644 testcases/assignment_cast_expr_pass.slfr create mode 100644 testcases/assignment_parenthesized_expr_pass.slfr create mode 100644 testcases/bitwise_complex_expression_pass.slfr create mode 100644 testcases/cast_chain_signed_pass.slfr create mode 100644 testcases/cast_chain_unsigned_pass.slfr create mode 100644 testcases/cast_self_type_pass.slfr create mode 100644 testcases/comments_inline_pass.slfr create mode 100644 testcases/comments_strip_pass.slfr create mode 100644 testcases/complex_nested_program_pass.slfr create mode 100644 testcases/declaration_init_from_expr_pass.slfr create mode 100644 testcases/declaration_multiple_scopes_pass.slfr create mode 100644 testcases/declaration_shadow_chain_pass.slfr create mode 100644 testcases/division_expression_pass.slfr create mode 100644 testcases/expression_statement_arithmetic_pass.slfr create mode 100644 testcases/expression_statement_cast_pass.slfr create mode 100644 testcases/hex_binary_literal_ops_pass.slfr create mode 100644 testcases/if_dangling_else_pass.slfr create mode 100644 testcases/if_else_blocks_pass.slfr create mode 100644 testcases/if_nested_else_pass.slfr create mode 100644 testcases/lexer_invalid_binary_literal_fail.slfr create mode 100644 testcases/lexer_invalid_hex_literal_fail.slfr create mode 100644 testcases/lexer_invalid_token_fail.slfr create mode 100644 testcases/literals_base_prefix_pass.slfr create mode 100644 testcases/literals_signed_bounds_pass.slfr create mode 100644 testcases/literals_unsigned_bounds_pass.slfr create mode 100644 testcases/logical_nested_parentheses_pass.slfr create mode 100644 testcases/logical_relational_mix_pass.slfr create mode 100644 testcases/relational_bool_equality_pass.slfr create mode 100644 testcases/relational_width_match_cast_pass.slfr create mode 100644 testcases/semantic_bool_to_int_assignment_fail.slfr create mode 100644 testcases/semantic_decrement_bool_fail.slfr create mode 100644 testcases/semantic_division_by_zero_fail.slfr create mode 100644 testcases/semantic_increment_bool_fail.slfr create mode 100644 testcases/semantic_int_bool_binary_fail.slfr create mode 100644 testcases/semantic_int_to_bool_assignment_fail.slfr create mode 100644 testcases/semantic_invalid_cast_bool_to_u8_fail.slfr create mode 100644 testcases/semantic_invalid_cast_int_to_bool_fail.slfr create mode 100644 testcases/semantic_logical_int_operands_fail.slfr create mode 100644 testcases/semantic_negative_unsigned_fail.slfr create mode 100644 testcases/semantic_relational_group_mismatch_fail.slfr create mode 100644 testcases/semantic_relational_width_mismatch_fail.slfr create mode 100644 testcases/semantic_shift_left_out_of_range_fail.slfr create mode 100644 testcases/semantic_shift_right_out_of_range_fail.slfr create mode 100644 testcases/semantic_signed_unsigned_binary_fail.slfr create mode 100644 testcases/semantic_undeclared_assignment_fail.slfr create mode 100644 testcases/semantic_uninitialized_if_condition_fail.slfr create mode 100644 testcases/semantic_uninitialized_rhs_fail.slfr create mode 100644 testcases/semantic_uninitialized_while_condition_fail.slfr create mode 100644 testcases/shift_edge_valid_pass.slfr create mode 100644 testcases/shift_variable_amount_pass.slfr create mode 100644 testcases/syntax_cast_missing_type_fail.slfr create mode 100644 testcases/syntax_declaration_missing_identifier_fail.slfr create mode 100644 testcases/syntax_else_without_if_fail.slfr create mode 100644 testcases/syntax_empty_paren_expr_fail.slfr create mode 100644 testcases/syntax_expression_missing_operand_fail.slfr create mode 100644 testcases/syntax_missing_lparen_if_fail.slfr create mode 100644 testcases/syntax_missing_rbrace_block_fail.slfr create mode 100644 testcases/syntax_missing_rparen_if_fail.slfr create mode 100644 testcases/syntax_missing_rparen_while_fail.slfr create mode 100644 testcases/syntax_missing_semicolon_assign_fail.slfr create mode 100644 testcases/syntax_missing_semicolon_decl_fail.slfr create mode 100644 testcases/syntax_missing_semicolon_expr_fail.slfr create mode 100644 testcases/unary_chain_not_pass.slfr create mode 100644 testcases/unary_postfix_expression_pass.slfr create mode 100644 testcases/unary_prefix_expression_pass.slfr create mode 100644 testcases/while_condition_not_pass.slfr create mode 100644 testcases/while_nested_block_pass.slfr create mode 100644 testcases/while_with_if_else_pass.slfr diff --git a/testcases/arithmetic_mixed_signed_width_pass.slfr b/testcases/arithmetic_mixed_signed_width_pass.slfr new file mode 100644 index 0000000..dba03bf --- /dev/null +++ b/testcases/arithmetic_mixed_signed_width_pass.slfr @@ -0,0 +1,4 @@ +i8 a = 10; +i16 b = 20; +i32 c = a + b; +i64 d = c * 4; diff --git a/testcases/arithmetic_mixed_unsigned_width_pass.slfr b/testcases/arithmetic_mixed_unsigned_width_pass.slfr new file mode 100644 index 0000000..ce9fc85 --- /dev/null +++ b/testcases/arithmetic_mixed_unsigned_width_pass.slfr @@ -0,0 +1,4 @@ +u8 a = 10; +u16 b = 20; +u32 c = a + b; +u64 d = c * 4; diff --git a/testcases/arithmetic_negative_literal_pass.slfr b/testcases/arithmetic_negative_literal_pass.slfr new file mode 100644 index 0000000..7130923 --- /dev/null +++ b/testcases/arithmetic_negative_literal_pass.slfr @@ -0,0 +1,3 @@ +i64 x = -10; +i64 y = -20; +i64 z = x + y; diff --git a/testcases/arithmetic_precedence_parentheses_pass.slfr b/testcases/arithmetic_precedence_parentheses_pass.slfr new file mode 100644 index 0000000..b2c7775 --- /dev/null +++ b/testcases/arithmetic_precedence_parentheses_pass.slfr @@ -0,0 +1,4 @@ +u64 x = 2; +u64 y = 3; +u64 z = 4; +u64 r = (x + y) * (z + x) / y; diff --git a/testcases/assignment_cast_expr_pass.slfr b/testcases/assignment_cast_expr_pass.slfr new file mode 100644 index 0000000..5ab5ead --- /dev/null +++ b/testcases/assignment_cast_expr_pass.slfr @@ -0,0 +1,3 @@ +i64 x = 300; +i8 y = x as i8; +y = (x as i16) as i8; diff --git a/testcases/assignment_parenthesized_expr_pass.slfr b/testcases/assignment_parenthesized_expr_pass.slfr new file mode 100644 index 0000000..4e66603 --- /dev/null +++ b/testcases/assignment_parenthesized_expr_pass.slfr @@ -0,0 +1,2 @@ +u64 x = 0; +x = (10 + 5) * (8 - 3); diff --git a/testcases/bitwise_complex_expression_pass.slfr b/testcases/bitwise_complex_expression_pass.slfr new file mode 100644 index 0000000..8e527a0 --- /dev/null +++ b/testcases/bitwise_complex_expression_pass.slfr @@ -0,0 +1,3 @@ +u64 a = 0xFF; +u64 b = 0b1010; +u64 c = (a & 0x0F) | (b << 2); diff --git a/testcases/cast_chain_signed_pass.slfr b/testcases/cast_chain_signed_pass.slfr new file mode 100644 index 0000000..0863de3 --- /dev/null +++ b/testcases/cast_chain_signed_pass.slfr @@ -0,0 +1,2 @@ +i64 x = 300; +i8 a = x as i16 as i8; diff --git a/testcases/cast_chain_unsigned_pass.slfr b/testcases/cast_chain_unsigned_pass.slfr new file mode 100644 index 0000000..a6a779a --- /dev/null +++ b/testcases/cast_chain_unsigned_pass.slfr @@ -0,0 +1,2 @@ +u64 x = 300; +u8 a = x as u16 as u8; diff --git a/testcases/cast_self_type_pass.slfr b/testcases/cast_self_type_pass.slfr new file mode 100644 index 0000000..1190be0 --- /dev/null +++ b/testcases/cast_self_type_pass.slfr @@ -0,0 +1,2 @@ +i32 x = 99; +i32 y = x as i32; diff --git a/testcases/comments_inline_pass.slfr b/testcases/comments_inline_pass.slfr new file mode 100644 index 0000000..ca28a78 --- /dev/null +++ b/testcases/comments_inline_pass.slfr @@ -0,0 +1,3 @@ +u64 x = 1; // inline comment +u64 y = 2; // inline comment +y = x + y; // inline comment diff --git a/testcases/comments_strip_pass.slfr b/testcases/comments_strip_pass.slfr new file mode 100644 index 0000000..7493f0c --- /dev/null +++ b/testcases/comments_strip_pass.slfr @@ -0,0 +1,4 @@ +// this whole line must be ignored +u64 x = 10; +// another comment +x = x + 5; diff --git a/testcases/complex_nested_program_pass.slfr b/testcases/complex_nested_program_pass.slfr new file mode 100644 index 0000000..270e326 --- /dev/null +++ b/testcases/complex_nested_program_pass.slfr @@ -0,0 +1,11 @@ +i64 total = 0; +u64 i = 0; +while (i < 4) { + i64 step = i as i64; + if ((i & 1) == 0) { + total += step * 2; + } else { + total -= step; + } + i++; +} diff --git a/testcases/declaration_init_from_expr_pass.slfr b/testcases/declaration_init_from_expr_pass.slfr new file mode 100644 index 0000000..b5bc9fe --- /dev/null +++ b/testcases/declaration_init_from_expr_pass.slfr @@ -0,0 +1,3 @@ +i64 a = 10; +i64 b = 20; +i64 c = (a + b) * 2; diff --git a/testcases/declaration_multiple_scopes_pass.slfr b/testcases/declaration_multiple_scopes_pass.slfr new file mode 100644 index 0000000..bb76e3c --- /dev/null +++ b/testcases/declaration_multiple_scopes_pass.slfr @@ -0,0 +1,8 @@ +i64 x = 1; +{ + i64 y = x; + { + i64 z = y; + x = z; + } +} diff --git a/testcases/declaration_shadow_chain_pass.slfr b/testcases/declaration_shadow_chain_pass.slfr new file mode 100644 index 0000000..d2007de --- /dev/null +++ b/testcases/declaration_shadow_chain_pass.slfr @@ -0,0 +1,9 @@ +i64 value = 1; +{ + i64 value = 2; + { + i64 value = 3; + } + value = 4; +} +value = 5; diff --git a/testcases/division_expression_pass.slfr b/testcases/division_expression_pass.slfr new file mode 100644 index 0000000..d730f74 --- /dev/null +++ b/testcases/division_expression_pass.slfr @@ -0,0 +1,3 @@ +i64 x = 100; +i64 y = 5; +i64 z = x / y; diff --git a/testcases/expression_statement_arithmetic_pass.slfr b/testcases/expression_statement_arithmetic_pass.slfr new file mode 100644 index 0000000..49241c7 --- /dev/null +++ b/testcases/expression_statement_arithmetic_pass.slfr @@ -0,0 +1,2 @@ +u64 x = 1; +(x + 2) * 3; diff --git a/testcases/expression_statement_cast_pass.slfr b/testcases/expression_statement_cast_pass.slfr new file mode 100644 index 0000000..93dfbce --- /dev/null +++ b/testcases/expression_statement_cast_pass.slfr @@ -0,0 +1,2 @@ +u64 x = 999; +x as u8; diff --git a/testcases/hex_binary_literal_ops_pass.slfr b/testcases/hex_binary_literal_ops_pass.slfr new file mode 100644 index 0000000..6f0929a --- /dev/null +++ b/testcases/hex_binary_literal_ops_pass.slfr @@ -0,0 +1,3 @@ +u64 x = 0x10; +u64 y = 0b11; +u64 z = (x | y) ^ 0x1; diff --git a/testcases/if_dangling_else_pass.slfr b/testcases/if_dangling_else_pass.slfr new file mode 100644 index 0000000..d896db9 --- /dev/null +++ b/testcases/if_dangling_else_pass.slfr @@ -0,0 +1,8 @@ +bool a = true; +bool b = false; +i64 x = 0; +if (a) + if (b) + x = 1; + else + x = 2; diff --git a/testcases/if_else_blocks_pass.slfr b/testcases/if_else_blocks_pass.slfr new file mode 100644 index 0000000..9c4a20e --- /dev/null +++ b/testcases/if_else_blocks_pass.slfr @@ -0,0 +1,7 @@ +bool c = true; +i64 x = 0; +if (c) { + x = 1; +} else { + x = 2; +} diff --git a/testcases/if_nested_else_pass.slfr b/testcases/if_nested_else_pass.slfr new file mode 100644 index 0000000..3f335af --- /dev/null +++ b/testcases/if_nested_else_pass.slfr @@ -0,0 +1,9 @@ +i64 x = 10; +i64 y = 0; +if (x > 0) { + if (x > 5) { + y = 2; + } else { + y = 1; + } +} diff --git a/testcases/lexer_invalid_binary_literal_fail.slfr b/testcases/lexer_invalid_binary_literal_fail.slfr new file mode 100644 index 0000000..5a1095d --- /dev/null +++ b/testcases/lexer_invalid_binary_literal_fail.slfr @@ -0,0 +1 @@ +u64 x = 0b102; diff --git a/testcases/lexer_invalid_hex_literal_fail.slfr b/testcases/lexer_invalid_hex_literal_fail.slfr new file mode 100644 index 0000000..f3fbf13 --- /dev/null +++ b/testcases/lexer_invalid_hex_literal_fail.slfr @@ -0,0 +1 @@ +u64 x = 0xG1; diff --git a/testcases/lexer_invalid_token_fail.slfr b/testcases/lexer_invalid_token_fail.slfr new file mode 100644 index 0000000..60b152a --- /dev/null +++ b/testcases/lexer_invalid_token_fail.slfr @@ -0,0 +1,2 @@ +u64 x = 1; +@ diff --git a/testcases/literals_base_prefix_pass.slfr b/testcases/literals_base_prefix_pass.slfr new file mode 100644 index 0000000..a506ae4 --- /dev/null +++ b/testcases/literals_base_prefix_pass.slfr @@ -0,0 +1,3 @@ +u64 a = 0x2A; +u64 b = 0b101010; +u64 c = 42; diff --git a/testcases/literals_signed_bounds_pass.slfr b/testcases/literals_signed_bounds_pass.slfr new file mode 100644 index 0000000..a241192 --- /dev/null +++ b/testcases/literals_signed_bounds_pass.slfr @@ -0,0 +1,4 @@ +i8 a = -128; +i16 b = -32768; +i32 c = -2147483648; +i64 d = -9223372036854775808; diff --git a/testcases/literals_unsigned_bounds_pass.slfr b/testcases/literals_unsigned_bounds_pass.slfr new file mode 100644 index 0000000..40cc8f7 --- /dev/null +++ b/testcases/literals_unsigned_bounds_pass.slfr @@ -0,0 +1,4 @@ +u8 a = 255; +u16 b = 65535; +u32 c = 4294967295; +u64 d = 18446744073709551615; diff --git a/testcases/logical_nested_parentheses_pass.slfr b/testcases/logical_nested_parentheses_pass.slfr new file mode 100644 index 0000000..fbcbe2b --- /dev/null +++ b/testcases/logical_nested_parentheses_pass.slfr @@ -0,0 +1,4 @@ +bool a = true; +bool b = false; +bool c = true; +bool d = (a && !b) || (b || c); diff --git a/testcases/logical_relational_mix_pass.slfr b/testcases/logical_relational_mix_pass.slfr new file mode 100644 index 0000000..84a5e81 --- /dev/null +++ b/testcases/logical_relational_mix_pass.slfr @@ -0,0 +1,3 @@ +i64 a = 10; +i64 b = 20; +bool ok = (a < b) && (b != 0); diff --git a/testcases/relational_bool_equality_pass.slfr b/testcases/relational_bool_equality_pass.slfr new file mode 100644 index 0000000..853565b --- /dev/null +++ b/testcases/relational_bool_equality_pass.slfr @@ -0,0 +1,4 @@ +bool a = true; +bool b = false; +bool c = a == b; +bool d = a != b; diff --git a/testcases/relational_width_match_cast_pass.slfr b/testcases/relational_width_match_cast_pass.slfr new file mode 100644 index 0000000..9b37588 --- /dev/null +++ b/testcases/relational_width_match_cast_pass.slfr @@ -0,0 +1,3 @@ +i64 a = 42; +i32 b = 7; +bool c = a > (b as i64); diff --git a/testcases/semantic_bool_to_int_assignment_fail.slfr b/testcases/semantic_bool_to_int_assignment_fail.slfr new file mode 100644 index 0000000..0220b56 --- /dev/null +++ b/testcases/semantic_bool_to_int_assignment_fail.slfr @@ -0,0 +1 @@ +i64 x = true; diff --git a/testcases/semantic_decrement_bool_fail.slfr b/testcases/semantic_decrement_bool_fail.slfr new file mode 100644 index 0000000..660074c --- /dev/null +++ b/testcases/semantic_decrement_bool_fail.slfr @@ -0,0 +1,2 @@ +bool x = true; +--x; diff --git a/testcases/semantic_division_by_zero_fail.slfr b/testcases/semantic_division_by_zero_fail.slfr new file mode 100644 index 0000000..43573c5 --- /dev/null +++ b/testcases/semantic_division_by_zero_fail.slfr @@ -0,0 +1 @@ +i64 x = 10 / 0; diff --git a/testcases/semantic_increment_bool_fail.slfr b/testcases/semantic_increment_bool_fail.slfr new file mode 100644 index 0000000..31b450c --- /dev/null +++ b/testcases/semantic_increment_bool_fail.slfr @@ -0,0 +1,2 @@ +bool x = true; +x++; diff --git a/testcases/semantic_int_bool_binary_fail.slfr b/testcases/semantic_int_bool_binary_fail.slfr new file mode 100644 index 0000000..cfc23a6 --- /dev/null +++ b/testcases/semantic_int_bool_binary_fail.slfr @@ -0,0 +1,3 @@ +i64 a = 1; +bool b = true; +i64 c = a + b; diff --git a/testcases/semantic_int_to_bool_assignment_fail.slfr b/testcases/semantic_int_to_bool_assignment_fail.slfr new file mode 100644 index 0000000..54e57c2 --- /dev/null +++ b/testcases/semantic_int_to_bool_assignment_fail.slfr @@ -0,0 +1 @@ +bool x = 1; diff --git a/testcases/semantic_invalid_cast_bool_to_u8_fail.slfr b/testcases/semantic_invalid_cast_bool_to_u8_fail.slfr new file mode 100644 index 0000000..9185105 --- /dev/null +++ b/testcases/semantic_invalid_cast_bool_to_u8_fail.slfr @@ -0,0 +1,2 @@ +bool x = true; +u8 y = x as u8; diff --git a/testcases/semantic_invalid_cast_int_to_bool_fail.slfr b/testcases/semantic_invalid_cast_int_to_bool_fail.slfr new file mode 100644 index 0000000..81050b6 --- /dev/null +++ b/testcases/semantic_invalid_cast_int_to_bool_fail.slfr @@ -0,0 +1,2 @@ +i64 x = 1; +bool y = x as bool; diff --git a/testcases/semantic_logical_int_operands_fail.slfr b/testcases/semantic_logical_int_operands_fail.slfr new file mode 100644 index 0000000..3f25064 --- /dev/null +++ b/testcases/semantic_logical_int_operands_fail.slfr @@ -0,0 +1 @@ +bool x = 1 && 0; diff --git a/testcases/semantic_negative_unsigned_fail.slfr b/testcases/semantic_negative_unsigned_fail.slfr new file mode 100644 index 0000000..4773948 --- /dev/null +++ b/testcases/semantic_negative_unsigned_fail.slfr @@ -0,0 +1 @@ +u8 x = -1; diff --git a/testcases/semantic_relational_group_mismatch_fail.slfr b/testcases/semantic_relational_group_mismatch_fail.slfr new file mode 100644 index 0000000..dc61f1f --- /dev/null +++ b/testcases/semantic_relational_group_mismatch_fail.slfr @@ -0,0 +1,3 @@ +i64 a = 1; +u64 b = 2; +bool c = a < b; diff --git a/testcases/semantic_relational_width_mismatch_fail.slfr b/testcases/semantic_relational_width_mismatch_fail.slfr new file mode 100644 index 0000000..7082341 --- /dev/null +++ b/testcases/semantic_relational_width_mismatch_fail.slfr @@ -0,0 +1,3 @@ +i8 a = 1; +i16 b = 2; +bool c = a < b; diff --git a/testcases/semantic_shift_left_out_of_range_fail.slfr b/testcases/semantic_shift_left_out_of_range_fail.slfr new file mode 100644 index 0000000..edaafb7 --- /dev/null +++ b/testcases/semantic_shift_left_out_of_range_fail.slfr @@ -0,0 +1,2 @@ +u8 x = 1; +u8 y = x << 8; diff --git a/testcases/semantic_shift_right_out_of_range_fail.slfr b/testcases/semantic_shift_right_out_of_range_fail.slfr new file mode 100644 index 0000000..a6d8369 --- /dev/null +++ b/testcases/semantic_shift_right_out_of_range_fail.slfr @@ -0,0 +1,2 @@ +u8 x = 1; +u8 y = x >> 8; diff --git a/testcases/semantic_signed_unsigned_binary_fail.slfr b/testcases/semantic_signed_unsigned_binary_fail.slfr new file mode 100644 index 0000000..82de407 --- /dev/null +++ b/testcases/semantic_signed_unsigned_binary_fail.slfr @@ -0,0 +1,3 @@ +i64 a = 1; +u64 b = 2; +i64 c = a + b; diff --git a/testcases/semantic_undeclared_assignment_fail.slfr b/testcases/semantic_undeclared_assignment_fail.slfr new file mode 100644 index 0000000..198b8f8 --- /dev/null +++ b/testcases/semantic_undeclared_assignment_fail.slfr @@ -0,0 +1 @@ +x = 1; diff --git a/testcases/semantic_uninitialized_if_condition_fail.slfr b/testcases/semantic_uninitialized_if_condition_fail.slfr new file mode 100644 index 0000000..bff7b8a --- /dev/null +++ b/testcases/semantic_uninitialized_if_condition_fail.slfr @@ -0,0 +1,4 @@ +bool cond; +if (cond) { + i64 x = 1; +} diff --git a/testcases/semantic_uninitialized_rhs_fail.slfr b/testcases/semantic_uninitialized_rhs_fail.slfr new file mode 100644 index 0000000..080e0f6 --- /dev/null +++ b/testcases/semantic_uninitialized_rhs_fail.slfr @@ -0,0 +1,2 @@ +i64 x; +i64 y = x; diff --git a/testcases/semantic_uninitialized_while_condition_fail.slfr b/testcases/semantic_uninitialized_while_condition_fail.slfr new file mode 100644 index 0000000..b53faeb --- /dev/null +++ b/testcases/semantic_uninitialized_while_condition_fail.slfr @@ -0,0 +1,4 @@ +bool cond; +while (cond) { + i64 x = 1; +} diff --git a/testcases/shift_edge_valid_pass.slfr b/testcases/shift_edge_valid_pass.slfr new file mode 100644 index 0000000..8910f1d --- /dev/null +++ b/testcases/shift_edge_valid_pass.slfr @@ -0,0 +1,3 @@ +u64 x = 1; +x = x << 63; +x = x >> 63; diff --git a/testcases/shift_variable_amount_pass.slfr b/testcases/shift_variable_amount_pass.slfr new file mode 100644 index 0000000..067569a --- /dev/null +++ b/testcases/shift_variable_amount_pass.slfr @@ -0,0 +1,3 @@ +u64 x = 128; +u64 s = 3; +u64 y = x >> s; diff --git a/testcases/syntax_cast_missing_type_fail.slfr b/testcases/syntax_cast_missing_type_fail.slfr new file mode 100644 index 0000000..fb19556 --- /dev/null +++ b/testcases/syntax_cast_missing_type_fail.slfr @@ -0,0 +1 @@ +u64 x = 1 as ; diff --git a/testcases/syntax_declaration_missing_identifier_fail.slfr b/testcases/syntax_declaration_missing_identifier_fail.slfr new file mode 100644 index 0000000..e99fad8 --- /dev/null +++ b/testcases/syntax_declaration_missing_identifier_fail.slfr @@ -0,0 +1 @@ +i64 = 1; diff --git a/testcases/syntax_else_without_if_fail.slfr b/testcases/syntax_else_without_if_fail.slfr new file mode 100644 index 0000000..51d878a --- /dev/null +++ b/testcases/syntax_else_without_if_fail.slfr @@ -0,0 +1,3 @@ +else { + i64 x = 1; +} diff --git a/testcases/syntax_empty_paren_expr_fail.slfr b/testcases/syntax_empty_paren_expr_fail.slfr new file mode 100644 index 0000000..2e493d4 --- /dev/null +++ b/testcases/syntax_empty_paren_expr_fail.slfr @@ -0,0 +1 @@ +(); diff --git a/testcases/syntax_expression_missing_operand_fail.slfr b/testcases/syntax_expression_missing_operand_fail.slfr new file mode 100644 index 0000000..1eb91a7 --- /dev/null +++ b/testcases/syntax_expression_missing_operand_fail.slfr @@ -0,0 +1 @@ +u64 x = 1 + ; diff --git a/testcases/syntax_missing_lparen_if_fail.slfr b/testcases/syntax_missing_lparen_if_fail.slfr new file mode 100644 index 0000000..297e555 --- /dev/null +++ b/testcases/syntax_missing_lparen_if_fail.slfr @@ -0,0 +1,3 @@ +if true) { + i64 x = 1; +} diff --git a/testcases/syntax_missing_rbrace_block_fail.slfr b/testcases/syntax_missing_rbrace_block_fail.slfr new file mode 100644 index 0000000..460c2ff --- /dev/null +++ b/testcases/syntax_missing_rbrace_block_fail.slfr @@ -0,0 +1,2 @@ +{ + i64 x = 1; diff --git a/testcases/syntax_missing_rparen_if_fail.slfr b/testcases/syntax_missing_rparen_if_fail.slfr new file mode 100644 index 0000000..90e7413 --- /dev/null +++ b/testcases/syntax_missing_rparen_if_fail.slfr @@ -0,0 +1,3 @@ +if (true { + i64 x = 1; +} diff --git a/testcases/syntax_missing_rparen_while_fail.slfr b/testcases/syntax_missing_rparen_while_fail.slfr new file mode 100644 index 0000000..13aa4d1 --- /dev/null +++ b/testcases/syntax_missing_rparen_while_fail.slfr @@ -0,0 +1,3 @@ +while (true { + i64 x = 1; +} diff --git a/testcases/syntax_missing_semicolon_assign_fail.slfr b/testcases/syntax_missing_semicolon_assign_fail.slfr new file mode 100644 index 0000000..a802f10 --- /dev/null +++ b/testcases/syntax_missing_semicolon_assign_fail.slfr @@ -0,0 +1,2 @@ +i64 x = 0; +x = 2 diff --git a/testcases/syntax_missing_semicolon_decl_fail.slfr b/testcases/syntax_missing_semicolon_decl_fail.slfr new file mode 100644 index 0000000..854f204 --- /dev/null +++ b/testcases/syntax_missing_semicolon_decl_fail.slfr @@ -0,0 +1 @@ +i64 x = 10 diff --git a/testcases/syntax_missing_semicolon_expr_fail.slfr b/testcases/syntax_missing_semicolon_expr_fail.slfr new file mode 100644 index 0000000..f8ef45b --- /dev/null +++ b/testcases/syntax_missing_semicolon_expr_fail.slfr @@ -0,0 +1 @@ +(1 + 2) diff --git a/testcases/unary_chain_not_pass.slfr b/testcases/unary_chain_not_pass.slfr new file mode 100644 index 0000000..a02bf6b --- /dev/null +++ b/testcases/unary_chain_not_pass.slfr @@ -0,0 +1,2 @@ +bool a = true; +bool b = !!a; diff --git a/testcases/unary_postfix_expression_pass.slfr b/testcases/unary_postfix_expression_pass.slfr new file mode 100644 index 0000000..acdb18b --- /dev/null +++ b/testcases/unary_postfix_expression_pass.slfr @@ -0,0 +1,2 @@ +i64 x = 10; +i64 y = x++; diff --git a/testcases/unary_prefix_expression_pass.slfr b/testcases/unary_prefix_expression_pass.slfr new file mode 100644 index 0000000..0b8cf95 --- /dev/null +++ b/testcases/unary_prefix_expression_pass.slfr @@ -0,0 +1,2 @@ +i64 x = 10; +i64 y = ++x; diff --git a/testcases/while_condition_not_pass.slfr b/testcases/while_condition_not_pass.slfr new file mode 100644 index 0000000..42a89f1 --- /dev/null +++ b/testcases/while_condition_not_pass.slfr @@ -0,0 +1,6 @@ +bool run = true; +u64 i = 0; +while (!(!run)) { + i++; + run = false; +} diff --git a/testcases/while_nested_block_pass.slfr b/testcases/while_nested_block_pass.slfr new file mode 100644 index 0000000..7d37420 --- /dev/null +++ b/testcases/while_nested_block_pass.slfr @@ -0,0 +1,8 @@ +u64 i = 0; +u64 sum = 0; +while (i < 5) { + { + sum += i; + } + i++; +} diff --git a/testcases/while_with_if_else_pass.slfr b/testcases/while_with_if_else_pass.slfr new file mode 100644 index 0000000..6102227 --- /dev/null +++ b/testcases/while_with_if_else_pass.slfr @@ -0,0 +1,10 @@ +u64 i = 0; +u64 even_count = 0; +while (i < 6) { + if ((i & 1) == 0) { + even_count++; + } else { + even_count += 0; + } + i++; +}