mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-29 18:18:12 +08:00
Carry the new layout fields through the hand-built fixtures
The record fixtures spell their metas and resolved layouts out in full, so the name-from-input fields reach them as empty. `named_value!`'s example moves to `ignore`: its `for T` arm implements a core-types trait on the value type, which only core-types itself may do. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
81d72b159b
commit
bc7e2232e3
@@ -310,7 +310,7 @@ pub fn intern_name(name: &str) -> &'static str {
|
|||||||
/// `Row: &T` and `Row: Option<&T>` declare a token naming a reference value,
|
/// `Row: &T` and `Row: Option<&T>` declare a token naming a reference value,
|
||||||
/// whose payload the writing kernel parks in the arena.
|
/// whose payload the writing kernel parks in the arena.
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```ignore
|
||||||
/// core_types::named_value! {
|
/// core_types::named_value! {
|
||||||
/// /// Plain rows, implemented on the value type itself.
|
/// /// Plain rows, implemented on the value type itself.
|
||||||
/// for f64;
|
/// for f64;
|
||||||
@@ -318,6 +318,9 @@ pub fn intern_name(name: &str) -> &'static str {
|
|||||||
/// pub Text: &str;
|
/// pub Text: &str;
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
///
|
||||||
|
/// The `for T` arm implements this crate's trait on `T`, so rows over types
|
||||||
|
/// this crate does not own are declared here rather than by a caller.
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! named_value {
|
macro_rules! named_value {
|
||||||
() => {};
|
() => {};
|
||||||
|
|||||||
@@ -278,6 +278,7 @@ mod tests {
|
|||||||
plan: Vec::new(),
|
plan: Vec::new(),
|
||||||
layout: layout.clone(),
|
layout: layout.clone(),
|
||||||
lane_invariant: u32::MAX,
|
lane_invariant: u32::MAX,
|
||||||
|
named_writes: Vec::new(),
|
||||||
});
|
});
|
||||||
RecordExtract::new(graph, &layout)
|
RecordExtract::new(graph, &layout)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ mod tests {
|
|||||||
use core_types::context::{ContextImpl, EvalScope};
|
use core_types::context::{ContextImpl, EvalScope};
|
||||||
use core_types::node::Node;
|
use core_types::node::Node;
|
||||||
use core_types::record::LiftedSource;
|
use core_types::record::LiftedSource;
|
||||||
use core_types::registry::{SourceHandle, ErasedRecordNode};
|
use core_types::registry::{ErasedRecordNode, SourceHandle};
|
||||||
use std::sync::atomic::{AtomicU32, Ordering};
|
use std::sync::atomic::{AtomicU32, Ordering};
|
||||||
|
|
||||||
fn lifted<T: Clone + Send + Sync + core_types::StaticTypeSized>(value: T) -> LiftedSource<T, impl for<'c> Fn(&ContextImpl<'c>) -> GPoll<T>>
|
fn lifted<T: Clone + Send + Sync + core_types::StaticTypeSized>(value: T) -> LiftedSource<T, impl for<'c> Fn(&ContextImpl<'c>) -> GPoll<T>>
|
||||||
|
|||||||
@@ -662,6 +662,7 @@ mod tests {
|
|||||||
// The fixtures wire constants into every eager input, which the compiler
|
// The fixtures wire constants into every eager input, which the compiler
|
||||||
// pass records as lane-invariant.
|
// pass records as lane-invariant.
|
||||||
let resolved = core_types::record::RecordLayout {
|
let resolved = core_types::record::RecordLayout {
|
||||||
|
named_writes: Vec::new(),
|
||||||
lane_invariant: u32::MAX,
|
lane_invariant: u32::MAX,
|
||||||
..meta.resolve(inputs)
|
..meta.resolve(inputs)
|
||||||
};
|
};
|
||||||
@@ -671,6 +672,7 @@ mod tests {
|
|||||||
|
|
||||||
fn install_flip<N: Node<ContextImpl<'static>>>(mut node: N, layout: &Layout) -> N {
|
fn install_flip<N: Node<ContextImpl<'static>>>(mut node: N, layout: &Layout) -> N {
|
||||||
let bundle = core_types::record::RecordLayout {
|
let bundle = core_types::record::RecordLayout {
|
||||||
|
named_writes: Vec::new(),
|
||||||
frame_bytes: layout.frame_bytes(),
|
frame_bytes: layout.frame_bytes(),
|
||||||
plan: Vec::new(),
|
plan: Vec::new(),
|
||||||
layout: layout.clone(),
|
layout: layout.clone(),
|
||||||
@@ -764,6 +766,8 @@ mod tests {
|
|||||||
let frames = frames_for(&[&base, &count_layout]);
|
let frames = frames_for(&[&base, &count_layout]);
|
||||||
|
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -800,6 +804,8 @@ mod tests {
|
|||||||
let frames = frames_for(&[&base, &count_layout]);
|
let frames = frames_for(&[&base, &count_layout]);
|
||||||
|
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -844,6 +850,8 @@ mod tests {
|
|||||||
let frames = frames_for(&[&base, &count_layout, &reverse_layout]);
|
let frames = frames_for(&[&base, &count_layout, &reverse_layout]);
|
||||||
|
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -894,6 +902,8 @@ mod tests {
|
|||||||
&[Some(&base)],
|
&[Some(&base)],
|
||||||
);
|
);
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -992,6 +1002,8 @@ mod tests {
|
|||||||
field: Some((Length::NAME, 7.)),
|
field: Some((Length::NAME, 7.)),
|
||||||
};
|
};
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0, 1],
|
sources: vec![0, 1],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1060,6 +1072,8 @@ mod tests {
|
|||||||
field: Some((Opacity::NAME, 0.25)),
|
field: Some((Opacity::NAME, 0.25)),
|
||||||
};
|
};
|
||||||
let meta = || core_types::record::LayoutMeta {
|
let meta = || core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0, 1],
|
sources: vec![0, 1],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1134,6 +1148,8 @@ mod tests {
|
|||||||
field: Some((Length::NAME, 7.)),
|
field: Some((Length::NAME, 7.)),
|
||||||
};
|
};
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0, 1],
|
sources: vec![0, 1],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1178,6 +1194,8 @@ mod tests {
|
|||||||
|
|
||||||
let content_layout = leveled_f64_layout(&[]);
|
let content_layout = leveled_f64_layout(&[]);
|
||||||
let meta = || core_types::record::LayoutMeta {
|
let meta = || core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1187,6 +1205,8 @@ mod tests {
|
|||||||
folded: None,
|
folded: None,
|
||||||
};
|
};
|
||||||
let extend_meta = || core_types::record::LayoutMeta {
|
let extend_meta = || core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0, 1],
|
sources: vec![0, 1],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1262,6 +1282,8 @@ mod tests {
|
|||||||
let layout = leveled_f64_layout(&[]);
|
let layout = leveled_f64_layout(&[]);
|
||||||
let frames = frames_for(&[&layout]);
|
let frames = frames_for(&[&layout]);
|
||||||
let meta = || core_types::record::LayoutMeta {
|
let meta = || core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1315,6 +1337,8 @@ mod tests {
|
|||||||
};
|
};
|
||||||
let (index_edge, index_layout) = lifted_value(index);
|
let (index_edge, index_layout) = lifted_value(index);
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1531,6 +1555,7 @@ mod tests {
|
|||||||
let evals = std::cell::Cell::new(0u32);
|
let evals = std::cell::Cell::new(0u32);
|
||||||
let mut node = MirrorNode::new(RecordSource::new(content, &layout, &layout), counting_value(true, &evals));
|
let mut node = MirrorNode::new(RecordSource::new(content, &layout, &layout), counting_value(true, &evals));
|
||||||
let resolved = core_types::record::RecordLayout {
|
let resolved = core_types::record::RecordLayout {
|
||||||
|
named_writes: Vec::new(),
|
||||||
lane_invariant: 0,
|
lane_invariant: 0,
|
||||||
..mirror_layout_meta().resolve(&[Some(&layout)])
|
..mirror_layout_meta().resolve(&[Some(&layout)])
|
||||||
};
|
};
|
||||||
@@ -1609,6 +1634,8 @@ mod tests {
|
|||||||
&[Some(&base)],
|
&[Some(&base)],
|
||||||
);
|
);
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1662,6 +1689,8 @@ mod tests {
|
|||||||
&[Some(&base)],
|
&[Some(&base)],
|
||||||
);
|
);
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1772,6 +1801,8 @@ mod tests {
|
|||||||
let (count_edge, count_layout) = lifted_value(2u32);
|
let (count_edge, count_layout) = lifted_value(2u32);
|
||||||
let (reverse_edge, reverse_layout) = lifted_value(false);
|
let (reverse_edge, reverse_layout) = lifted_value(false);
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -1898,6 +1929,8 @@ mod tests {
|
|||||||
let frames = frames_for(&[&base, &count_layout, &out]);
|
let frames = frames_for(&[&base, &count_layout, &out]);
|
||||||
|
|
||||||
let meta = core_types::record::LayoutMeta {
|
let meta = core_types::record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![0],
|
sources: vec![0],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: core_types::record::ElementSpec::Carried,
|
element: core_types::record::ElementSpec::Carried,
|
||||||
@@ -2443,13 +2476,7 @@ mod tests {
|
|||||||
let frames = frames_for(&[&source_layout]);
|
let frames = frames_for(&[&source_layout]);
|
||||||
|
|
||||||
let node = install(
|
let node = install(
|
||||||
FadeAsyncNode::new(
|
FadeAsyncNode::new(f64_record_source(&source_layout, 3., vec![("length", 9.)]), ValueSource::new(0.5), runtime, source_id, &source_layout),
|
||||||
f64_record_source(&source_layout, 3., vec![("length", 9.)]),
|
|
||||||
ValueSource::new(0.5),
|
|
||||||
runtime,
|
|
||||||
source_id,
|
|
||||||
&source_layout,
|
|
||||||
),
|
|
||||||
fade_async_layout_meta(),
|
fade_async_layout_meta(),
|
||||||
&[Some(&source_layout)],
|
&[Some(&source_layout)],
|
||||||
);
|
);
|
||||||
@@ -2482,11 +2509,7 @@ mod tests {
|
|||||||
let layout = measure_async_layout();
|
let layout = measure_async_layout();
|
||||||
let frames = frames_for(&[&layout]);
|
let frames = frames_for(&[&layout]);
|
||||||
|
|
||||||
let node = install(
|
let node = install(MeasureAsyncNode::new(ValueSource::new(()), ValueSource::new(-4.), runtime, source_id), measure_async_layout_meta(), &[]);
|
||||||
MeasureAsyncNode::new(ValueSource::new(()), ValueSource::new(-4.), runtime, source_id),
|
|
||||||
measure_async_layout_meta(),
|
|
||||||
&[],
|
|
||||||
);
|
|
||||||
assert_eq!(Node::<ContextImpl>::layout(&node), &layout);
|
assert_eq!(Node::<ContextImpl>::layout(&node), &layout);
|
||||||
|
|
||||||
let GPoll::Final(served) = core_types::record::capture(&node, &ctx, &frames) else {
|
let GPoll::Final(served) = core_types::record::capture(&node, &ctx, &frames) else {
|
||||||
|
|||||||
@@ -285,6 +285,7 @@ mod tests {
|
|||||||
// The fixtures wire constants into every eager input, which the compiler
|
// The fixtures wire constants into every eager input, which the compiler
|
||||||
// pass records as lane-invariant.
|
// pass records as lane-invariant.
|
||||||
let resolved = record::RecordLayout {
|
let resolved = record::RecordLayout {
|
||||||
|
named_writes: Vec::new(),
|
||||||
lane_invariant: u32::MAX,
|
lane_invariant: u32::MAX,
|
||||||
..meta.resolve(inputs)
|
..meta.resolve(inputs)
|
||||||
};
|
};
|
||||||
@@ -294,6 +295,7 @@ mod tests {
|
|||||||
|
|
||||||
fn install_flip<N: Node<ContextImpl<'static>>>(mut node: N, layout: &Layout) -> N {
|
fn install_flip<N: Node<ContextImpl<'static>>>(mut node: N, layout: &Layout) -> N {
|
||||||
let bundle = record::RecordLayout {
|
let bundle = record::RecordLayout {
|
||||||
|
named_writes: Vec::new(),
|
||||||
frame_bytes: layout.frame_bytes(),
|
frame_bytes: layout.frame_bytes(),
|
||||||
plan: Vec::new(),
|
plan: Vec::new(),
|
||||||
layout: layout.clone(),
|
layout: layout.clone(),
|
||||||
@@ -420,6 +422,8 @@ mod tests {
|
|||||||
|
|
||||||
fn routing_meta(source: u8, level_delta: i8) -> record::LayoutMeta {
|
fn routing_meta(source: u8, level_delta: i8) -> record::LayoutMeta {
|
||||||
record::LayoutMeta {
|
record::LayoutMeta {
|
||||||
|
named_writes: Vec::new(),
|
||||||
|
folded_names: Vec::new(),
|
||||||
sources: vec![source],
|
sources: vec![source],
|
||||||
reads: vec![],
|
reads: vec![],
|
||||||
element: record::ElementSpec::Carried,
|
element: record::ElementSpec::Carried,
|
||||||
|
|||||||
@@ -272,6 +272,7 @@ mod tests {
|
|||||||
plan: Vec::new(),
|
plan: Vec::new(),
|
||||||
layout: layout.clone(),
|
layout: layout.clone(),
|
||||||
lane_invariant: u32::MAX,
|
lane_invariant: u32::MAX,
|
||||||
|
named_writes: Vec::new(),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
let GPoll::Final(result) = core_types::record::serve_input(&graph, &ctx, &frames) else {
|
let GPoll::Final(result) = core_types::record::serve_input(&graph, &ctx, &frames) else {
|
||||||
|
|||||||
@@ -1601,6 +1601,7 @@ mod graphene_test {
|
|||||||
|
|
||||||
fn installed<N: Node<ContextImpl<'static>>>(mut node: N, layout: &Layout) -> N {
|
fn installed<N: Node<ContextImpl<'static>>>(mut node: N, layout: &Layout) -> N {
|
||||||
node.set_layout(core_types::record::RecordLayout {
|
node.set_layout(core_types::record::RecordLayout {
|
||||||
|
named_writes: Vec::new(),
|
||||||
frame_bytes: layout.frame_bytes(),
|
frame_bytes: layout.frame_bytes(),
|
||||||
plan: Vec::new(),
|
plan: Vec::new(),
|
||||||
layout: layout.clone(),
|
layout: layout.clone(),
|
||||||
@@ -1662,6 +1663,7 @@ mod graphene_test {
|
|||||||
let mut wired = construct(&entries[0], vec![record_value_source(true), record_value_source(false)]).unwrap();
|
let mut wired = construct(&entries[0], vec![record_value_source(true), record_value_source(false)]).unwrap();
|
||||||
let layout = out_layout::<bool>();
|
let layout = out_layout::<bool>();
|
||||||
wired.set_layout(core_types::record::RecordLayout {
|
wired.set_layout(core_types::record::RecordLayout {
|
||||||
|
named_writes: Vec::new(),
|
||||||
frame_bytes: layout.frame_bytes(),
|
frame_bytes: layout.frame_bytes(),
|
||||||
plan: Vec::new(),
|
plan: Vec::new(),
|
||||||
layout: layout.clone(),
|
layout: layout.clone(),
|
||||||
@@ -1708,6 +1710,7 @@ mod graphene_test {
|
|||||||
let mut wired = construct(&entries[0], vec![record_value_source(1.5f64), record_value_source(2.5f64)]).unwrap();
|
let mut wired = construct(&entries[0], vec![record_value_source(1.5f64), record_value_source(2.5f64)]).unwrap();
|
||||||
let layout = out_layout::<f64>();
|
let layout = out_layout::<f64>();
|
||||||
wired.set_layout(core_types::record::RecordLayout {
|
wired.set_layout(core_types::record::RecordLayout {
|
||||||
|
named_writes: Vec::new(),
|
||||||
frame_bytes: layout.frame_bytes(),
|
frame_bytes: layout.frame_bytes(),
|
||||||
plan: Vec::new(),
|
plan: Vec::new(),
|
||||||
layout: layout.clone(),
|
layout: layout.clone(),
|
||||||
|
|||||||
Reference in New Issue
Block a user