()
| 199 | |
| 200 | #[tokio::test] |
| 201 | async fn delegates_to_inner_guard() { |
| 202 | #[derive(Default)] |
| 203 | struct Counting { |
| 204 | checks: AtomicUsize, |
| 205 | records: AtomicUsize, |
| 206 | } |
| 207 | #[async_trait] |
| 208 | impl BudgetGuard for Counting { |
| 209 | async fn check_before_llm(&self, _: &str, _: usize) -> BudgetDecision { |
| 210 | self.checks.fetch_add(1, Ordering::SeqCst); |
| 211 | BudgetDecision::Allow |
| 212 | } |
| 213 | async fn record_after_llm(&self, _: &str, _: &TokenUsage) { |
| 214 | self.records.fetch_add(1, Ordering::SeqCst); |
| 215 | } |
| 216 | } |
| 217 | |
| 218 | let inner = Arc::new(Counting::default()); |
| 219 | let budget = WorkflowBudget::new(Some(1000)).with_inner(inner.clone()); |
| 220 | budget.check_before_llm("s", 0).await; |
| 221 | budget.record_after_llm("s", &usage(10)).await; |
| 222 | assert_eq!(inner.checks.load(Ordering::SeqCst), 1); |
| 223 | assert_eq!(inner.records.load(Ordering::SeqCst), 1); |
| 224 | assert_eq!(budget.consumed_tokens(), 10); |
| 225 | } |
| 226 | } |
nothing calls this directly
no test coverage detected