pub module function_test; void greet() { let mut x = 1; x++; } pub void test_basic_function() { greet(); } i32 add(i32 a, i32 b) { a + b } pub void test_fn_params() { assert_eq!(add(2, 3), 5); } pub i32 test_fn_return() { 42 } pub i32 test_fn_early_return() { return 100; 0 } pub i32 test_fn_mut_param(i32 mut x) { x = x + 10; x } pub void test_method_call() { let s = "hello"; assert_eq!(s.len(), 5); assert_eq!(s.to_uppercase(), "HELLO"); } i32 triple(i32 x) { add(x, add(x, x)) } pub void test_nested_fn_calls() { assert_eq!(triple(5), 15); } i32 factorial(i32 n) { if n <= 1 { 1 } else { n * factorial(n - 1) } } pub void test_recursive_fn() { assert_eq!(factorial(5), 120); } T identity(T x) { x } pub void test_fn_generic() { assert_eq!(identity(42), 42); assert_eq!(identity("hello"), "hello"); } pub void run_tests() { test_basic_function(); test_fn_params(); assert_eq!(test_fn_return(), 42); assert_eq!(test_fn_early_return(), 100); assert_eq!(test_fn_mut_param(5), 15); test_method_call(); test_nested_fn_calls(); test_recursive_fn(); test_fn_generic(); }