chiark / gitweb /
jstest: lower: wip after and before
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 9 Jul 2021 17:19:13 +0000 (18:19 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 9 Jul 2021 17:24:34 +0000 (18:24 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
jstest/jst-lower.rs

index 41cd47c6445fa4997fe860483e5e41e97409e795..c52d028dd15d986fdd679f3da1b8105cc016b18a 100644 (file)
@@ -60,7 +60,10 @@ pub struct TestsAccumulator {
 impl Test {
   #[throws(Explode)]
   pub fn check(&self) {
-    let mut updated: HashMap<VisiblePieceId, ZCoord> = default();
+
+    let mut updated: HashMap<Vpid, ZCoord>
+      = 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)]