Files
Multi_Swarm_Coevolutive/tests/unit/test_diversity.py
T
Adriano Dal Pastro b6539802e0 refactor(layout): rename multi_swarm → multi_swarm_core con doppia nidificazione uv workspace
- mv src/multi_swarm → src/multi_swarm_core/multi_swarm_core (member layout)
- sed-replace globale degli import: from/import multi_swarm.* → multi_swarm_core.*
- 115 occorrenze aggiornate in src/ scripts/ tests/
- multi_swarm_coevolutive (nome repo) preservato dal word boundary

Pre-condizione per il setup uv workspace della Fase 3.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 17:43:48 +00:00

46 lines
1.3 KiB
Python

from __future__ import annotations
from multi_swarm_core.metrics.diversity import population_prompt_diversity
def test_empty_or_single_prompt_zero_diversity() -> None:
assert population_prompt_diversity([]) == 0.0
assert population_prompt_diversity(["solo prompt"]) == 0.0
def test_identical_prompts_zero_diversity() -> None:
prompts = ["Strategia RSI < 30 long"] * 5
assert population_prompt_diversity(prompts) == 0.0
def test_completely_different_prompts_high_diversity() -> None:
prompts = [
"AAAAAA AAAA AAAAA",
"BBBBBB BBBB BBBBB",
"CCCCCC CCCC CCCCC",
"DDDDDD DDDD DDDDD",
]
d = population_prompt_diversity(prompts)
# SequenceMatcher considera spazi e lunghezza simili → similarity > 0
# anche su stringhe completamente "diverse". Soglia realistica: 0.8.
assert d > 0.8
def test_partial_overlap_intermediate_diversity() -> None:
prompts = [
"Strategia momentum 1h con RSI",
"Strategia momentum 1h con SMA",
"Strategia momentum 4h con RSI",
]
d = population_prompt_diversity(prompts)
assert 0.05 < d < 0.5
def test_diversity_symmetric() -> None:
prompts_a = ["x", "yy", "zzz"]
prompts_b = ["zzz", "x", "yy"]
assert (
abs(population_prompt_diversity(prompts_a)
- population_prompt_diversity(prompts_b)) < 1e-9
)