Fixed compiler bug as a result of the 'check' test variant

This commit is contained in:
2025-12-30 12:05:54 -07:00
parent c133dc3c80
commit 04c205b31d
8 changed files with 303 additions and 87 deletions

View File

@@ -4,15 +4,21 @@ use pretty_assertions::assert_eq;
#[test]
fn simple_binary_expression() -> Result<()> {
let compiled = compile! {
debug
let result = compile! {
check
"
let i = 1 + 2;
"
};
assert!(
result.errors.is_empty(),
"Expected no errors, got: {:?}",
result.errors
);
assert_eq!(
compiled,
result.output,
indoc! {
"
j main
@@ -27,8 +33,8 @@ fn simple_binary_expression() -> Result<()> {
#[test]
fn nested_binary_expressions() -> Result<()> {
let compiled = compile! {
debug
let result = compile! {
check
"
fn calculateArgs(arg1, arg2, arg3) {
return (arg1 + arg2) * arg3;
@@ -38,8 +44,14 @@ fn nested_binary_expressions() -> Result<()> {
"
};
assert!(
result.errors.is_empty(),
"Expected no errors, got: {:?}",
result.errors
);
assert_eq!(
compiled,
result.output,
indoc! {
"
j main
@@ -72,15 +84,21 @@ fn nested_binary_expressions() -> Result<()> {
#[test]
fn stress_test_constant_folding() -> Result<()> {
let compiled = compile! {
debug
let result = compile! {
check
"
let negationHell = (-1 + -2) * (-3 + (-4 * (-5 + -6)));
"
};
assert!(
result.errors.is_empty(),
"Expected no errors, got: {:?}",
result.errors
);
assert_eq!(
compiled,
result.output,
indoc! {
"
j main
@@ -95,16 +113,22 @@ fn stress_test_constant_folding() -> Result<()> {
#[test]
fn test_constant_folding_with_variables_mixed_in() -> Result<()> {
let compiled = compile! {
debug
let result = compile! {
check
r#"
device self = "db";
let i = 1 - 3 * (1 + 123.4) * self.Setting + 245c;
"#
};
assert!(
result.errors.is_empty(),
"Expected no errors, got: {:?}",
result.errors
);
assert_eq!(
compiled,
result.output,
indoc! {
"
j main
@@ -123,15 +147,21 @@ fn test_constant_folding_with_variables_mixed_in() -> Result<()> {
#[test]
fn test_ternary_expression() -> Result<()> {
let compiled = compile! {
debug
let result = compile! {
check
r#"
let i = 1 > 2 ? 15 : 20;
"#
};
assert!(
result.errors.is_empty(),
"Expected no errors, got: {:?}",
result.errors
);
assert_eq!(
compiled,
result.output,
indoc! {
"
j main
@@ -148,16 +178,22 @@ fn test_ternary_expression() -> Result<()> {
#[test]
fn test_ternary_expression_assignment() -> Result<()> {
let compiled = compile! {
debug
let result = compile! {
check
r#"
let i = 0;
i = 1 > 2 ? 15 : 20;
"#
};
assert!(
result.errors.is_empty(),
"Expected no errors, got: {:?}",
result.errors
);
assert_eq!(
compiled,
result.output,
indoc! {
"
j main
@@ -175,15 +211,21 @@ fn test_ternary_expression_assignment() -> Result<()> {
#[test]
fn test_negative_literals() -> Result<()> {
let compiled = compile!(
debug
let result = compile!(
check
r#"
let item = -10c - 20c;
"#
);
assert!(
result.errors.is_empty(),
"Expected no errors, got: {:?}",
result.errors
);
assert_eq!(
compiled,
result.output,
indoc! {
"
j main
@@ -198,16 +240,22 @@ fn test_negative_literals() -> Result<()> {
#[test]
fn test_mismatched_temperature_literals() -> Result<()> {
let compiled = compile!(
debug
let result = compile!(
check
r#"
let item = -10c - 100k;
let item2 = item + 500c;
"#
);
assert!(
result.errors.is_empty(),
"Expected no errors, got: {:?}",
result.errors
);
assert_eq!(
compiled,
result.output,
indoc! {
"
j main