File size: 2,425 Bytes
70b6a39 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | """Unit tests for CreditLedger."""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from ledger.ledger import CreditLedger
def test_earn_and_balance():
ledger = CreditLedger(decay_lambda=0.0)
ledger.earn("agent1", "task1", "action1", 10.0, 1.0, 100.0, "test", "model_call")
bal = ledger.balance("agent1", "model_call")
assert abs(bal - 10.0) < 0.01, f"Expected 10.0, got {bal}"
print("PASS: test_earn_and_balance")
def test_spend():
ledger = CreditLedger(decay_lambda=0.0)
ledger.earn("agent1", "task1", "action1", 10.0, 1.0, 100.0, "test")
ok = ledger.spend("agent1", "task2", "action2", 3.0)
assert ok
bal = ledger.balance("agent1")
assert abs(bal - 7.0) < 0.01, f"Expected 7.0, got {bal}"
print("PASS: test_spend")
def test_spend_insufficient():
ledger = CreditLedger(decay_lambda=0.0)
ledger.earn("agent1", "task1", "action1", 2.0, 1.0, 100.0, "test")
ok = ledger.spend("agent1", "task2", "action2", 5.0)
assert not ok
print("PASS: test_spend_insufficient")
def test_transfer_blocked():
ledger = CreditLedger(decay_lambda=0.0)
ledger.earn("alice", "task1", "action1", 10.0, 1.0, 100.0, "test")
ok = ledger.transfer("alice", "bob", 5.0)
assert not ok
assert ledger.balance("alice") > 9.0, "Credits should not be transferred"
assert ledger.balance("bob") < 0.1, "Bob should not receive credits"
print("PASS: test_transfer_blocked")
def test_decay():
ledger = CreditLedger(decay_lambda=0.1)
ledger.earn("agent1", "task1", "action1", 10.0, 1.0, 100.0, "test")
import time; time.sleep(0.05)
bal = ledger.balance("agent1")
assert bal < 10.0, f"Expected <10.0 after decay, got {bal}"
print("PASS: test_decay")
def test_capability_scope():
ledger = CreditLedger(decay_lambda=0.0)
ledger.earn("agent1", "t1", "a1", 10.0, 1.0, 100.0, "test", "retrieval")
ledger.earn("agent1", "t1", "a1", 5.0, 1.0, 100.0, "test", "model_call")
assert abs(ledger.balance("agent1", "retrieval") - 10.0) < 0.01
assert abs(ledger.balance("agent1", "model_call") - 5.0) < 0.01
print("PASS: test_capability_scope")
def run_all():
test_earn_and_balance()
test_spend()
test_spend_insufficient()
test_transfer_blocked()
test_decay()
test_capability_scope()
print("\nAll ledger tests passed!")
if __name__ == "__main__":
run_all()
|