//! Tests de la boucle d'un tour, sur un faux hôte aux réponses scriptées. use super::*; use crate::chat::compact::CompactConfig; use crate::chat::types::{StatsEvent, ToolFunction}; use crate::chat::wire::resolve_chat_endpoint; use serde_json::json; use std::collections::VecDeque; use std::sync::Mutex; /// Une réponse scriptée du moteur. enum Script { Ok(Vec), Status(u16, String), Net(NetKind), /// Corps qui s'interrompt sur une erreur de lecture après ces lignes. Cut(Vec), } /// Une complétion signalée à la sonde : (outils, kwargs, effort). type Completion = (usize, Option>, String); #[derive(Default)] struct Fake { script: Mutex>, bodies: Mutex>, tools: Mutex>, execs: Mutex>, compacted: Mutex>>, phases: Mutex>, queued: Mutex>, efforts: Mutex>, /// L'arrêt à déclencher pendant l'exécution d'un outil. stop_on_exec: Mutex>>, /// Verdict « préfixe instable » de la sonde (NUDGE_IN_TOOL). unstable: Mutex, /// Complétions signalées à la sonde : (outils, kwargs, effort). completions: Mutex>, /// Télémétrie rangée : (relevé, empreintes, externe) ; et ce que le Go /// en tire. perfs: Mutex, bool)>>, noted: Mutex, } impl Fake { fn new(script: Vec