From 1f16c2e268e482ff2b555de0b97ee71745b6512f Mon Sep 17 00:00:00 2001 From: MarekSpodBiedry <73122968+MarekSpodBiedry@users.noreply.github.com> Date: Mon, 12 Oct 2026 08:29:06 +0200 Subject: [PATCH] fix(calc): recalculate dependents of a cleared spill past 65536 cells (#558) --- crates/calc/src/recalc.rs | 4 ++-- crates/engine/src/tests.rs | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/crates/calc/src/recalc.rs b/crates/calc/src/recalc.rs index 553e76440..b391821d7 100644 --- a/crates/calc/src/recalc.rs +++ b/crates/calc/src/recalc.rs @@ -898,11 +898,11 @@ impl Calc { // Spill areas of changed anchors also change. for &k in changed { if let Some(r) = wb.sheet(k.0).and_then(|s| s.spill_ranges.get(&k.1)) { - seeds.extend(r.iter().take(65536).map(|c| (k.0, c))); + seeds.extend(r.iter().map(|c| (k.0, c))); } } for (si, r) in &cleared { - seeds.extend(r.iter().take(65536).map(|c| (*si, c))); + seeds.extend(r.iter().map(|c| (*si, c))); } let t0 = prof_now(); let dirty = self.dirty_closure(wb, &seeds); diff --git a/crates/engine/src/tests.rs b/crates/engine/src/tests.rs index 33fdc113e..634f8e2af 100644 --- a/crates/engine/src/tests.rs +++ b/crates/engine/src/tests.rs @@ -1617,6 +1617,17 @@ fn replacing_a_spilling_formula_clears_its_spill() { assert_eq!((v(&s, "A2"), v(&s, "B1")), (Value::Empty, Value::Number(0.0))); } +#[test] +fn clearing_a_spill_past_65536_cells_updates_a_late_dependent() { + let mut s = s(); + s.execute("cell.set", json!({"cell": "A1", "input": "=SEQUENCE(65537)"})).unwrap(); + s.execute("cell.set", json!({"cell": "C1", "input": "=A65536"})).unwrap(); + s.execute("cell.set", json!({"cell": "C2", "input": "=A65537"})).unwrap(); + assert_eq!(v(&s, "C2"), Value::Number(65537.0)); + s.execute("cell.set", json!({"cell": "A1", "input": "5"})).unwrap(); + assert_eq!((v(&s, "C1"), v(&s, "C2")), (Value::Number(0.0), Value::Number(0.0))); +} + #[test] fn range_ending_in_index_recalculates() { let mut s = s();