Files
FusionAGI/tests/test_persistent_learning.py

69 lines
2.4 KiB
Python
Raw Permalink Normal View History

"""Tests for PersistentLearningStore."""
import tempfile
from fusionagi.governance.adaptive_ethics import AdaptiveEthics
from fusionagi.governance.consequence_engine import ConsequenceEngine
from fusionagi.memory.persistent_learning import PersistentLearningStore
def test_save_and_load_consequences() -> None:
with tempfile.TemporaryDirectory() as tmpdir:
engine = ConsequenceEngine()
engine.record_choice(
choice_id="c1",
actor="test",
action_taken="act1",
estimated_risk=0.3,
estimated_reward=0.7,
)
engine.record_consequence("c1", outcome_positive=True, actual_risk_realized=0.1, actual_reward_gained=0.8)
store = PersistentLearningStore(data_dir=tmpdir)
path = store.save_consequences(engine)
assert path.endswith("consequences.json")
engine2 = ConsequenceEngine()
loaded = store.load_consequences(engine2)
assert loaded == 1
def test_save_and_load_ethics() -> None:
with tempfile.TemporaryDirectory() as tmpdir:
ethics = AdaptiveEthics()
ethics.record_experience(
action_type="file_read",
context_summary="reading file outside scope",
advisory_reason="out of scope",
proceeded=True,
outcome_positive=True,
)
store = PersistentLearningStore(data_dir=tmpdir)
path = store.save_ethics(ethics)
assert path.endswith("ethics.json")
ethics2 = AdaptiveEthics()
loaded = store.load_ethics(ethics2)
assert loaded == 1
def test_save_risk_histories() -> None:
with tempfile.TemporaryDirectory() as tmpdir:
engine = ConsequenceEngine()
engine.record_choice("c1", actor="t", action_taken="act1", estimated_risk=0.5, estimated_reward=0.5)
engine.record_consequence("c1", outcome_positive=True, actual_risk_realized=0.2, actual_reward_gained=0.8)
store = PersistentLearningStore(data_dir=tmpdir)
path = store.save_risk_histories(engine)
assert path.endswith("risk_histories.json")
def test_load_nonexistent_returns_zero() -> None:
with tempfile.TemporaryDirectory() as tmpdir:
store = PersistentLearningStore(data_dir=tmpdir)
engine = ConsequenceEngine()
assert store.load_consequences(engine) == 0
ethics = AdaptiveEthics()
assert store.load_ethics(ethics) == 0