diff --git a/crates/effects/src/channel3d/tests.rs b/crates/effects/src/channel3d/tests.rs index 0c665d62d..4fc84440e 100644 --- a/crates/effects/src/channel3d/tests.rs +++ b/crates/effects/src/channel3d/tests.rs @@ -279,11 +279,7 @@ fn cryptomatte_cpu_path_is_bit_exact_inside_and_outside_the_aux_area() { }; for (x, y) in [(0u32, 0u32), (1, 0), (5, 0), (0, 1), (3, 1), (5, 1)] { let (c, m) = reduce_by_name(&a, "CryptoObject", &edge_selection(), (y * 6 + x) as usize); - assert_eq!( - out.get(x as i64, y as i64).map(f32::to_bits), - expect(c, m).map(f32::to_bits), - "display {display} matteOnly {matte_only} at ({x}, {y})" - ); + assert_eq!(out.get(x as i64, y as i64).map(f32::to_bits), expect(c, m).map(f32::to_bits), "display {display} matteOnly {matte_only} at ({x}, {y})"); } for (x, y) in [(6u32, 0u32), (19, 0), (0, 2), (12, 9)] { assert_eq!( diff --git a/crates/effects/src/color2/tests.rs b/crates/effects/src/color2/tests.rs index 85467c683..5f57692a0 100644 --- a/crates/effects/src/color2/tests.rs +++ b/crates/effects/src/color2/tests.rs @@ -7,8 +7,7 @@ fn run(id: &str, img: &Image, over: &[(&str, Value)]) -> Image { for (k, v) in over { params.values.insert(k.to_string(), v.clone()); } - let ctx = - EffectCtx { params: ¶ms, time: 0.0, layer_size: [img.width as f64, img.height as f64], seed: 1, adjustment: false, env: Default::default() }; + let ctx = EffectCtx { params: ¶ms, time: 0.0, layer_size: [img.width as f64, img.height as f64], seed: 1, adjustment: false, env: Default::default() }; (s.render)(&ctx, Buf { img: img.clone(), offset: [0.0, 0.0], scale: 1.0 }).img } @@ -331,11 +330,8 @@ fn auto_levels_temporal_smoothing_reads_neighbour_frames() { fn shadow_highlight_clip_keeps_the_tonal_range() { let img = ramp(); let lift = [("autoAmounts", Value::Bool(false)), ("shadowAmount", num(80.0))]; - let unclipped = run( - "ec.color.shadowhighlight", - &img, - &[lift[0].clone(), lift[1].clone(), ("moreOptions/blackClip", num(0.0)), ("moreOptions/whiteClip", num(0.0))], - ); + let unclipped = + run("ec.color.shadowhighlight", &img, &[lift[0].clone(), lift[1].clone(), ("moreOptions/blackClip", num(0.0)), ("moreOptions/whiteClip", num(0.0))]); let clipped = run("ec.color.shadowhighlight", &img, &[lift[0].clone(), lift[1].clone(), ("moreOptions/blackClip", num(1.0))]); let min = |im: &Image| im.data.iter().filter(|p| p[3] > 0.99).map(|p| luminance(p[0], p[1], p[2])).fold(f32::MAX, f32::min); assert!(min(&clipped) < min(&unclipped)); diff --git a/crates/effects/src/color_fx/tests.rs b/crates/effects/src/color_fx/tests.rs index 9ac4cc89f..2f3370204 100644 --- a/crates/effects/src/color_fx/tests.rs +++ b/crates/effects/src/color_fx/tests.rs @@ -67,8 +67,7 @@ fn brightness_contrast_modern_keeps_black_and_white_and_legacy_is_linear() { fn brightness_contrast_modern_matches_ae_ramp_samples() { let u8 = |v: f32| (v * 255.0).round() as i32; let go = |b: f64, c: f64, x: u8| { - u8(px("ec.color.brightnesscontrast", &[("brightness", num(b)), ("contrast", num(c))], [x as f32 / 255.0, x as f32 / 255.0, x as f32 / 255.0, 1.0]) - [0]) + u8(px("ec.color.brightnesscontrast", &[("brightness", num(b)), ("contrast", num(c))], [x as f32 / 255.0, x as f32 / 255.0, x as f32 / 255.0, 1.0])[0]) }; // (brightness, contrast, input, AE 8-bit) let samples: &[(f64, f64, u8, u8)] = &[ @@ -96,11 +95,8 @@ fn brightness_contrast_modern_matches_ae_ramp_samples() { /// (153, 51, 51), (204, 153, 128). #[test] fn tritone_matches_after_effects() { - let colours = [ - ("highlights", Value::Color([1.0, 1.0, 0.8, 1.0])), - ("midtones", Value::Color([0.6, 0.2, 0.2, 1.0])), - ("shadows", Value::Color([0.0, 0.0, 0.3, 1.0])), - ]; + let colours = + [("highlights", Value::Color([1.0, 1.0, 0.8, 1.0])), ("midtones", Value::Color([0.6, 0.2, 0.2, 1.0])), ("shadows", Value::Color([0.0, 0.0, 0.3, 1.0]))]; let near = |o: [f32; 4], ae: [f32; 3]| (0..3).all(|i| (o[i] * 255.0 - ae[i]).abs() <= 1.0); let mut red = colours.to_vec(); red.push(("blend", num(25.0))); @@ -245,11 +241,8 @@ fn exposure_individual_channels_and_bypass() { let raw = px("ec.color.exposure", &[("master/exposure", num(1.0)), ("bypassLinearLight", Value::Bool(true))], [0.25, 0.25, 0.25, 1.0]); assert!((raw[0] - 0.5).abs() < 1e-5); // Negative results are mirrored, not clipped. - let neg = px( - "ec.color.exposure", - &[("master/offset", num(-0.5)), ("bypassLinearLight", Value::Bool(true)), ("master/gamma", num(2.0))], - [0.25, 0.25, 0.25, 1.0], - ); + let neg = + px("ec.color.exposure", &[("master/offset", num(-0.5)), ("bypassLinearLight", Value::Bool(true)), ("master/gamma", num(2.0))], [0.25, 0.25, 0.25, 1.0]); assert!((neg[0] + 0.5).abs() < 1e-4, "{neg:?}"); } @@ -427,12 +420,8 @@ fn hue_saturation_ranges_adjust_their_hues_only() { #[test] fn fill_mask_all_masks_feather_and_invert() { - let sq = |x0: f64, x1: f64| crate::MaskShape { - name: String::new(), - points: vec![[x0, 0.0], [x1, 0.0], [x1, 10.0], [x0, 10.0]], - closed: true, - inverted: false, - }; + let sq = + |x0: f64, x1: f64| crate::MaskShape { name: String::new(), points: vec![[x0, 0.0], [x1, 0.0], [x1, 10.0], [x0, 10.0]], closed: true, inverted: false }; let masks = [sq(0.0, 5.0), sq(15.0, 20.0)]; let env = EffectEnv { masks: &masks, ..Default::default() }; let grey = Image::filled(20, 10, [0.5, 0.5, 0.5, 1.0]); diff --git a/crates/effects/src/generate2/tests.rs b/crates/effects/src/generate2/tests.rs index 6e4783b48..c2acff446 100644 --- a/crates/effects/src/generate2/tests.rs +++ b/crates/effects/src/generate2/tests.rs @@ -116,9 +116,8 @@ fn lightning_alpha_obstacle_and_expert_settings() { } } } - let opts = |o: f64| { - vec![("alphaObstacle", num(o)), ("compositeOnOriginal", Value::Bool(false)), ("glowSettings/glowRadius", num(0.0)), ("forking", num(60.0))] - }; + let opts = + |o: f64| vec![("alphaObstacle", num(o)), ("compositeOnOriginal", Value::Bool(false)), ("glowSettings/glowRadius", num(0.0)), ("forking", num(60.0))]; let free = run("ec.generate.advancedlightning", &opts(0.0), wall.clone()); let avoid = run("ec.generate.advancedlightning", &opts(10.0), wall.clone()); assert!(alpha_in(&avoid.img, &wall) < alpha_in(&free.img, &wall), "{} vs {}", alpha_in(&avoid.img, &wall), alpha_in(&free.img, &wall)); diff --git a/crates/effects/src/generate3/tests.rs b/crates/effects/src/generate3/tests.rs index d6e5b70b7..0edad2f2d 100644 --- a/crates/effects/src/generate3/tests.rs +++ b/crates/effects/src/generate3/tests.rs @@ -158,16 +158,10 @@ fn vegas_traces_contours() { img.set(x, y, [1.0, 1.0, 1.0, 1.0]); } } - let a = run( - "ec.generate.vegas", - &[("blendMode", Value::Enum(0)), ("length", num(1.0)), ("midpointOpacity", num(1.0)), ("endOpacity", num(1.0))], - img.clone(), - ); - let b = run( - "ec.generate.vegas", - &[("blendMode", Value::Enum(0)), ("length", num(1.0)), ("midpointOpacity", num(1.0)), ("endOpacity", num(1.0))], - img.clone(), - ); + let a = + run("ec.generate.vegas", &[("blendMode", Value::Enum(0)), ("length", num(1.0)), ("midpointOpacity", num(1.0)), ("endOpacity", num(1.0))], img.clone()); + let b = + run("ec.generate.vegas", &[("blendMode", Value::Enum(0)), ("length", num(1.0)), ("midpointOpacity", num(1.0)), ("endOpacity", num(1.0))], img.clone()); assert_eq!(a.img.data, b.img.data); assert!(alpha_sum(&a.img, 14, 14, 50, 50) > 50.0, "edges drawn"); assert!(alpha_sum(&a.img, 26, 26, 38, 38) < 0.5, "interior untouched"); diff --git a/crates/effects/src/ocio/tests.rs b/crates/effects/src/ocio/tests.rs index 4ef7b6de1..edbc6eff2 100644 --- a/crates/effects/src/ocio/tests.rs +++ b/crates/effects/src/ocio/tests.rs @@ -229,13 +229,8 @@ fn profile_converter_converts_and_round_trips() { EffectEnv::default(), ); assert_ne!(a.img.data, img.data); - let b = run_fx( - "ec.utility.colorprofileconverter", - &[("inputProfile", Value::Enum(3)), ("outputProfile", Value::Enum(1))], - a.img, - 0.0, - EffectEnv::default(), - ); + let b = + run_fx("ec.utility.colorprofileconverter", &[("inputProfile", Value::Enum(3)), ("outputProfile", Value::Enum(1))], a.img, 0.0, EffectEnv::default()); assert!((0..3).all(|k| (b.img.get(0, 0)[k] - img.get(0, 0)[k]).abs() < 1e-4)); // Same profile both sides: identity. Working space defaults to sRGB. let c = run_fx( diff --git a/crates/effects/src/ocio_config/tests.rs b/crates/effects/src/ocio_config/tests.rs index f4ac71d29..f534fe0e2 100644 --- a/crates/effects/src/ocio_config/tests.rs +++ b/crates/effects/src/ocio_config/tests.rs @@ -160,10 +160,8 @@ fn effects_use_a_custom_config() { let o = fx("ec.color.ociocolorspace", &[("sourceName", Value::Str("g2".into())), ("destinationName", Value::Str("default".into()))]); assert!((o[0] - 0.25).abs() < 1e-6 && (o[1] - 0.0625).abs() < 1e-6 && (o[2] - 1.0).abs() < 1e-6, "{o:?}"); // Inverse direction. - let o = fx( - "ec.color.ociocolorspace", - &[("sourceName", Value::Str("g2".into())), ("destinationName", Value::Str("lin".into())), ("direction", Value::Enum(1))], - ); + let o = + fx("ec.color.ociocolorspace", &[("sourceName", Value::Str("g2".into())), ("destinationName", Value::Str("lin".into())), ("direction", Value::Enum(1))]); assert!((o[0] - 0.5f32.sqrt()).abs() < 1e-6, "{o:?}"); // Display ▸ view → its colour space. let o = fx( diff --git a/crates/effects/src/sim/tests.rs b/crates/effects/src/sim/tests.rs index e063b1c72..c6f83ab4e 100644 --- a/crates/effects/src/sim/tests.rs +++ b/crates/effects/src/sim/tests.rs @@ -320,9 +320,8 @@ fn particle_world_effect_camera() { assert!(finite(&with(std::slice::from_ref(&extra))), "{extra:?}"); } // Moving the camera doesn't restart the simulation. - let key = |pr: &crate::Params| { - sim_key(&EffectCtx { params: pr, time: 1.0, layer_size: [48.0, 48.0], seed: 1, adjustment: false, env: EffectEnv::default() }, 1) - }; + let key = + |pr: &crate::Params| sim_key(&EffectCtx { params: pr, time: 1.0, layer_size: [48.0, 48.0], seed: 1, adjustment: false, env: EffectEnv::default() }, 1); let mut moved = params.clone(); moved.values.insert("extras/effectCamera/rotationZ".into(), num(30.0)); assert_eq!(key(¶ms), key(&moved)); diff --git a/crates/effects/src/sim2.rs b/crates/effects/src/sim2.rs index aec8567d3..497b60f16 100644 --- a/crates/effects/src/sim2.rs +++ b/crates/effects/src/sim2.rs @@ -31,8 +31,8 @@ pub use foam::{FoamDisc, FoamEnv, FoamPlan, foam_full_plan}; use pieces::Cam; #[cfg(test)] pub(crate) use pieces::draw_pieces; -pub(crate) use pieces::{rot_axis, sort_far_first}; pub use pieces::{Piece, PiecePlan, PieceTex, piece_plan}; +pub(crate) use pieces::{rot_axis, sort_far_first}; pub use pixels::{PixelPlan, pixel_plan}; pub use registry::specs; #[cfg(test)] diff --git a/crates/effects/src/sim2/tests.rs b/crates/effects/src/sim2/tests.rs index 61aaf2bbb..2ef35b122 100644 --- a/crates/effects/src/sim2/tests.rs +++ b/crates/effects/src/sim2/tests.rs @@ -90,8 +90,7 @@ fn shatter_at_rest_then_breaks() { assert_eq!(t1, run("ec.sim.shatter", &v, src.clone(), 0.5)); assert!(sum_diff(&t1, &src) > 10.0); for pat in 0..SHATTER_PATTERNS.len() as u32 { - let vv = - [("view", Value::Enum(0)), ("shape/pattern", Value::Enum(pat)), ("force1/force1Position", pt(16.0, 16.0)), ("shape/origin", pt(16.0, 16.0))]; + let vv = [("view", Value::Enum(0)), ("shape/pattern", Value::Enum(pat)), ("force1/force1Position", pt(16.0, 16.0)), ("shape/origin", pt(16.0, 16.0))]; let r = run("ec.sim.shatter", &vv, src.clone(), 0.0); assert!(max_diff(&r, &src) < 0.05, "pattern {pat} tiles the layer: {}", max_diff(&r, &src)); } @@ -186,8 +185,7 @@ fn wave_world_seek_and_waves() { assert!(a.data.iter().any(|p| (p[0] - 0.5).abs() > 0.05), "waves"); let flat = run("ec.sim.waveworld", &[("view", Value::Enum(1)), ("producer1/producer1Amplitude", num(0.0))], Image::new(32, 32), 1.0); assert!(flat.data.iter().all(|p| (p[0] - 0.5).abs() < 1e-5)); - let wire = - run("ec.sim.waveworld", &[("producer1/producer1Position", pt(16.0, 16.0)), ("simulation/gridResolution", num(10.0))], Image::new(32, 32), 0.3); + let wire = run("ec.sim.waveworld", &[("producer1/producer1Position", pt(16.0, 16.0)), ("simulation/gridResolution", num(10.0))], Image::new(32, 32), 0.3); assert!(wire.data.iter().any(|p| p[1] > 0.3)); } @@ -460,8 +458,7 @@ fn foam_flow_map_pop_velocity_wobble_textures_and_reflection() { let still = with(&[], 1.0); let flowing = with(&[("flowMap/flowMap", Value::Layer(Some(1))), ("flowMap/flowMapSteepness", num(1.0))], 1.0); assert!(cx(&flowing) < cx(&still) - 1.0, "{} vs {}", cx(&flowing), cx(&still)); - let hq = - with(&[("flowMap/flowMap", Value::Layer(Some(1))), ("flowMap/flowMapSteepness", num(1.0)), ("flowMap/simulationQuality", Value::Enum(2))], 1.0); + let hq = with(&[("flowMap/flowMap", Value::Layer(Some(1))), ("flowMap/flowMapSteepness", num(1.0)), ("flowMap/simulationQuality", Value::Enum(2))], 1.0); assert_eq!( hq, with(&[("flowMap/flowMap", Value::Layer(Some(1))), ("flowMap/flowMapSteepness", num(1.0)), ("flowMap/simulationQuality", Value::Enum(2))], 1.0) diff --git a/crates/effects/src/sim3/tests.rs b/crates/effects/src/sim3/tests.rs index 82be71c81..ffce0ae6d 100644 --- a/crates/effects/src/sim3/tests.rs +++ b/crates/effects/src/sim3/tests.rs @@ -123,8 +123,7 @@ fn property_mapper_and_layer_map_read_layers() { 0.7, ); assert_eq!(a.data, b.data); - let st = - Pg { persistent: Some(mapper(Image::filled(4, 4, [1.0, 0.0, 0.5, 1.0]), [(15, 0, 0.0, 120.0), (0, 0, 0.0, 1.0), (9, 0, 0.0, 2.0)])), ..bare(1) }; + let st = Pg { persistent: Some(mapper(Image::filled(4, 4, [1.0, 0.0, 0.5, 1.0]), [(15, 0, 0.0, 120.0), (0, 0, 0.0, 1.0), (9, 0, 0.0, 2.0)])), ..bare(1) }; let mut s = PgState::default(); s.parts.push(PgParticle::new([1.0, 1.0], [0.0; 2], [1.0; 4], 2.0, 0, SRC_GRID)); st.step(&mut s); @@ -189,8 +188,7 @@ fn barrel_radius_square_or_disc() { #[test] fn mapper_drives_position_and_opacity_in_ae_order() { - let st = - Pg { persistent: Some(mapper(Image::filled(4, 4, [1.0, 0.5, 0.25, 1.0]), [(12, 0, 0.0, 30.0), (20, 0, 0.0, 1.0), (4, 0, 0.0, 1.0)])), ..bare(1) }; + let st = Pg { persistent: Some(mapper(Image::filled(4, 4, [1.0, 0.5, 0.25, 1.0]), [(12, 0, 0.0, 30.0), (20, 0, 0.0, 1.0), (4, 0, 0.0, 1.0)])), ..bare(1) }; assert_eq!(MAP_TARGETS[12], "X"); assert_eq!(MAP_TARGETS[20], "Opacity"); assert_eq!(MAP_TARGETS[26], "Scale Speed"); diff --git a/crates/engine/src/background/offload/tests.rs b/crates/engine/src/background/offload/tests.rs index b448d09c4..c08623189 100644 --- a/crates/engine/src/background/offload/tests.rs +++ b/crates/engine/src/background/offload/tests.rs @@ -189,11 +189,8 @@ impl Offload for Inline { #[test] fn render_runs_through_the_offload() { - let mut s = Session { - exporter: Some(Arc::new(crate::rq_tests::MockExporter { log: Default::default() })), - offload: Some(Arc::new(Inline)), - ..Default::default() - }; + let mut s = + Session { exporter: Some(Arc::new(crate::rq_tests::MockExporter { log: Default::default() })), offload: Some(Arc::new(Inline)), ..Default::default() }; s.execute("file.openDemoProject", serde_json::json!({})).unwrap(); s.execute("renderQueue.add", serde_json::json!({"output": "/x.gif"})).unwrap(); let ids = s.start_render(false).unwrap(); diff --git a/crates/engine/src/tests.rs b/crates/engine/src/tests.rs index 01dd1d5e9..579d3d30d 100644 --- a/crates/engine/src/tests.rs +++ b/crates/engine/src/tests.rs @@ -1,5 +1,3 @@ -mod session; -mod three_d; mod anim_presets; mod anim_tools; mod camera_track; @@ -15,8 +13,10 @@ mod face; mod fidelity; mod frame_export; mod fuzz_open; +mod history; mod import_project; mod key_metadata_order; +mod key_time; mod keylight; mod limits; mod lottie; @@ -26,13 +26,18 @@ mod markers; mod mask_warp; mod menu_cmds; mod model3d; +mod models; mod motion_blur_depth; +mod paint; +mod panels; mod project_items; mod proxy; mod quick_offset; mod replace_source; mod rig3d; +pub(crate) mod roto; mod sequence; +mod session; mod settings; mod shortcut_cmds; pub(crate) mod stubs; @@ -40,14 +45,9 @@ mod styles; mod tail; mod text; mod text_edit; +mod three_d; mod timeline; mod timeline_interchange; pub(crate) mod track; mod vector_import; mod viewer; -mod history; -mod models; -mod paint; -mod panels; -pub(crate) mod roto; -mod key_time; diff --git a/crates/gpu/src/tests.rs b/crates/gpu/src/tests.rs index e12219414..fa318ef79 100644 --- a/crates/gpu/src/tests.rs +++ b/crates/gpu/src/tests.rs @@ -26,7 +26,6 @@ use effectcraft_time::{FrameRate, Tick}; use crate::Gpu; -mod three_d; mod adjust; mod adv3d; mod deferred; @@ -54,6 +53,7 @@ mod fx_warp; #[cfg(all(test, not(target_arch = "wasm32")))] mod init; mod particles; +mod three_d; mod wgsl_grammar; /// One GPU test at a time in this process: the calling test thread holds a process-wide lock diff --git a/crates/gpu/src/tests/deferred_jobs.rs b/crates/gpu/src/tests/deferred_jobs.rs index aa885b1de..7e5edbedd 100644 --- a/crates/gpu/src/tests/deferred_jobs.rs +++ b/crates/gpu/src/tests/deferred_jobs.rs @@ -8,10 +8,10 @@ use effectcraft_render::three_d::adv; use effectcraft_render::{Accelerator, Backend, LayerCache, NoFootage, RenderOpts, Renderer}; use effectcraft_time::Tick; -use crate::tests::{Pattern, diff, n, tolerance}; use crate::tests::adv3d::{off_share, run_of, scene, scene_project}; use crate::tests::deferred::{deferred_gpu, render_passes}; use crate::tests::particles::{Host, agree, params}; +use crate::tests::{Pattern, diff, n, tolerance}; /// The device's readbacks have landed (the browser's event loop; natively a poll). fn settle(g: &crate::Gpu) { diff --git a/crates/gpu/src/tests/fx_gen2.rs b/crates/gpu/src/tests/fx_gen2.rs index c82aba8d1..620cced13 100644 --- a/crates/gpu/src/tests/fx_gen2.rs +++ b/crates/gpu/src/tests/fx_gen2.rs @@ -7,8 +7,8 @@ use effectcraft_keyframe::Value; use effectcraft_time::Tick; -use crate::tests::{c, n}; use crate::tests::fx_pixel2::{e, env_case, env_case_allow, env_case_at, off, on, pt}; +use crate::tests::{c, n}; fn layer(id: u64) -> Value { Value::Layer(Some(id)) diff --git a/crates/gpu/src/tests/fx_particles.rs b/crates/gpu/src/tests/fx_particles.rs index 139363b78..e8c3a7ce6 100644 --- a/crates/gpu/src/tests/fx_particles.rs +++ b/crates/gpu/src/tests/fx_particles.rs @@ -7,8 +7,8 @@ use effectcraft_project::{BitDepth, LayerSource, build}; use effectcraft_render::RenderOpts; use effectcraft_time::Tick; -use crate::tests::{Scene, check, compare_at, n, opts, set}; use crate::tests::fx_sim::{case, composited, e, off, on}; +use crate::tests::{Scene, check, compare_at, n, opts, set}; fn v2(x: f64, y: f64) -> Value { Value::Vec2([x, y]) diff --git a/crates/host/src/tests.rs b/crates/host/src/tests.rs index 020d5f3a1..a73f15937 100644 --- a/crates/host/src/tests.rs +++ b/crates/host/src/tests.rs @@ -236,7 +236,11 @@ fn render_queue_exports_demo_comp() { let path = r["outputPath"].as_str().unwrap().to_string(); assert!(path.ends_with("_240x134.mp4"), "{path}"); // A second item: PNG sequence, rendered in the background. - s.execute("renderQueue.add", json!({"format": "png", "output": dir.join("seq_[###].png").to_string_lossy(), "resolution": 0.0625, "timeSpan": "custom", "start": 0.0, "end": 0.2})).unwrap(); + s.execute( + "renderQueue.add", + json!({"format": "png", "output": dir.join("seq_[###].png").to_string_lossy(), "resolution": 0.0625, "timeSpan": "custom", "start": 0.0, "end": 0.2}), + ) + .unwrap(); let r = s.execute("renderQueue.render", json!({"wait": false})).unwrap(); assert_eq!(r["items"].as_array().unwrap().len(), 2); let t0 = std::time::Instant::now(); @@ -265,8 +269,7 @@ fn value(s: &effectcraft_engine::Session, l: u64, path: &str) -> effectcraft_eng let cid = s.active_comp_id().unwrap(); let comp = s.project.comp(cid).unwrap(); let layer = comp.layer(effectcraft_engine::project::LayerId(l)).unwrap(); - let ctx = - effectcraft_engine::render::EvalCtx { project: &s.project, comp_id: cid, comp, time: Default::default(), expr: s.expr.as_deref(), footage: None }; + let ctx = effectcraft_engine::render::EvalCtx { project: &s.project, comp_id: cid, comp, time: Default::default(), expr: s.expr.as_deref(), footage: None }; ctx.value(layer, layer.props.prop(path).unwrap()) } @@ -520,14 +523,8 @@ fn stereo_rig_expressions_follow_the_master_camera() { let v3 = |s: &effectcraft_engine::Session, path: &str| { let comp = s.project.comp(left).unwrap(); let layer = &comp.layers[0]; - let ctx = effectcraft_engine::render::EvalCtx { - project: &s.project, - comp_id: left, - comp, - time: Default::default(), - expr: s.expr.as_deref(), - footage: None, - }; + let ctx = + effectcraft_engine::render::EvalCtx { project: &s.project, comp_id: left, comp, time: Default::default(), expr: s.expr.as_deref(), footage: None }; ctx.value(layer, layer.props.prop(path).unwrap()).as_vec3() }; let close = |a: [f64; 3], b: [f64; 3]| (0..3).all(|i| (a[i] - b[i]).abs() < 1e-6); diff --git a/crates/pdf/src/tests/groups.rs b/crates/pdf/src/tests/groups.rs index e897d87c7..14b6a4b09 100644 --- a/crates/pdf/src/tests/groups.rs +++ b/crates/pdf/src/tests/groups.rs @@ -1,8 +1,8 @@ //! M13.12: transparency groups (isolated, knockout, group alpha) and soft masks on a group's //! combined result. -use crate::*; use crate::tests::{page_pdf, render}; +use crate::*; fn near(a: [f32; 4], b: [f32; 4]) -> bool { (0..4).all(|i| (a[i] - b[i]).abs() < 0.02) diff --git a/crates/pdf/src/tests/import.rs b/crates/pdf/src/tests/import.rs index 01db74efa..c7dcbee57 100644 --- a/crates/pdf/src/tests/import.rs +++ b/crates/pdf/src/tests/import.rs @@ -1,8 +1,8 @@ //! M13.12: CCITT images in PDF pages, EPS text and parser robustness over truncated and //! corrupt inputs (generated fixtures). -use crate::*; use crate::tests::{coverage, page_pdf, render, shape_names}; +use crate::*; fn eps(body: &[u8]) -> Doc { let mut b = b"%!PS-Adobe-3.0 EPSF-3.0\n%%BoundingBox: 0 0 200 100\n".to_vec(); diff --git a/crates/pdf/src/tests/shading.rs b/crates/pdf/src/tests/shading.rs index 8658efa23..8e96193ab 100644 --- a/crates/pdf/src/tests/shading.rs +++ b/crates/pdf/src/tests/shading.rs @@ -1,7 +1,7 @@ //! M13.12: function-based and mesh shadings (generated fixtures). -use crate::*; use crate::tests::{Objs, page_pdf, render}; +use crate::*; /// Mesh vertex data: 8-bit flags, 16-bit coordinates (Decode `[0 65535 0 65535 …]`, so raw /// values are page units) and 8-bit components. diff --git a/crates/render/src/tests.rs b/crates/render/src/tests.rs index 5148f73f3..079274499 100644 --- a/crates/render/src/tests.rs +++ b/crates/render/src/tests.rs @@ -6,11 +6,8 @@ use effectcraft_time::{FrameRate, Tick}; use crate::render_frame; -mod auto; -mod remap; -mod roi; -mod styles; mod audio_fx; +mod auto; mod aux_channels; mod collapse; mod color; @@ -22,6 +19,9 @@ mod mask_expansion; mod motion_tile; mod nested; mod paint; +mod remap; +mod roi; +mod styles; mod time; fn setup() -> (Project, ItemId, Comp) { diff --git a/crates/script/src/tests.rs b/crates/script/src/tests.rs index 6105cc5e1..8b7973c5d 100644 --- a/crates/script/src/tests.rs +++ b/crates/script/src/tests.rs @@ -12,14 +12,14 @@ use crate::{Outcome, run_code}; mod callable; mod ease_presets; +mod evalfile; mod include; mod panels; +#[cfg(not(windows))] +mod services; mod tasks; mod ui; mod ui_more; -mod evalfile; -#[cfg(not(windows))] -mod services; mod ui_mouse; fn session() -> Session { diff --git a/crates/text/src/layout/tests.rs b/crates/text/src/layout/tests.rs index 2b0e688ba..9079a1225 100644 --- a/crates/text/src/layout/tests.rs +++ b/crates/text/src/layout/tests.rs @@ -313,11 +313,8 @@ fn hanging_punctuation_overhangs_the_box() { let p = ParagraphStyle { width: Some(400.0), hanging: true, ..Default::default() }; let l = layout_rich_uncached(text, &[(0..text.len(), s.clone())], &[p]); assert!(l.lines[0].x < -1.0, "opening quote hangs left: {}", l.lines[0].x); - let r = layout_rich_uncached( - text, - &[(0..text.len(), s)], - &[ParagraphStyle { width: Some(400.0), hanging: true, align: Align::Right, ..Default::default() }], - ); + let r = + layout_rich_uncached(text, &[(0..text.len(), s)], &[ParagraphStyle { width: Some(400.0), hanging: true, align: Align::Right, ..Default::default() }]); assert!(r.lines[0].x + r.lines[0].width > 401.0, "closing quote hangs right"); } @@ -348,13 +345,8 @@ fn rtl_paragraph_carets_run_right_to_left() { fn named_instance_sets_the_base_variations() { const FAMILY: &str = "EffectCraft Layout Instance Test"; fonts::add_font_data(crate::sfnt::test_font::variable(FAMILY, &[("Light", 300.0, None), ("Black", 900.0, None)], true)); - let st = |style: &str, variations: Vec<(String, f32)>| TextStyle { - family: FAMILY.into(), - style: style.into(), - size: 50.0, - variations, - ..Default::default() - }; + let st = + |style: &str, variations: Vec<(String, f32)>| TextStyle { family: FAMILY.into(), style: style.into(), size: 50.0, variations, ..Default::default() }; let coords = |l: &Layout| l.glyphs.iter().map(|g| crate::variable::coords(g.variations).to_vec()).collect::>(); let black = layout_uncached("Hi", &st("Black", vec![]), &ParagraphStyle::default()); assert!(!black.glyphs.is_empty()); diff --git a/crates/ui-egui/src/frames/tests.rs b/crates/ui-egui/src/frames/tests.rs index eae81419a..6da1dc269 100644 --- a/crates/ui-egui/src/frames/tests.rs +++ b/crates/ui-egui/src/frames/tests.rs @@ -832,8 +832,7 @@ fn the_frames_an_edit_keeps_match_a_fresh_render() { } let cam = id(s.execute("layer.newCamera", json!({"comp": comp.0})).unwrap(), "layer"); s.execute("layer.timing", json!({"layers": [cam], "in": 2, "out": 3})).unwrap(); - let moved = - kept(&mut s, comp, json!({"cmd": "prop.set", "params": {"comp": comp.0, "layer": cam, "path": "transform/position", "value": [40, 8, -30]}})); + let moved = kept(&mut s, comp, json!({"cmd": "prop.set", "params": {"comp": comp.0, "layer": cam, "path": "transform/position", "value": [40, 8, -30]}})); assert!(moved.contains(&0) && moved.contains(&100), "frames far from the camera stay: {moved:?}"); assert!(!(56..=91).any(|f| moved.contains(&f)), "frames whose shutter samples the camera render again: {moved:?}"); } diff --git a/crates/ui-egui/src/panels/viewer_text/tests.rs b/crates/ui-egui/src/panels/viewer_text/tests.rs index 787d55cc1..be3e84b2c 100644 --- a/crates/ui-egui/src/panels/viewer_text/tests.rs +++ b/crates/ui-egui/src/panels/viewer_text/tests.rs @@ -90,10 +90,7 @@ fn ime_delete_surrounding_chars_keeps_the_selection_for_the_commit() { let (mut app, lid) = editor("abcdef", 1, 4); feed( &mut app, - vec![ - egui::Event::Ime(egui::ImeEvent::DeleteSurrounding { before_chars: 1, after_chars: 99 }), - egui::Event::Ime(egui::ImeEvent::Commit("XY".into())), - ], + vec![egui::Event::Ime(egui::ImeEvent::DeleteSurrounding { before_chars: 1, after_chars: 99 }), egui::Event::Ime(egui::ImeEvent::Commit("XY".into()))], ); assert_eq!(doc_text(&app, lid), "XY", "the commit replaces the selection"); app.session.execute("edit.undo", json!({})).unwrap(); @@ -418,9 +415,8 @@ fn an_application_edit_in_the_same_frame_dominates_the_ime_cause() { let (mut app, lid) = editor("ab", 2, 2); let mut pass = ImePass::new(egui::ViewportId::ROOT); pass.frame(&mut app, vec![], true, false).expect("editing"); - let mixed = pass - .frame(&mut app, vec![egui::Event::Text("x".into()), egui::Event::Ime(egui::ImeEvent::Commit("日".into()))], true, false) - .expect("still editing"); + let mixed = + pass.frame(&mut app, vec![egui::Event::Text("x".into()), egui::Event::Ime(egui::ImeEvent::Commit("日".into()))], true, false).expect("still editing"); assert_eq!(doc_text(&app, lid), "abx日"); assert_eq!(mixed.change_cause, egui::ImeChangeCause::Other, "the earlier application edit dominates"); @@ -428,9 +424,8 @@ fn an_application_edit_in_the_same_frame_dominates_the_ime_cause() { let (mut app, lid) = editor("ab", 2, 2); let mut pass = ImePass::new(egui::ViewportId::ROOT); pass.frame(&mut app, vec![], true, false).expect("editing"); - let mixed = pass - .frame(&mut app, vec![egui::Event::Ime(egui::ImeEvent::Commit("日".into())), egui::Event::Text("x".into())], true, false) - .expect("still editing"); + let mixed = + pass.frame(&mut app, vec![egui::Event::Ime(egui::ImeEvent::Commit("日".into())), egui::Event::Text("x".into())], true, false).expect("still editing"); assert_eq!(doc_text(&app, lid), "ab日x"); assert_eq!(mixed.change_cause, egui::ImeChangeCause::Other, "the later application edit dominates"); } @@ -520,8 +515,7 @@ fn a_failed_batch_with_a_transient_edit_does_not_revive_a_wide_selection_composi let (mut app, lid) = editor(&text, 0, 5000); let mut pass = ImePass::new(egui::ViewportId::ROOT); pass.frame(&mut app, vec![], true, false).expect("editing"); - pass.frame(&mut app, vec![egui::Event::Ime(egui::ImeEvent::Preedit { text: "に".into(), active_range_chars: None })], true, false) - .expect("still editing"); + pass.frame(&mut app, vec![egui::Event::Ime(egui::ImeEvent::Preedit { text: "に".into(), active_range_chars: None })], true, false).expect("still editing"); let owner = ime_owner(&app).expect("an editor owner"); assert!(matches!( pass.ctx.data(|d| d.get_temp::(ime_composition_id(pass.viewport))), @@ -556,8 +550,7 @@ fn a_wide_content_change_invalidates_the_active_composition() { let (mut app, lid) = editor(&text, 0, 5000); let mut pass = ImePass::new(egui::ViewportId::ROOT); pass.frame(&mut app, vec![], true, false).expect("editing"); - pass.frame(&mut app, vec![egui::Event::Ime(egui::ImeEvent::Preedit { text: "に".into(), active_range_chars: None })], true, false) - .expect("still editing"); + pass.frame(&mut app, vec![egui::Event::Ime(egui::ImeEvent::Preedit { text: "に".into(), active_range_chars: None })], true, false).expect("still editing"); let replaced = "b".repeat(5000); app.session.execute("layer.setText", json!({"layer": lid.0, "text": replaced})).unwrap(); @@ -578,8 +571,7 @@ fn a_wide_selection_change_invalidates_the_active_composition() { let (mut app, lid) = editor(&text, 0, 5000); let mut pass = ImePass::new(egui::ViewportId::ROOT); pass.frame(&mut app, vec![], true, false).expect("editing"); - pass.frame(&mut app, vec![egui::Event::Ime(egui::ImeEvent::Preedit { text: "に".into(), active_range_chars: None })], true, false) - .expect("still editing"); + pass.frame(&mut app, vec![egui::Event::Ime(egui::ImeEvent::Preedit { text: "に".into(), active_range_chars: None })], true, false).expect("still editing"); // Still wider than the IME window limit, so this exercises the unavailable-text // selection identity rather than merely making the surrounding text available. diff --git a/crates/ui-egui/src/pointer_wrap/tests.rs b/crates/ui-egui/src/pointer_wrap/tests.rs index e61c4a931..3843db110 100644 --- a/crates/ui-egui/src/pointer_wrap/tests.rs +++ b/crates/ui-egui/src/pointer_wrap/tests.rs @@ -36,13 +36,8 @@ impl Scrub { fn frame(&mut self, events: Vec, focused: bool) { self.time += 0.02; - let mut raw = RawInput { - screen_rect: Some(Rect::from_min_size(Pos2::ZERO, vec2(800.0, 600.0))), - time: Some(self.time), - events, - focused, - ..Default::default() - }; + let mut raw = + RawInput { screen_rect: Some(Rect::from_min_size(Pos2::ZERO, vec2(800.0, 600.0))), time: Some(self.time), events, focused, ..Default::default() }; raw.events.push(Event::ModifiersChanged(self.modifiers)); prepare_input(&self.ctx, &mut raw, self.injected); let mut out = self.ctx.run_ui(raw, |ui| { diff --git a/crates/ui-egui/src/workspace_state/tests.rs b/crates/ui-egui/src/workspace_state/tests.rs index 9fbfeea64..e7b6d9aae 100644 --- a/crates/ui-egui/src/workspace_state/tests.rs +++ b/crates/ui-egui/src/workspace_state/tests.rs @@ -28,7 +28,8 @@ fn corrupt_future_or_unknown_workspace_keeps_defaults_and_original_file() { } let twice = r#"{"Split":{"vertical":true,"size":{"Ratio":0.5},"a":{"Tabs":{"panels":["Project"],"active":0}},"b":{"Tabs":{"panels":["Project"],"active":0}}}}"#; - let bad_split = r#"{"Split":{"vertical":true,"size":{"Ratio":7.0},"a":{"Tabs":{"panels":["Project"],"active":0}},"b":{"Tabs":{"panels":["Timeline"],"active":0}}}}"#; + let bad_split = + r#"{"Split":{"vertical":true,"size":{"Ratio":7.0},"a":{"Tabs":{"panels":["Project"],"active":0}},"b":{"Tabs":{"panels":["Timeline"],"active":0}}}}"#; for text in [ "{".into(), "{}".into(),