diff --git a/src/test/java/de/hhu/stups/codegenerator/java/TestMachines.java b/src/test/java/de/hhu/stups/codegenerator/java/TestMachines.java index 53a5cd7222ebe2351dc3e846af1b0bec87b6b0b3..9d3481c2fbc4e1ee4c58dadf8a884c0e0e73b9fb 100644 --- a/src/test/java/de/hhu/stups/codegenerator/java/TestMachines.java +++ b/src/test/java/de/hhu/stups/codegenerator/java/TestMachines.java @@ -765,4 +765,9 @@ public class TestMachines extends TestJava { testJava("drone/DroneCommunicator_Mockup"); } + @Test + public void testDroneMainController() throws Exception { + testJava("drone/DroneMainController"); + } + } \ No newline at end of file diff --git a/src/test/resources/de/hhu/stups/codegenerator/drone/DroneMainController.mch b/src/test/resources/de/hhu/stups/codegenerator/drone/DroneMainController.mch new file mode 100644 index 0000000000000000000000000000000000000000..7733c48bb01205a5926b77a80a3726c6eec4d76e --- /dev/null +++ b/src/test/resources/de/hhu/stups/codegenerator/drone/DroneMainController.mch @@ -0,0 +1,100 @@ +MACHINE DroneMainController +INCLUDES DroneSafetyController, DroneCommunicator_Mockup + +OPERATIONS + +Controller_Init = BEGIN EXTERNAL_Init END; + +Controller_open_link = BEGIN EXTERNAL_open_link END; + +Controller_register_sensors = BEGIN EXTERNAL_register_sensors END; + +Controller_Takeoff = + BEGIN + take_off; + EXTERNAL_Drone_Takeoff; + flying + END; + + Controller_Landing = + BEGIN + landing; + EXTERNAL_Drone_Land; + landed + END; + + Controller_DOWN(dist) = + SELECT + dist: INTEGER + THEN + DOWN(dist); + EXTERNAL_Drone_Down(dist) + END; + +Controller_UP(dist) = + SELECT + dist: INTEGER + THEN + UP(dist); + EXTERNAL_Drone_Up(dist) + END; + +Controller_LEFT(dist) = + SELECT + dist: INTEGER + THEN + LEFT(dist); + EXTERNAL_Drone_Left(dist) + END; + +Controller_RIGHT(dist) = + SELECT + dist: INTEGER + THEN + RIGHT(dist); + EXTERNAL_Drone_Right(dist) + END; + +Controller_BACKWARD(dist) = + SELECT + dist: INTEGER + THEN + BACKWARD(dist); + EXTERNAL_Drone_Backward(dist) + END; + +Controller_FORWARD(dist) = + SELECT + dist: INTEGER + THEN + FORWARD(dist); + EXTERNAL_Drone_Forward(dist) + END; + +Controller_OBSERVE = + VAR dist_forward, dist_backward, dist_up, dist_down, dist_left, dist_right + IN + dist_forward <-- EXTERNAL_Drone_GetFrontDistance; + dist_backward <-- EXTERNAL_Drone_GetBackDistance; + dist_up <-- EXTERNAL_Drone_GetUpDistance; + dist_down <-- EXTERNAL_Drone_GetDownDistance; + dist_left <-- EXTERNAL_Drone_GetLeftDistance; + dist_right <-- EXTERNAL_Drone_GetRightDistance; + observe({UP_SENSOR |-> dist_up, DOWN_SENSOR |-> dist_down, LEFT_SENSOR |-> dist_left, RIGHT_SENSOR |-> dist_right, FORWARD_SENSOR |-> dist_forward, BACKWARD_SENSOR |-> dist_backward}) + END; + +Controller_SYNC_POS = + VAR x, y, z + IN + x <-- EXTERNAL_Drone_GetX; + y <-- EXTERNAL_Drone_GetY; + z <-- EXTERNAL_Drone_GetZ; + setCoordinates(x, y, z) + END; + +Controller_CLOSE_LINK = + BEGIN + EXTERNAL_close_link + END + +END \ No newline at end of file diff --git a/src/test/resources/de/hhu/stups/codegenerator/drone/DroneSafetyController.mch b/src/test/resources/de/hhu/stups/codegenerator/drone/DroneSafetyController.mch index ca8182ab9dc15858665c73dc912ffcb63ac1b785..aeec532cc9bab0dcb2d5fc6d16cf516896272b93 100644 --- a/src/test/resources/de/hhu/stups/codegenerator/drone/DroneSafetyController.mch +++ b/src/test/resources/de/hhu/stups/codegenerator/drone/DroneSafetyController.mch @@ -166,6 +166,16 @@ OPERATIONS THEN sensor_data := data || updated := TRUE - END + END; + setCoordinates(newX, newY, newZ) = + SELECT + newX : INTEGER & + newY : INTEGER & + newZ : INTEGER + THEN + x := newX || + y := newY || + z := newZ + END END