22
33from __future__ import annotations
44
5+ import concurrent .futures
56import hashlib
67import json
78from collections .abc import Callable
@@ -122,9 +123,8 @@ def evaluate_reference_suite(
122123 suite = json .loads (fixture_path .read_text (encoding = "utf-8" ))
123124 released_at = suite .get ("releasedAt" , DEFAULT_RELEASED_AT )
124125 invoke = transport or _http_transport (endpoint , timeout_seconds )
125- evaluated = []
126126
127- for source_case in suite [ "cases" ]:
127+ def process_case ( source_case : dict [ str , Any ]) -> tuple [ dict [ str , Any ], dict [ str , Any ] ]:
128128 envelope = _build_envelope (source_case , suite ["suiteId" ], released_at )
129129 output , events = _validate_response (invoke (envelope ), envelope )
130130 live_case = {** source_case , "response" : output }
@@ -142,17 +142,18 @@ def evaluate_reference_suite(
142142 "normalization" : "fixture-observed" ,
143143 },
144144 }
145- evaluated .append (
146- _evaluate_case_with_evidence (
147- live_case ,
148- suite ["suiteId" ],
149- released_at ,
150- source_case = source_case ,
151- metadata = envelope ,
152- execution_evidence = evidence ,
153- )
145+ return _evaluate_case_with_evidence (
146+ live_case ,
147+ suite ["suiteId" ],
148+ released_at ,
149+ source_case = source_case ,
150+ metadata = envelope ,
151+ execution_evidence = evidence ,
154152 )
155153
154+ with concurrent .futures .ThreadPoolExecutor (max_workers = 10 ) as executor :
155+ evaluated = list (executor .map (process_case , suite ["cases" ]))
156+
156157 results = [result for result , _ in evaluated ]
157158 return {
158159 "schemaVersion" : "0.2.0" ,
0 commit comments