From d785e2dd996c0146bddf5d389db7345b861853eb Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 9 Jul 2021 18:19:13 +0100 Subject: [PATCH] jstest: lower: wip after and before Signed-off-by: Ian Jackson --- jstest/jst-lower.rs | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/jstest/jst-lower.rs b/jstest/jst-lower.rs index 41cd47c6..c52d028d 100644 --- a/jstest/jst-lower.rs +++ b/jstest/jst-lower.rs @@ -60,7 +60,10 @@ pub struct TestsAccumulator { impl Test { #[throws(Explode)] pub fn check(&self) { - let mut updated: HashMap = default(); + + let mut updated: HashMap + = default(); + for l in BufReader::new( fs::File::open(format!("{}.did",self.name))? ).lines() { @@ -73,6 +76,37 @@ impl Test { assert!(was.is_none(), "{:?}", id); } + #[derive(Debug)] + struct PieceCollated<'o,'n> { + id: Vpid, + old_z: &'o ZCoord, + new_z: &'n ZCoord, + bottom: bool, + updated: bool, + } + + let coll = self.pieces.iter().map(|(&id, start)| { + let old_z = &start.z; + let new_z = updated.get(&id); + let updated = new_z.is_some(); + let new_z = new_z.unwrap_or(&start.z); + PieceCollated { + id, new_z, old_z, updated, + bottom: start.bottom(), + } + }).collect_vec(); + let sorted = | kf: + &dyn for <'r> Fn(&'r PieceCollated<'r,'r>) -> &'r ZCoord + | +// for<'i,'r,'o,'n> fn(&'i PieceCollated<'o,'n>) -> &'r ZCoord | + { + let mut v = coll.iter().collect_vec(); + v.sort_by_key(|p| kf(p)); + v + }; + let before = sorted(&|p: &PieceCollated| p.old_z); + let after = sorted(&|p: &PieceCollated| p.new_z); + // non-bottom targets are in same stacking order as before { #[derive(Debug,Ord,PartialOrd,Eq,PartialEq)] -- 2.30.2