From 2f7bed218fea8ddc593da66ec54b8ab8b2d33939 Mon Sep 17 00:00:00 2001
From: Jaime Arias <arias@lipn.univ-paris13.fr>
Date: Wed, 22 Mar 2023 17:22:19 +0100
Subject: [PATCH] tests: add interpreter test

---
 pta2maude/src/Parser.py                      |  1 -
 pta2maude/tests/examples/coffee-intrpr.maude | 43 ++++++++++++++++++++
 pta2maude/tests/test_parser.py               | 20 +++++----
 3 files changed, 55 insertions(+), 9 deletions(-)
 create mode 100644 pta2maude/tests/examples/coffee-intrpr.maude

diff --git a/pta2maude/src/Parser.py b/pta2maude/src/Parser.py
index 47e623d..452d061 100644
--- a/pta2maude/src/Parser.py
+++ b/pta2maude/src/Parser.py
@@ -4,7 +4,6 @@ import textwrap
 from abc import ABC, abstractmethod
 
 import antlr4
-
 from src.dist.ImitatorLexer import ImitatorLexer
 from src.dist.ImitatorParser import ImitatorParser
 from src.Imitator import Automaton, Location, Model
diff --git a/pta2maude/tests/examples/coffee-intrpr.maude b/pta2maude/tests/examples/coffee-intrpr.maude
new file mode 100644
index 0000000..b4c299a
--- /dev/null
+++ b/pta2maude/tests/examples/coffee-intrpr.maude
@@ -0,0 +1,43 @@
+load Semantics .
+
+mod COFFEE is
+  extending  DYNAMICS .
+
+  ops idle addsugar preparing done   : -> Location [ctor] .
+  ops bstart bsugar cup coffee sleep : -> Action [ctor] .
+  ops coffee                         : -> Agent [ctor] .
+  ops x1 x2                          : -> Clock [ctor] .
+  ops p1 p2 p3                       : -> Parameter [ctor] .
+
+ op Coffee : -> Automaton .
+ eq Coffee = < coffee @ idle | (@ idle inv True :
+                           (when True local bstart do { x1 := 0 ; x2 := 0 } goto addsugar)),
+                        (@ addsugar inv x2 <= p2 :
+                            (when p1 <= x1 local bsugar do { x1 := 0 } goto addsugar ;
+                             when x2 = p2 local cup goto preparing)),
+                        (@ preparing inv x2 <= p3 :
+                             (when x2 = p3 local coffee do { x1 := 0 } goto done)) ,
+                        (@ done inv x1 <= c(10) :
+                             (when x1 = c(10) local sleep goto idle ;
+                              when True local bstart do { x1 := 0 ; x2 := 0 } goto addsugar))
+              > .
+
+   op init : -> State .
+   eq init = { Coffee }
+              < tick: tickOk
+                clocks: (x1 : 0/1, x2 : 0/1)
+                parameters: (p1 : 1, p2 : 1, p3 : 1)
+                dvariables: empty >
+                .
+
+ --- -------------------------
+ var NET    : Network .
+ var CLOCKS : SetAssignment .
+ var PARAMS : SetAssignment .
+ var DVARS  : SetAssignment .
+ var SSTDEF : SStateDef .
+ --- -------------------------
+
+endm
+
+search [1] init =>* { < coffee @ done | SSTDEF >  } < tick: tickNotOk clocks: CLOCKS parameters: PARAMS dvariables: DVARS > .
diff --git a/pta2maude/tests/test_parser.py b/pta2maude/tests/test_parser.py
index 8818cb3..a6037ae 100644
--- a/pta2maude/tests/test_parser.py
+++ b/pta2maude/tests/test_parser.py
@@ -11,18 +11,22 @@ def remove_spaces(output_str):
 
 
 @pytest.mark.parametrize(
-    "imitator_file,maude_file,collapsing",
+    "imitator_file,maude_file,version",
     [
-        ("ex1x.imi", "ex1x.maude", True),
-        ("ex1xy.imi", "ex1xy.maude", True),
-        ("ex1x.imi", "ex1x-nc.maude", False),
-        ("ex1xy.imi", "ex1xy-nc.maude", False),
-        ("coffee.imi", "coffee-nc.maude", False),
+        ("ex1x.imi", "ex1x.maude", "collapsing"),
+        ("ex1xy.imi", "ex1xy.maude", "collapsing"),
+        ("ex1x.imi", "ex1x-nc.maude", "no-collapsing"),
+        ("ex1xy.imi", "ex1xy-nc.maude", "no-collapsing"),
+        ("coffee.imi", "coffee-nc.maude", "no-collapsing"),
     ],
 )
-def test_parser(examples_dir, imitator_file, maude_file, collapsing):
+def test_parser(examples_dir, imitator_file, maude_file, version):
     # select the correct parser
-    parser = CollapsingParser() if collapsing else NoCollapsingParser()
+    parser = None
+    if version == "collapsing":
+        parser = CollapsingParser()
+    elif version == "no-collapsing":
+        parser = NoCollapsingParser()
 
     # parse the imitator file
     input_file = os.path.join(examples_dir, imitator_file)
-- 
GitLab