From 056237f18b098a5d4496653926c2416c231b9783 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 12 Apr 2024 16:21:57 -0700 Subject: [PATCH] Fix sorting of transitions within a lex state --- cli/src/generate/nfa.rs | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/cli/src/generate/nfa.rs b/cli/src/generate/nfa.rs index b247ce4f..6f0e1ee8 100644 --- a/cli/src/generate/nfa.rs +++ b/cli/src/generate/nfa.rs @@ -2,6 +2,7 @@ use std::{ char, cmp::{max, Ordering}, fmt, + iter::ExactSizeIterator, mem::{self, swap}, ops::{Range, RangeInclusive}, }; @@ -375,15 +376,9 @@ impl Ord for CharacterSet { let count_cmp = self .ranges .iter() - .map(std::iter::ExactSizeIterator::len) + .map(ExactSizeIterator::len) .sum::() - .cmp( - &other - .ranges - .iter() - .map(std::iter::ExactSizeIterator::len) - .sum(), - ); + .cmp(&other.ranges.iter().map(ExactSizeIterator::len).sum()); if count_cmp != Ordering::Equal { return count_cmp; } @@ -532,7 +527,6 @@ impl<'a> NfaCursor<'a> { }); } } - result.sort_unstable_by(|a, b| a.characters.cmp(&b.characters)); let mut i = 0; while i < result.len() { @@ -551,6 +545,7 @@ impl<'a> NfaCursor<'a> { i += 1; } + result.sort_unstable_by(|a, b| a.characters.cmp(&b.characters)); result } @@ -832,18 +827,18 @@ mod tests { (CharacterSet::from_char('e'), false, 0, 2), ], vec![ - NfaTransition { - characters: CharacterSet::empty().add_char('a').add_range('c', 'd'), - precedence: 0, - states: vec![1], - is_separator: false, - }, NfaTransition { characters: CharacterSet::empty().add_char('b').add_char('e'), precedence: 0, states: vec![2], is_separator: false, }, + NfaTransition { + characters: CharacterSet::empty().add_char('a').add_range('c', 'd'), + precedence: 0, + states: vec![1], + is_separator: false, + }, ], ), ];