137 lines
3.3 KiB
Rust
137 lines
3.3 KiB
Rust
pub mod ast;
|
|
pub mod interpreter;
|
|
pub mod lexer;
|
|
pub mod parser;
|
|
pub mod token;
|
|
pub mod stringstore;
|
|
pub mod astoptimizer;
|
|
pub mod util;
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::interpreter::{Interpreter, Value};
|
|
use std::fs::read_to_string;
|
|
|
|
#[test]
|
|
fn test_euler1() {
|
|
let filename = "euler1.nek";
|
|
let correct_result = 233168;
|
|
|
|
let mut interpreter = Interpreter::new();
|
|
interpreter.capture_output = true;
|
|
|
|
let code = read_to_string(format!("examples/{filename}")).unwrap();
|
|
|
|
interpreter.run_str(&code);
|
|
|
|
let expected_output = [Value::I64(correct_result)];
|
|
|
|
assert_eq!(interpreter.output(), &expected_output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_euler2() {
|
|
let filename = "euler2.nek";
|
|
let correct_result = 4613732;
|
|
|
|
let mut interpreter = Interpreter::new();
|
|
interpreter.capture_output = true;
|
|
|
|
let code = read_to_string(format!("examples/{filename}")).unwrap();
|
|
|
|
interpreter.run_str(&code);
|
|
|
|
let expected_output = [Value::I64(correct_result)];
|
|
|
|
assert_eq!(interpreter.output(), &expected_output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_euler3() {
|
|
let filename = "euler3.nek";
|
|
let correct_result = 6857;
|
|
|
|
let mut interpreter = Interpreter::new();
|
|
interpreter.capture_output = true;
|
|
|
|
let code = read_to_string(format!("examples/{filename}")).unwrap();
|
|
|
|
interpreter.run_str(&code);
|
|
|
|
let expected_output = [Value::I64(correct_result)];
|
|
|
|
assert_eq!(interpreter.output(), &expected_output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_euler4() {
|
|
let filename = "euler4.nek";
|
|
let correct_result = 906609;
|
|
|
|
let mut interpreter = Interpreter::new();
|
|
interpreter.capture_output = true;
|
|
|
|
let code = read_to_string(format!("examples/{filename}")).unwrap();
|
|
|
|
interpreter.run_str(&code);
|
|
|
|
let expected_output = [Value::I64(correct_result)];
|
|
|
|
assert_eq!(interpreter.output(), &expected_output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_euler5() {
|
|
let filename = "euler5.nek";
|
|
let correct_result = 232792560;
|
|
|
|
let mut interpreter = Interpreter::new();
|
|
interpreter.capture_output = true;
|
|
|
|
let code = read_to_string(format!("examples/{filename}")).unwrap();
|
|
|
|
interpreter.run_str(&code);
|
|
|
|
let expected_output = [Value::I64(correct_result)];
|
|
|
|
assert_eq!(interpreter.output(), &expected_output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_recursive_fib() {
|
|
|
|
let filename = "recursive_fib.nek";
|
|
let correct_result = 832040;
|
|
|
|
let mut interpreter = Interpreter::new();
|
|
interpreter.capture_output = true;
|
|
|
|
let code = read_to_string(format!("examples/{filename}")).unwrap();
|
|
|
|
interpreter.run_str(&code);
|
|
|
|
let expected_output = [Value::I64(correct_result)];
|
|
|
|
assert_eq!(interpreter.output(), &expected_output);
|
|
}
|
|
|
|
#[test]
|
|
fn test_functions() {
|
|
|
|
let filename = "test_functions.nek";
|
|
let correct_result = 69;
|
|
|
|
let mut interpreter = Interpreter::new();
|
|
interpreter.capture_output = true;
|
|
|
|
let code = read_to_string(format!("examples/{filename}")).unwrap();
|
|
|
|
interpreter.run_str(&code);
|
|
|
|
let expected_output = [Value::I64(correct_result)];
|
|
|
|
assert_eq!(interpreter.output(), &expected_output);
|
|
}
|
|
}
|
|
|