Переглянути джерело

Working local constraints in LHS for model transformations

Yentl Van Tendeloo 8 роки тому
батько
коміт
f5c2aacb3d
3 змінених файлів з 18 додано та 3 видалено
  1. BIN
      bootstrap/bootstrap.m.gz
  2. 3 0
      bootstrap/transform.alc
  3. 15 3
      integration/test_pn_interface.py

BIN
bootstrap/bootstrap.m.gz


+ 3 - 0
bootstrap/transform.alc

@@ -111,9 +111,12 @@ Element function get_possible_bindings(host_model : Element, LHS_model : Element
 			else:
 				// Check local constraints and add only if positive
 				Element constraint_function
+				log("Finding constraint")
 				constraint_function = read_attribute(LHS_model, current_element, "constraint")
 				Boolean result
+				log("Executing constraint")
 				result = constraint_function(host_model, option)
+				log("Executed constraint")
 				if (result):
 					set_add(filtered_options, option)
 

+ 15 - 3
integration/test_pn_interface.py

@@ -538,14 +538,22 @@ Element function constraint(model : Element, name : String):
             mode))
 
     def test_po_pn_interface_transform(self):
-        constraint_code = \
+        action_code = \
             """
 include "primitives.alh"
 Integer function value(host_model : Element, RHS_model : Element):
 \treturn 5!
             """
 
-        constructors = get_constructor(constraint_code)
+        constraint_code = \
+            """
+include "primitives.alh"
+Boolean function constraint(host_model : Element, name : String):
+\treturn value_eq(host_model["model"][name], 3)!
+            """
+
+        constructor_action = get_constructor(action_code)
+        constructor_constraint = get_constructor(constraint_code)
 
         self.assertTrue(run_file(all_files,
             ["new", "PetriNets", "pn",
@@ -574,6 +582,8 @@ Integer function value(host_model : Element, RHS_model : Element):
                 "instantiate", "LHS_contains", "", "lhs", "p_tokens",
                 "attr_add", "tokens", "label", "0_tokens",
                 "attr_add", "p_tokens", "label", "1_p_tokens",
+                "attr_add_code", "tokens", "constraint",
+            ] + constructor_constraint + [
                 "attr_add", "p", "label", "2_p",
                 "attr_add", "t", "label", "3_t",
                 "attr_add", "pt", "label", "4_pt",
@@ -593,7 +603,7 @@ Integer function value(host_model : Element, RHS_model : Element):
                 "attr_add", "p", "label", "2_p",
                 "attr_add", "t", "label", "3_t",
                 "attr_add_code", "tokens", "value",
-            ] + constructors + [
+            ] + constructor_action + [
                 "exit",
              "transform", "pn", "pn_LHS", "pn_RHS",
              "load", "pn",
@@ -601,6 +611,8 @@ Integer function value(host_model : Element, RHS_model : Element):
                 "verify",
                 "read",
                 "p1",
+                "read",
+                "p2",
                 "exit",
                 ],
             None, "PO"))