chiark / gitweb /
jst-lower: Make ZUpdateSpec an enum, not a trait
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 18 Jul 2021 19:52:42 +0000 (20:52 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 18 Jul 2021 19:52:59 +0000 (20:52 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
jstest/jst-lower.rs

index cfb58a2439a0bc0a29aa9bb2bf2a80f3081d59cb..f63a902c045296080e97527f7c69c87d275d72e7 100644 (file)
@@ -60,15 +60,20 @@ pub struct TestsAccumulator {
   tera: tera::Tera,
 }
 
-pub trait ZUpdateSpec: Debug + Clone {
-  fn next(&self, last: &mut zcoord::Mutable) -> ZLevel;
+#[derive(Debug,Clone)]
+pub enum ZUpdateSpec {
+  Auto,
 }
-
-#[derive(Debug,Copy,Clone)]
-pub struct ZUpdateAuto;
-impl ZUpdateSpec for ZUpdateAuto {
-  fn next(&self, last: &mut zcoord::Mutable) -> ZLevel {
-    ZLevel { z: last.increment().unwrap(), zg: Generation(1000) }
+use ZUpdateSpec as ZUS;
+
+impl ZUpdateSpec {
+  pub fn next(&self, last: &mut zcoord::Mutable) -> ZLevel {
+    match self {
+      ZUS::Auto => ZLevel {
+        z: last.increment().unwrap(),
+        zg: Generation(1000),
+      },
+    }
   }
 }
 
@@ -270,11 +275,10 @@ impl TestsAccumulator {
   }
     
   #[throws(Explode)]
-  pub fn add_test<T, Z>(&mut self, name: &str, zupd: Z,
-                        pieces: Vec<StartPieceSpec>,
-                        targets: Vec<T>)
+  pub fn add_test<T>(&mut self, name: &str, zupd: ZUpdateSpec,
+                     pieces: Vec<StartPieceSpec>,
+                     targets: Vec<T>)
   where T: TryInto<Vpid> + Copy + Debug,
-        Z: ZUpdateSpec,
   {
     if let Some(only) = &self.tests.only {
       if name != only { return; }
@@ -339,7 +343,7 @@ impl TestsAccumulator {
     ).enumerate() {
       if targets.is_empty() { continue }
       let name = format!("exhaustive-{:02x}", ti);
-      self.add_test(&name, ZUpdateAuto, pieces, targets)?;
+      self.add_test(&name, ZUS::Auto, pieces, targets)?;
     }
   }
 }
@@ -365,14 +369,14 @@ fn main() {
 
   let mut ta = TestsAccumulator::new(&opts)?;
 
-  ta.add_test("simple", ZUpdateAuto, vec![
+  ta.add_test("simple", ZUS::Auto, vec![
     sp!("1.1", false, Yes),
     sp!("2.1", false, Yes),
   ], vec![
     "2.1",
   ])?;
 
-  ta.add_test("pair", ZUpdateAuto, vec![
+  ta.add_test("pair", ZUS::Auto, vec![
     sp!("1.1", false, Yes),
     sp!("2.1", false, Yes),
     sp!("3.1", false, Yes),
@@ -381,7 +385,7 @@ fn main() {
     "2.1",
   ])?;
 
-  ta.add_test("found-2021-07-07-raises", ZUpdateAuto, vec![
+  ta.add_test("found-2021-07-07-raises", ZUS::Auto, vec![
     sp!( "87.7", false, No),
     sp!( "81.7", false, Yes),
     sp!("110.7", false, Yes), // HELD 1#1