use algorithmify::Interpreter;
use algorithmify_macros::define_function_builder;
#[test]
pub fn test_vector() {
#[define_function_builder]
fn vector() -> usize {
let mut vector = vec![1, 2, 3];
for i in 0..3 {
vector[i] = (i + 1) * 2;
}
vector[2]
}
let expression = Interpreter::execute_function(vector__function_builder()).unwrap();
assert_eq!(vector(), 6);
assert_eq!(expression, 6i64.into());
}
#[test]
pub fn test_vector_copy() {
#[define_function_builder]
fn vector_copy() -> usize {
let vector = vec![1, 2, 3];
let mut other_vector = vec![0; 3];
for i in 0..3 {
other_vector[i] = vector[i] * 2;
}
other_vector[2]
}
let expression = Interpreter::execute_function(vector_copy__function_builder()).unwrap();
assert_eq!(vector_copy(), 6);
assert_eq!(expression, 6.into());
}
#[test]
pub fn test_function_call() {
#[define_function_builder]
fn sum(a: i32, b: i32) -> i32 {
a + b
}
#[define_function_builder]
fn function_call() -> i32 {
let a = sum(1, 2);
sum(a, 2)
}
let expression = Interpreter::execute_function(function_call__function_builder()).unwrap();
assert_eq!(function_call(), 5);
assert_eq!(expression, 5.into());
}
#[test]
pub fn test_method_call() {
#[define_function_builder]
fn method_call() -> usize {
let vec = vec![1, 2, 3];
vec.len()
}
let expression = Interpreter::execute_function(method_call__function_builder()).unwrap();
assert_eq!(method_call(), 3);
assert_eq!(expression, 3usize.into());
}