From 83fda4f08c30579d5cf598bf6cb2cb9258f0e22c Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Thu, 6 Aug 2026 06:46:28 +0000 Subject: [PATCH] Update the core-types runtime tests to record wires --- .../libraries/core-types/src/runtime.rs | 96 +++++++++++++++++-- 1 file changed, 87 insertions(+), 9 deletions(-) diff --git a/node-graph/libraries/core-types/src/runtime.rs b/node-graph/libraries/core-types/src/runtime.rs index 2b64275d23..3b7adb7d9c 100644 --- a/node-graph/libraries/core-types/src/runtime.rs +++ b/node-graph/libraries/core-types/src/runtime.rs @@ -171,6 +171,7 @@ mod tests { use crate::context::{ContextImpl, Ctx, CtxSnapshot, EvalScope, ExtractFootprint, ExtractVarArgs, VarArgLink, VarArgSlots}; use crate::gpoll::GPoll; use crate::node::Node; + use crate::record::{Layout, RecordExtract, RecordLift, element_dims}; use crate::transform::Footprint; use std::sync::Mutex; use std::sync::atomic::{AtomicU32, Ordering}; @@ -257,6 +258,18 @@ mod tests { } } + fn element_layout() -> Layout { + Layout::default().with_writes(0, element_dims::(), &[]) + } + + fn lifted(value: T) -> RecordLift> { + RecordLift::new(SourceNode(value)) + } + + fn extract(graph: N) -> RecordExtract { + RecordExtract::new(graph, &element_layout::()) + } + static SLOW_DOUBLE_RUNS: AtomicU32 = AtomicU32::new(0); #[node_macro::node(category(""))] @@ -328,7 +341,14 @@ mod tests { let ctx = ContextImpl::root(&scope); let runtime = Arc::new(MockRuntime::default()); - let graph = SlowDoubleNode::new(SourceNode(21.0f64), SourceNode(RuntimeHandle(runtime.clone())), SourceNode(7u64)); + let graph = extract::(SlowDoubleNode::new( + lifted(21.0f64), + lifted(RuntimeHandle(runtime.clone())), + lifted(7u64), + &element_layout::(), + &element_layout::(), + &element_layout::(), + )); assert_eq!(Node::eval(&graph, &ctx), GPoll::Pending); assert_eq!(Node::eval(&graph, &ctx), GPoll::Pending); @@ -348,7 +368,14 @@ mod tests { let ctx = ContextImpl::root(&scope); let runtime = Arc::new(MockRuntime::default()); - let graph = PreviewDoubleNode::new(SourceNode(21.0f64), SourceNode(RuntimeHandle(runtime.clone())), SourceNode(1u64)); + let graph = extract::(PreviewDoubleNode::new( + lifted(21.0f64), + lifted(RuntimeHandle(runtime.clone())), + lifted(1u64), + &element_layout::(), + &element_layout::(), + &element_layout::(), + )); assert_eq!(Node::eval(&graph, &ctx), GPoll::Partial(-1.0)); runtime.drain(); @@ -363,7 +390,14 @@ mod tests { let ctx = ContextImpl::root(&scope); let runtime = Arc::new(MockRuntime::default()); - let graph = StrictDoubleNode::new(SourceNode(21.0f64), SourceNode(RuntimeHandle(runtime.clone())), SourceNode(2u64)); + let graph = extract::(StrictDoubleNode::new( + lifted(21.0f64), + lifted(RuntimeHandle(runtime.clone())), + lifted(2u64), + &element_layout::(), + &element_layout::(), + &element_layout::(), + )); assert_eq!(Node::eval(&graph, &ctx), GPoll::Pending); runtime.drain(); @@ -378,7 +412,14 @@ mod tests { let ctx = ContextImpl::root(&scope); let runtime = Arc::new(MockRuntime::default()); - let graph = StagedDoubleNode::new(SourceNode(21.0f64), SourceNode(RuntimeHandle(runtime.clone())), SourceNode(8u64)); + let graph = extract::(StagedDoubleNode::new( + lifted(21.0f64), + lifted(RuntimeHandle(runtime.clone())), + lifted(8u64), + &element_layout::(), + &element_layout::(), + &element_layout::(), + )); assert_eq!(Node::eval(&graph, &ctx), GPoll::Pending); assert_eq!(STAGED_RUNS.load(Ordering::Relaxed), 1, "the prologue runs synchronously on the miss"); @@ -398,7 +439,16 @@ mod tests { let gate = Arc::new(std::sync::atomic::AtomicBool::new(false)); let runtime = Arc::new(MockRuntime::default()); - let graph = StagedSumNode::new(SourceNode(40.0f64), GatedSource(gate.clone(), 2.0), SourceNode(RuntimeHandle(runtime.clone())), SourceNode(9u64)); + let graph = extract::(StagedSumNode::new( + lifted(40.0f64), + RecordLift::::new(GatedSource(gate.clone(), 2.0)), + lifted(RuntimeHandle(runtime.clone())), + lifted(9u64), + &element_layout::(), + &element_layout::(), + &element_layout::(), + &element_layout::(), + )); assert_eq!(Node::eval(&graph, &ctx), GPoll::Pending); assert_eq!(runtime.drain(), Vec::::new(), "an interrupted prologue must not spawn or claim the slot"); @@ -422,7 +472,14 @@ mod tests { let ctx = root.with_varargs(&link); let runtime = Arc::new(MockRuntime::default()); - let graph = SnapshotVarargNode::new(SourceNode(()), SourceNode(RuntimeHandle(runtime.clone())), SourceNode(5u64)); + let graph = extract::(SnapshotVarargNode::new( + lifted(()), + lifted(RuntimeHandle(runtime.clone())), + lifted(5u64), + &element_layout::<()>(), + &element_layout::(), + &element_layout::(), + )); assert_eq!(Node::eval(&graph, &ctx), GPoll::Pending); runtime.drain(); @@ -439,7 +496,14 @@ mod tests { let ctx = root.with_footprint(&footprint); let runtime = Arc::new(MockRuntime::default()); - let graph = SnapshotResolutionNode::new(SourceNode(()), SourceNode(RuntimeHandle(runtime.clone())), SourceNode(3u64)); + let graph = extract::(SnapshotResolutionNode::new( + lifted(()), + lifted(RuntimeHandle(runtime.clone())), + lifted(3u64), + &element_layout::<()>(), + &element_layout::(), + &element_layout::(), + )); assert_eq!(Node::eval(&graph, &ctx), GPoll::Pending); runtime.drain(); @@ -545,7 +609,14 @@ mod tests { let arena = Arena::new(64).unwrap(); let runtime = Arc::new(GraphRuntime::new(CollectSpawner::default())); runtime.retain_sources(&[13]); - let graph = InlineDoubleNode::new(SourceNode(21.0f64), SourceNode(RuntimeHandle(runtime.clone())), SourceNode(13u64)); + let graph = extract::(InlineDoubleNode::new( + lifted(21.0f64), + lifted(RuntimeHandle(runtime.clone())), + lifted(13u64), + &element_layout::(), + &element_layout::(), + &element_layout::(), + )); let snapshot = runtime.snapshot(); let scope = EvalScope::new(None, None, None, &snapshot, &arena); @@ -561,7 +632,14 @@ mod tests { let arena = Arena::new(64).unwrap(); let runtime = Arc::new(GraphRuntime::new(CollectSpawner::default())); runtime.retain_sources(&[11]); - let graph = EpilogueDoubleNode::new(SourceNode(21.0f64), SourceNode(RuntimeHandle(runtime.clone())), SourceNode(11u64)); + let graph = extract::(EpilogueDoubleNode::new( + lifted(21.0f64), + lifted(RuntimeHandle(runtime.clone())), + lifted(11u64), + &element_layout::(), + &element_layout::(), + &element_layout::(), + )); let snapshot = runtime.snapshot(); let scope = EvalScope::new(None, None, None, &snapshot, &arena);