idea15-edgemind-verifiable-.../tests/test_safety.py

42 lines
1.4 KiB
Python

from edgemind import safety
def test_evaluate_predicate_basic_true():
state = {"battery": 50, "dist": 3}
assert safety.evaluate_predicate("battery > 20 and dist < 5", state) is True
def test_evaluate_predicate_basic_false():
state = {"battery": 10, "dist": 10}
assert safety.evaluate_predicate("battery > 20 or dist < 5", state) is False
def test_evaluate_predicate_unknown_name():
state = {"battery": 50}
try:
safety.evaluate_predicate("battery > 20 and foo < 5", state)
assert False, "Expected UnsafeExpression for unknown name"
except safety.UnsafeExpression:
pass
def test_evaluate_predicate_malicious_code():
state = {"battery": 50}
# Attempt to call builtins or import should be rejected
try:
safety.evaluate_predicate("__import__('os').system('echo hi') == 0", state)
assert False, "Expected UnsafeExpression for malicious code"
except safety.UnsafeExpression:
pass
def test_check_contracts_aggregates_results():
contracts = {
"c1": {"predicate": "battery > 20", "fail_safe": "halt"},
"c2": {"predicate": "battery > 80", "fail_safe": "safe-mode"},
}
state = {"battery": 50}
results = dict((cid, (passed, fs)) for cid, passed, fs in safety.check_contracts(contracts, state))
assert results["c1"][0] is True and results["c1"][1] == "halt"
assert results["c2"][0] is False and results["c2"][1] == "safe-mode"