Skip to content

Commit

Permalink
Merge pull request #4931 from cazou/improve-tsort
Browse files Browse the repository at this point in the history
tsort: Switch to BTreeMap and BTreeSet
  • Loading branch information
sylvestre authored Jun 5, 2023
2 parents 82f5fec + 43a8d62 commit 2804af2
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/uu/tsort/src/tsort.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// * For the full copyright and license information, please view the LICENSE
// * file that was distributed with this source code.
use clap::{crate_version, Arg, Command};
use std::collections::{HashMap, HashSet};
use std::collections::{BTreeMap, BTreeSet};
use std::fs::File;
use std::io::{stdin, BufRead, BufReader, Read};
use std::path::Path;
Expand Down Expand Up @@ -103,8 +103,8 @@ pub fn uu_app() -> Command {
// but using integer may improve performance.
#[derive(Default)]
struct Graph {
in_edges: HashMap<String, HashSet<String>>,
out_edges: HashMap<String, Vec<String>>,
in_edges: BTreeMap<String, BTreeSet<String>>,
out_edges: BTreeMap<String, Vec<String>>,
result: Vec<String>,
}

Expand All @@ -122,7 +122,7 @@ impl Graph {
}

fn init_node(&mut self, n: &str) {
self.in_edges.insert(n.to_string(), HashSet::new());
self.in_edges.insert(n.to_string(), BTreeSet::new());
self.out_edges.insert(n.to_string(), vec![]);
}

Expand Down
8 changes: 8 additions & 0 deletions tests/by-util/test_tsort.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ fn test_sort_self_loop() {
.stdout_only("first\nsecond\n");
}

#[test]
fn test_sort_floating_nodes() {
new_ucmd!()
.pipe_in("d d\nc c\na a\nb b")
.succeeds()
.stdout_only("a\nb\nc\nd\n");
}

#[test]
fn test_no_such_file() {
new_ucmd!()
Expand Down

0 comments on commit 2804af2

Please sign in to comment.