#![allow(missing_docs)]
use assert_cmd::Command;
use predicates::prelude::*;
fn ruchy_cmd() -> Command {
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
}
#[test]
fn test_parser_073_const_basic_declaration() {
let code = r#"
const PI = 3.14159
println("{}", PI)
"#;
ruchy_cmd()
.arg("-e")
.arg(code)
.assert()
.success()
.stdout(predicate::str::contains("3.14159"));
}
#[test]
fn test_parser_073_const_integer() {
let code = r#"
const MAX_SIZE = 100
println("{}", MAX_SIZE)
"#;
ruchy_cmd()
.arg("-e")
.arg(code)
.assert()
.success()
.stdout(predicate::str::contains("100"));
}
#[test]
fn test_parser_073_const_string() {
let code = r#"
const GREETING = "Hello, World!"
println("{}", GREETING)
"#;
ruchy_cmd()
.arg("-e")
.arg(code)
.assert()
.success()
.stdout(predicate::str::contains("Hello, World!"));
}
#[test]
fn test_parser_073_const_expression() {
let code = r#"
const DOUBLE_PI = 3.14159 * 2
println("{}", DOUBLE_PI)
"#;
ruchy_cmd()
.arg("-e")
.arg(code)
.assert()
.success()
.stdout(predicate::str::contains("6.28318"));
}
#[test]
fn test_parser_073_const_multiple_declarations() {
let code = r#"
const PI = 3.14159
const E = 2.71828
println("{}", PI + E)
"#;
ruchy_cmd()
.arg("-e")
.arg(code)
.assert()
.success()
.stdout(predicate::str::contains("5.85987"));
}
#[test]
fn test_parser_073_const_in_function() {
let code = r#"
const MULTIPLIER = 10
fun multiply(x) {
x * MULTIPLIER
}
println("{}", multiply(5))
"#;
ruchy_cmd()
.arg("-e")
.arg(code)
.assert()
.success()
.stdout(predicate::str::contains("50"));
}
#[test]
fn test_parser_073_const_vs_let() {
let code = r#"
const PI = 3.14159
let radius = 5
println("{}", PI * radius * radius)
"#;
ruchy_cmd()
.arg("-e")
.arg(code)
.assert()
.success()
.stdout(predicate::str::contains("78.53975"));
}
#[test]
fn test_parser_073_const_transpile_mode() {
let code = r#"
const PI = 3.14159
println("{}", PI)
"#;
let temp_file = "/tmp/test_parser_073_transpile.ruchy";
std::fs::write(temp_file, code).expect("Failed to write temp file");
ruchy_cmd()
.arg("transpile")
.arg(temp_file)
.assert()
.success()
.stdout(predicate::str::contains("let"))
.stdout(predicate::str::contains("PI"));
}
#[test]
fn test_parser_073_const_check_mode() {
let code = r"
const MAX_VALUE = 1000
";
let temp_file = "/tmp/test_parser_073_check.ruchy";
std::fs::write(temp_file, code).expect("Failed to write temp file");
ruchy_cmd().arg("check").arg(temp_file).assert().success();
}
#[test]
fn test_parser_073_const_function_still_works() {
let code = r#"
const fun get_pi() {
3.14159
}
println("{}", get_pi())
"#;
ruchy_cmd()
.arg("-e")
.arg(code)
.assert()
.success()
.stdout(predicate::str::contains("3.14159"));
}