use dist_agent_lang::Runtime;
use dist_agent_lang::runtime::{ReentrancyGuard, SafeMath, StateIsolationManager};
use dist_agent_lang::runtime::values::Value;
#[test]
fn test_runtime_initialization() {
let _runtime = Runtime::new();
assert!(true);
}
#[test]
fn test_reentrancy_protection() {
let guard = ReentrancyGuard::new();
let result1 = guard.enter("function1", Some("contract1"));
assert!(result1.is_ok());
let result2 = guard.enter("function1", Some("contract1"));
assert!(result2.is_err());
drop(result1.unwrap());
let result3 = guard.enter("function1", Some("contract1"));
assert!(result3.is_ok());
}
#[test]
fn test_safe_math_overflow() {
let max_int = Value::Int(i64::MAX);
let one = Value::Int(1);
let result = SafeMath::add(&max_int, &one);
assert!(result.is_err()); }
#[test]
fn test_safe_math_underflow() {
let min_int = Value::Int(i64::MIN);
let one = Value::Int(1);
let result = SafeMath::subtract(&min_int, &one);
assert!(result.is_err()); }
#[test]
fn test_state_isolation() {
let mut manager = StateIsolationManager::new();
let result = manager.create_contract(
"0x1234".to_string(),
"Contract1".to_string(),
"0xOwner".to_string(),
"hybrid".to_string(),
);
assert!(result.is_ok());
assert!(manager.get_contract("0x1234").is_some());
assert!(manager.get_contract("0x5678").is_none());
}