Skip to main content

wowlab_engine_domain/rotation/
reference.rs

1//! Structural evaluation retained exclusively for explicit decision tracing and test parity.
2
3use super::{
4    buffer::DenseBuffer,
5    decision_trace::DecisionTraceTarget,
6    prepared::PreparedRotation,
7    reference_backend::{ReferenceBackend, ReferenceFrame, ReferenceRecorderCtx},
8    result::EvalResult,
9};
10
11pub(super) fn evaluate_trace(
12    prepared: &PreparedRotation,
13    buffer: &mut DenseBuffer,
14    now_secs: f64,
15    sink: DecisionTraceTarget,
16) -> EvalResult {
17    let context = ReferenceRecorderCtx {
18        rotation: prepared.rotation(),
19        schema: prepared.schema(),
20        resolver: prepared.resolver(),
21        table: prepared.table(),
22    };
23    let mut backend = ReferenceBackend::with_sink(
24        ReferenceFrame {
25            buffer,
26            now: now_secs,
27        },
28        sink,
29        context,
30    );
31
32    prepared.lower(&mut backend);
33
34    backend.finish()
35}
36
37#[cfg(test)]
38pub(super) fn evaluate_oracle(
39    prepared: &PreparedRotation,
40    buffer: &mut DenseBuffer,
41    now_secs: f64,
42) -> EvalResult {
43    let mut backend = ReferenceBackend::new(ReferenceFrame {
44        buffer,
45        now: now_secs,
46    });
47
48    prepared.lower(&mut backend);
49
50    backend.finish()
51}