From 30dac8ea4186f915cd5c8eca06eb703bda31f027 Mon Sep 17 00:00:00 2001 From: Nicolas Luck Date: Thu, 27 Jul 2023 12:06:03 +0200 Subject: [PATCH] HashSet -> BTreeSet: Make parsing or results and thus tests deterministic. Add comments. --- src/machine/lib_machine.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/machine/lib_machine.rs b/src/machine/lib_machine.rs index 1eec92b8..b75f9b6d 100644 --- a/src/machine/lib_machine.rs +++ b/src/machine/lib_machine.rs @@ -1,4 +1,4 @@ -use std::collections::HashSet; +use std::collections::BTreeSet; use super::{ Machine, MachineConfig, QueryResult, QueryResolutionLine, @@ -36,19 +36,24 @@ impl Machine { Err(output) } else { // Remove duplicate lines - let output = output - .lines() - .collect::>() + Ok(output + // 1. Split into disjunct matches + .split(";") + .map(|s| s.trim()) + // 2. Dedupe through Set + .collect::>() .iter() .cloned() + // 3. Back to Vec .collect::>() - .join("\n"); - Ok(output - .split(";") + .iter() + // 4. Trim and remove empty lines .map(|s| s.trim()) .map(|s| s.replace(".", "")) .filter(|s| !s.is_empty()) + // 5. Parse into QueryResolutionLine .map(QueryResolutionLine::try_from) + // 6. Remove lines that couldn't be parsed, so we still keep the ones they did .filter_map(Result::ok) .collect::>() .into()) @@ -154,10 +159,10 @@ mod tests { result, Ok(QueryResolution::Matches(vec![ QueryMatch::from(btreemap! { - "Class" => Value::from("Todo") + "Class" => Value::from("Recipe") }), QueryMatch::from(btreemap! { - "Class" => Value::from("Recipe") + "Class" => Value::from("Todo") }), ])) ); -- 2.54.0