From 623bae7fc0c674d5231a3a4c1c331d26a14f6882 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Fri, 13 Jun 2025 15:46:37 +0200 Subject: [PATCH] Merge `Instruction` as many times as possible --- devtools/src/tester.rs | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/devtools/src/tester.rs b/devtools/src/tester.rs index 9f8419e1..0aa517c0 100644 --- a/devtools/src/tester.rs +++ b/devtools/src/tester.rs @@ -308,27 +308,30 @@ impl Tester

{ program.update(state, message).map(Tick::Program) } Tick::Recorder(event) => { - let Some(interaction) = - instruction::Interaction::from_event(event) - else { - return Task::none(); - }; + let mut interaction = + instruction::Interaction::from_event(event); - if let Some(Instruction::Interact(last_interaction)) = - self.instructions.pop() - { - let (last_interaction, new_interaction) = - last_interaction.merge(interaction); + while let Some(new_interaction) = interaction.take() { + if let Some(Instruction::Interact(last_interaction)) = + self.instructions.pop() + { + let (merged_interaction, new_interaction) = + last_interaction.merge(new_interaction); - self.instructions - .push(Instruction::Interact(last_interaction)); + if let Some(new_interaction) = new_interaction { + self.instructions.push(Instruction::Interact( + merged_interaction, + )); - if let Some(new_interaction) = new_interaction { + self.instructions + .push(Instruction::Interact(new_interaction)); + } else { + interaction = Some(merged_interaction); + } + } else { self.instructions .push(Instruction::Interact(new_interaction)); } - } else { - self.instructions.push(Instruction::Interact(interaction)); } Task::none()