mosis24Statecharts/StartingPoint/runner_tests.py

232 lines
8.4 KiB
Python

import functools
from lib.test import run_scenarios
# from srcgen.lock_controller import LockController
from srcgen.solution import Solution as LockController # Teacher's solution
# For each test scenario, sends a sequence of timed input events to the statechart, and checks if the expected sequence of timed output events occurs.
# Each timed event is a tuple (timestamp, event_name, parameter_value)
# For events that don't have a parameter, the parameter value is always 'None'.
# Timestamps are in nanoseconds since simulation start!
SCENARIOS = [
{
"name": "normal operation, serve two requests",
"input_events": [
(0, "water_lvl", 508),
(2393556604, "request_lvl_change", None),
(4493556604, "water_lvl", 675),
(4593556604, "water_lvl", 811),
(4693556604, "water_lvl", 926),
(4793556604, "water_lvl", 1025),
(4893556604, "water_lvl", 1105),
(4993556604, "water_lvl", 1176),
(5093556604, "water_lvl", 1228),
(5193556604, "water_lvl", 1276),
(5293556604, "water_lvl", 1316),
(5393556604, "water_lvl", 1352),
(5493556604, "water_lvl", 1375),
(5593556604, "water_lvl", 1395),
(5693556604, "water_lvl", 1419),
(5793556604, "water_lvl", 1433),
(5893556604, "water_lvl", 1443),
(5993556604, "water_lvl", 1460),
(6093556604, "water_lvl", 1470),
(6193556604, "water_lvl", 1476),
(6293556604, "water_lvl", 1483),
(6393556604, "water_lvl", 1482),
(6493556604, "water_lvl", 1491),
(6593556604, "water_lvl", 1496),
(6693556604, "water_lvl", 1497),
(6793556604, "water_lvl", 1498),
(6893556604, "water_lvl", 1496),
(6993556604, "water_lvl", 1501),
(7093556604, "water_lvl", 1504),
(7193556604, "water_lvl", 1509),
(9193747734, "request_lvl_change", None),
(11293747734, "water_lvl", 1341),
(11393747734, "water_lvl", 1197),
(11493747734, "water_lvl", 1084),
(11593747734, "water_lvl", 981),
(11693747734, "water_lvl", 906),
(11793747734, "water_lvl", 836),
(11893747734, "water_lvl", 774),
(11993747734, "water_lvl", 735),
(12093747734, "water_lvl", 692),
(12193747734, "water_lvl", 664),
(12293747734, "water_lvl", 636),
(12393747734, "water_lvl", 606),
(12493747734, "water_lvl", 592),
(12593747734, "water_lvl", 581),
(12693747734, "water_lvl", 561),
(12793747734, "water_lvl", 551),
(12893747734, "water_lvl", 548),
(12993747734, "water_lvl", 533),
(13093747734, "water_lvl", 531),
(13193747734, "water_lvl", 522),
(13293747734, "water_lvl", 525),
(13393747734, "water_lvl", 520),
(13493747734, "water_lvl", 513),
(13593747734, "water_lvl", 507),
(13693747734, "water_lvl", 507),
(13793747734, "water_lvl", 507),
(13893747734, "water_lvl", 510),
(13993747734, "water_lvl", 501),
(14093747734, "water_lvl", 504),
],
"output_events": [
(0, "open_doors", 0),
(0, "green_light", 0),
(2393556604, "red_light", 0),
(2393556604, "set_request_pending", True),
(4393556604, "close_doors", 0),
(4393556604, "open_flow", 1),
(7193556604, "close_flow", 1),
(7193556604, "set_request_pending", False),
(7193556604, "open_doors", 1),
(7193556604, "green_light", 1),
(9193747734, "red_light", 1),
(9193747734, "set_request_pending", True),
(11193747734, "close_doors", 1),
(11193747734, "open_flow", 0),
(14193747734, "close_flow", 0),
(14193747734, "set_request_pending", False),
(14193747734, "open_doors", 0),
(14193747734, "green_light", 0),
],
},
{
"name": "break sensor, fix sensor, then change water lvl",
"input_events": [
(0, "water_lvl", 508),
(2084169493, "water_lvl", 99007),
(4084274216, "water_lvl", 504),
(5420871976, "resume", None),
(7100735485, "request_lvl_change", None),
(9200735485, "water_lvl", 670),
(9300735485, "water_lvl", 812),
(9400735485, "water_lvl", 927),
(9500735485, "water_lvl", 1028),
(9600735485, "water_lvl", 1104),
(9700735485, "water_lvl", 1173),
(9800735485, "water_lvl", 1231),
(9900735485, "water_lvl", 1281),
(10000735485, "water_lvl", 1316),
(10100735485, "water_lvl", 1346),
(10200735485, "water_lvl", 1378),
(10300735485, "water_lvl", 1399),
(10400735485, "water_lvl", 1414),
(10500735485, "water_lvl", 1436),
(10600735485, "water_lvl", 1450),
(10700735485, "water_lvl", 1459),
(10800735485, "water_lvl", 1469),
(10900735485, "water_lvl", 1471),
(11000735485, "water_lvl", 1481),
(11100735485, "water_lvl", 1488),
(11200735485, "water_lvl", 1490),
(11300735485, "water_lvl", 1492),
(11400735485, "water_lvl", 1491),
(11500735485, "water_lvl", 1497),
(11600735485, "water_lvl", 1501),
(11700735485, "water_lvl", 1506),
(11800735485, "water_lvl", 1508),
(11900735485, "water_lvl", 1504),
],
"output_events": [
(0, "open_doors", 0),
(0, "green_light", 0),
(2084169493, "red_light", 0),
(2084169493, "close_doors", 0),
(2084169493, "set_sensor_broken", None),
(5420871976, "open_doors", 0),
(5420871976, "green_light", 0),
(7100735485, "red_light", 0),
(7100735485, "set_request_pending", True),
(9100735485, "close_doors", 0),
(9100735485, "open_flow", 1),
(11900735485, "close_flow", 1),
(11900735485, "set_request_pending", False),
(11900735485, "open_doors", 1),
(11900735485, "green_light", 1),
],
},
{
"name": "break sensor DURING water lvl change, then fix and resume",
"input_events": [
(0, "water_lvl", 508),
(2661508910, "request_lvl_change", None),
(4761508910, "water_lvl", 675),
(4861508910, "water_lvl", 811),
(4961508910, "water_lvl", 926),
(5061508910, "water_lvl", 1025),
(5093300938, "water_lvl", 99004),
(7821829184, "water_lvl", 1028),
(9213791769, "resume", None),
(9313791769, "water_lvl", 1104),
(9413791769, "water_lvl", 1173),
(9513791769, "water_lvl", 1231),
(9613791769, "water_lvl", 1281),
(9713791769, "water_lvl", 1316),
(9813791769, "water_lvl", 1346),
(9913791769, "water_lvl", 1378),
(10013791769, "water_lvl", 1399),
(10113791769, "water_lvl", 1414),
(10213791769, "water_lvl", 1436),
(10313791769, "water_lvl", 1450),
(10413791769, "water_lvl", 1459),
(10513791769, "water_lvl", 1469),
(10613791769, "water_lvl", 1471),
(10713791769, "water_lvl", 1481),
(10813791769, "water_lvl", 1488),
(10913791769, "water_lvl", 1490),
(11013791769, "water_lvl", 1492),
(11113791769, "water_lvl", 1491),
(11213791769, "water_lvl", 1497),
(11313791769, "water_lvl", 1501),
(11413791769, "water_lvl", 1506),
(11513791769, "water_lvl", 1508),
(11613791769, "water_lvl", 1504),
],
"output_events": [
(0, "open_doors", 0),
(0, "green_light", 0),
(2661508910, "red_light", 0),
(2661508910, "set_request_pending", True),
(4661508910, "close_doors", 0),
(4661508910, "open_flow", 1),
(5093300938, "close_flow", 1),
(5093300938, "set_sensor_broken", None),
(9213791769, "open_flow", 1),
(11613791769, "close_flow", 1),
(11613791769, "set_request_pending", False),
(11613791769, "open_doors", 1),
(11613791769, "green_light", 1),
],
}
]
# The following output events are safe to repeat: (with same value)
# This will be taken into account while comparing traces.
# Do not change this:
IDEMPOTENT = [
"open_doors",
"close_doors",
"red_light",
"green_light",
"set_request_pending",
"open_flow",
"close_flow",
]
# We pretend that initially, these events occur:
# Do not change this:
INITIAL = [
("open_doors", 0),
("close_doors", 1),
("green_light", 0),
("red_light", 1),
("set_request_pending", False)
]
if __name__ == "__main__":
run_scenarios(SCENARIOS, LockController, INITIAL, IDEMPOTENT, verbose=False)