From 934fe4c48768f9d662c42c26ee697b7021f41050 Mon Sep 17 00:00:00 2001 From: Kai Schmidt Date: Wed, 26 Jun 2024 14:12:04 -0700 Subject: [PATCH] fix a crash in pervasive repeat and switch --- src/algorithm/loops.rs | 2 +- src/algorithm/mod.rs | 2 +- tests/loops.ua | 2 ++ tests/units.ua | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/algorithm/loops.rs b/src/algorithm/loops.rs index 16f7412d..3e317bea 100644 --- a/src/algorithm/loops.rs +++ b/src/algorithm/loops.rs @@ -93,7 +93,7 @@ pub fn repeat(with_inverse: bool, env: &mut Uiua) -> UiuaResult { Err(row) => row.clone(), }; // println!("row: {:?}", row); - if n.rank() > row.rank() { + if n.rank() > row.rank() || is_empty { rows_to_sel.push(Err(row)); } else { let row_shape = row.shape()[n.rank()..].into(); diff --git a/src/algorithm/mod.rs b/src/algorithm/mod.rs index 6ab4ed72..91520aff 100644 --- a/src/algorithm/mod.rs +++ b/src/algorithm/mod.rs @@ -542,7 +542,7 @@ pub fn switch( Err(row) => row.clone(), }; // println!("row: {:?}", row); - if selector.rank() > row.rank() { + if selector.rank() > row.rank() || is_empty { rows_to_sel.push(Err(row)); } else { let row_shape = row.shape()[selector.rank()..].into(); diff --git a/tests/loops.ua b/tests/loops.ua index 76371bb6..4eebdc32 100644 --- a/tests/loops.ua +++ b/tests/loops.ua @@ -228,6 +228,8 @@ A ← ↯2_3_4⇡24 ⍤⟜≍: [+1.+1. 2_4_6] ⍥(+1) [+1.+1. 1_2_3] ¤[1 2 3] ⍤⟜≍: [..4_5_6] ⍥(+1) [+1.+1. 1_2_3] [1 2 3] ⍤⟜≍: 5 ⍥(+1) ¯5 10 +⍤⟜≍: ↯0_3e ⍥∘[] ¤[1 2 3] +⍤⟜≍: ↯0_0e ⍥∘[] ¤[] # Do ⍤⟜≍: 1024 ⍢(×2)(<1000) 1 diff --git a/tests/units.ua b/tests/units.ua index c208c9b4..aeb8db24 100644 --- a/tests/units.ua +++ b/tests/units.ua @@ -183,6 +183,8 @@ F ← ⨬(¯|+1|×10|∞) ⍤⟜≍: [¯5 6 50 ∞] F [0 1 2 3] 5 ⍤⟜≍: [¯1_2_10_∞ ¯2_3_20_∞ ¯3_4_30_∞] F [..0_1_2_3] [1 2 3] ⍤⟜≍: [..¯5_6_50_∞] F [..0_1_2_3] 5 +⍤⟜≍: ↯0_3e ⨬∘∘[] ¤[1 2 3] +⍤⟜≍: ↯0_0e ⨬∘∘[] ¤[] # Where ⍤⟜≍: [0 3 5 6] ⊚[1 0 0 1 0 1 1 0]