chiark / gitweb /
jat-lower: wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 8 Jul 2021 20:03:34 +0000 (21:03 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 8 Jul 2021 20:03:34 +0000 (21:03 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Cargo.lock
jstest/Cargo.toml
jstest/jst-lower.rs
jstest/jstest.rs
jstest/lower.nodejs

index 8797f75a1c51463323280fb6fe88256ee68dc58f..a22ed55a50c43a56e9943e69ebb8c09677b3a00d 100644 (file)
@@ -2565,6 +2565,7 @@ name = "otter-nodejs-tests"
 version = "0.7.1"
 dependencies = [
  "fehler",
+ "indexmap",
  "otter",
  "structopt",
 ]
index b51088509133615b8cc98b60c6b9eef0c87f7640..ef376d6b444e35f2dc3b3806b6c9a6c59f022545 100644 (file)
@@ -29,6 +29,8 @@ path="jst-lower.rs"
 otter.path=".."
 otter.version="=0.7.1"
 
+indexmap = "1.6"
+
 fehler="1"
 structopt="0.3"
 
index 0a688acf62493ed50a3496c1c49dd992749b18a1..a75b594a034b47e8d8eb0788b4fb1b0247ac7bb8 100644 (file)
@@ -4,15 +4,66 @@
 
 use otter_nodejs_tests::*;
 
-#[derive(StructOpt)]
-struct Opts {
+#[derive(StructOpt,Debug,Clone)]
+pub struct Opts {
   pub nodejs: String,
   pub script: String,
 }
 
+#[derive(Debug,Clone)]
+pub struct StartPieceSpec {
+  id: &'static str,
+  pinned: bool,
+  moveable: PieceMoveable,
+}
+
+#[macro_export]
+macro_rules! sp {
+  { $id:expr, $pinned:expr, $moveable:ident } => {
+    StartPieceSpec { id: $id, pinned: $pinned,
+                     moveable: PieceMoveable::$moveable }
+  };
+}
+
+#[derive(Debug,Clone)]
+#[derive(Eq,PartialEq,Ord,PartialOrd)]
+pub struct StartPiece {
+  id: String,
+  pinned: bool,
+  moveable: PieceMoveable,
+  z: ZCoord,
+}
+
+#[derive(Debug,Clone,Default)]
+pub struct Tests {
+  tests: IndexMap<String, Vec<StartPiece>>,
+}
+
+impl Tests {
+  pub fn add_test(&mut self, name: &'static str, pieces: Vec<StartPieceSpec>) {
+    let mut zm = ZCoord::default().clone_mut();
+    let pieces = pieces.into_iter().map(
+      |StartPieceSpec { id, pinned, moveable }| {
+        let id = id.into();
+        let z = zm.increment().unwrap();
+        StartPiece { id, pinned, moveable, z }
+      }
+    ).collect_vec();
+    let already = self.tests.insert(name.to_owned(), pieces);
+    assert_eq!(already, None);
+  }
+}
+
 #[throws(AE)]
 fn main() {
   let opts = Opts::from_args();
+
+  let mut tests = Tests::default();
+  tests.add_test("simple", vec![
+    sp!("1.1", false, Yes),
+    sp!("2.1", false, Yes),
+  ]);
+
   let mut cmd = Command::new(opts.nodejs);
   cmd.arg(opts.script);
   let status = cmd.status()?;
index d1493843230ecfb54d9468ec0f24fb8883615db3..a077b6a1140b589f9f94647c9958b51df60df730 100644 (file)
@@ -4,4 +4,5 @@
 
 pub use otter::prelude::*;
 
+pub use indexmap::IndexMap;
 pub use structopt::StructOpt;
index f941330a000fba947b047249b4b418e9d204714e..1bc56a494249a7994aedce3cb1d291eeefc8df74 100644 (file)
@@ -19,7 +19,7 @@ function api_piece(op, piece, p, args) {
 }
 
 
-jstest_did = fs.openSync("simple.did", 'w');
+jstest_did = fs.openSync("byhand.did", 'w');
 
 pieces = {
   "1.1": {