Changeset 8a238e2 in flexoentity for tests/test_id_stress.py
- Timestamp:
- 10/20/25 13:15:45 (3 months ago)
- Branches:
- master
- Children:
- 3d65ce5
- Parents:
- 045b864
- File:
-
- 1 edited
-
tests/test_id_stress.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tests/test_id_stress.py
r045b864 r8a238e2 3 3 Focus: collision avoidance, version ceiling, reproducibility. 4 4 """ 5 import os6 import sys7 5 import pytest 6 import random 8 7 9 sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) 10 from flexoentity import FlexOID, EntityType, EntityState, FlexoEntity 8 from flexoentity import FlexOID, EntityType, EntityState 11 9 10 from tests.conftest import DummyEntity 12 11 13 12 # ────────────────────────────────────────────────────────────────────────────── … … 19 18 seeds = [f"question {i}" for i in range(10_000)] 20 19 21 ids = [] 22 for seed in seeds: 23 flexo_id = FlexOID.generate(domain, etype, estate, seed) 24 ids.append(flexo_id) 20 ids = [FlexOID.generate(domain, etype, estate, seed) for seed in seeds] 25 21 26 22 assert len(ids) == len(set(ids)), "ID collisions detected in bulk generation" 27 23 28 def test_disambiguator_trigger(): 29 """ 30 Generating the same entity twice with same inputs yields identical ID. 31 (No runtime disambiguation; IDs are deterministic by design.) 32 """ 33 domain = "AF" 34 etype = EntityType.QUESTION 35 estate = EntityState.DRAFT 36 text = "identical question text" 37 id1 = FlexOID.generate(domain, etype, estate, text) 38 id2 = FlexOID.generate(domain, etype, estate, text) 39 # IDs must be identical, because we now enforce determinism, not randomization 40 assert id1 == id2 41 assert id1.signature == id2.signature 42 24 25 def test_disambiguator_trigger(): 26 """ 27 Generating the same entity twice with same inputs yields identical ID. 28 (No runtime disambiguation; IDs are deterministic by design.) 29 """ 30 domain = "AF" 31 etype = EntityType.QUESTION 32 estate = EntityState.DRAFT 33 text = "identical question text" 34 id1 = FlexOID.generate(domain, etype, estate, text) 35 id2 = FlexOID.generate(domain, etype, estate, text) 36 # IDs must be identical, because we now enforce determinism, not randomization 37 assert id1 == id2 38 assert id1.signature == id2.signature 39 40 43 41 def test_id_reproducibility_across_runs(): 44 42 """ … … 60 58 def test_version_ceiling_enforcement(): 61 59 """Simulate approaching @999 to trigger obsolescence guard.""" 62 entity = FlexoEntity("AF", EntityType.EXAM, "Final Exam 2025", EntityState.DRAFT)60 entity = DummyEntity(domain="AF", etype=EntityType.EXAM, state=EntityState.DRAFT, seed="Final Exam 2025") 63 61 entity.approve() 64 62 # artificially bump version number to near ceiling 65 66 63 entity.flexo_id = FlexOID.from_oid_and_version(entity.flexo_id, 998) 67 64 … … 80 77 ensure all final IDs and fingerprints are unique and valid. 81 78 """ 82 import random 83 texts = [f"random question {i}" for i in range(100)] 84 entities = [FlexoEntity("AF", EntityType.QUESTION, t) for t in texts] 79 entities = [DummyEntity(domain="AF", etype=EntityType.QUESTION, state=EntityState.DRAFT, seed=f"random question {i}") for i in range(100)] 85 80 86 81 for e in entities: 87 82 # random edit, approval, signing 88 e.modify_content(e.text_seed + " updated") 83 e._seed += " updated" 84 e._update_fingerprint() 89 85 e.approve() 90 86 if random.random() > 0.3:
Note:
See TracChangeset
for help on using the changeset viewer.
