78 lines
5.1 KiB
C
78 lines
5.1 KiB
C
#include "sim_task.h"
|
|
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
int main(void) {
|
|
sim_task task = {0};
|
|
sim_task baseline = {0};
|
|
sim_task_state state = {0};
|
|
char canonical[SIM_TASK_CANONICAL_CAPACITY] = {0};
|
|
uint32_t required;
|
|
uint64_t hash;
|
|
|
|
assert(sim_task_init(&task, "linuxcnc-2.10.0-pre0-wasm-m1-py-c1", "native-task") == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&task, 1, 0) == SIM_TASK_OK);
|
|
assert(sim_task_attach(&task) == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&task, 3, 0) == SIM_TASK_ERR_SEQUENCE);
|
|
assert(sim_task_set_command(&task, 2, 0) == SIM_TASK_OK);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_PROGRAM_LOAD, 0, 0, 0, 0, 0, 10) == SIM_TASK_GATE_ALLOWED);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_RUN, 0, 0, 0, 0, 0, 10) == SIM_TASK_GATE_MACHINE_OFF);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_POWER, 1, 0, 0, 0, 0, 10) == SIM_TASK_GATE_ALLOWED);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_POWER, 0, 0, 0, 0, 0, 10) == SIM_TASK_GATE_MACHINE_OFF);
|
|
assert(sim_task_set_program(&task, SIM_TASK_PROGRAM_LOADED, 0) == SIM_TASK_OK);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_RUN, 0, 1, 0, 1, 1, 10) == SIM_TASK_GATE_ALLOWED);
|
|
assert(sim_task_transition(&task, SIM_TASK_RUNNING) == SIM_TASK_OK);
|
|
assert(sim_task_set_program(&task, SIM_TASK_PROGRAM_RUNNING, 1) == SIM_TASK_OK);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_PAUSE, 0, 1, 0, 1, 0, 10) == SIM_TASK_GATE_PAUSE_STATE);
|
|
assert(sim_task_set_mode(&task, SIM_TASK_MODE_AUTO) == SIM_TASK_OK);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_PAUSE, 0, 1, 0, 1, 0, 10) == SIM_TASK_GATE_ALLOWED);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_OVERRIDE, 0, 1, 0, 1, 0, 10) == SIM_TASK_GATE_ALLOWED);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_OVERRIDE, 0, 0, 0, 1, 0, 10) == SIM_TASK_GATE_MACHINE_OFF);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_OVERRIDE, 0, 1, 1, 1, 0, 10) == SIM_TASK_GATE_ESTOP_ACTIVE);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_POWER, 0, 1, 0, 1, 0, 10) == SIM_TASK_GATE_ALLOWED);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_SET_MODE, SIM_TASK_MODE_MANUAL, 1, 0, 1, 0, 10) == SIM_TASK_GATE_MODE_AUTO_ACTIVE);
|
|
assert(sim_task_command_gate(&task, SIM_TASK_GATE_ESTOP, 1, 1, 0, 1, 0, 10) == SIM_TASK_GATE_ALLOWED);
|
|
assert(sim_task_set_command(&task, 3, 4) == SIM_TASK_OK);
|
|
assert(sim_task_transition(&task, SIM_TASK_PAUSED) == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&task, 4, 3) == SIM_TASK_ERR_TICK);
|
|
assert(sim_task_set_command(&task, 4, 5) == SIM_TASK_OK);
|
|
assert(sim_task_transition(&task, SIM_TASK_RUNNING) == SIM_TASK_OK);
|
|
assert(sim_task_fault(&task, -77) == SIM_TASK_OK);
|
|
assert(sim_task_recover(&task) == SIM_TASK_OK);
|
|
assert(sim_task_read_state(&task, &state) == SIM_TASK_OK && state.state == SIM_TASK_READY);
|
|
required = sim_task_canonical(&task, NULL, 0);
|
|
assert(required > 1 && required < SIM_TASK_CANONICAL_CAPACITY);
|
|
assert(sim_task_canonical(&task, canonical, sizeof(canonical)) == required);
|
|
assert(strstr(canonical, "\"schema\":\"sim_task.v1\"") != NULL);
|
|
hash = sim_task_state_hash(&task);
|
|
assert(hash != 0 && hash == sim_task_state_hash(&task));
|
|
assert(sim_task_canonical(&task, canonical, required - 1) == required);
|
|
assert(sim_task_init(&task, "bad\"context", "session") == SIM_TASK_ERR_ARGUMENT);
|
|
assert(sim_task_init(&task, "context", "session") == SIM_TASK_OK);
|
|
assert(sim_task_transition(&task, SIM_TASK_PAUSED) == SIM_TASK_ERR_TRANSITION);
|
|
assert(sim_task_set_mode(&task, 99) == SIM_TASK_ERR_ARGUMENT);
|
|
assert(sim_task_set_program(&task, 99, 0) == SIM_TASK_ERR_ARGUMENT);
|
|
assert(sim_task_set_command(&task, 1, 0) == SIM_TASK_OK);
|
|
assert(sim_task_attach(&task) == SIM_TASK_OK);
|
|
assert(sim_task_transition(&task, SIM_TASK_DESTROYED) == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&task, 2, 0) == SIM_TASK_ERR_DESTROYED);
|
|
assert(sim_task_init(&baseline, "linuxcnc-2.10.0-pre0-wasm-m1-py-c1", "task-a") == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&baseline, 1, 0) == SIM_TASK_OK);
|
|
assert(sim_task_attach(&baseline) == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&baseline, 2, 0) == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&baseline, 3, 0) == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&baseline, 4, 0) == SIM_TASK_OK);
|
|
assert(sim_task_set_program(&baseline, SIM_TASK_PROGRAM_LOADED, 0) == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&baseline, 5, 0) == SIM_TASK_OK);
|
|
assert(sim_task_transition(&baseline, SIM_TASK_RUNNING) == SIM_TASK_OK);
|
|
assert(sim_task_set_mode(&baseline, SIM_TASK_MODE_AUTO) == SIM_TASK_OK);
|
|
assert(sim_task_set_program(&baseline, SIM_TASK_PROGRAM_RUNNING, 1) == SIM_TASK_OK);
|
|
assert(sim_task_set_command(&baseline, 6, 1) == SIM_TASK_OK);
|
|
printf("{\"schema\":\"sim-task-samples.v1\",\"state\":\"READY\",\"seq\":%u,\"tick\":%u,\"state_hash\":\"fnv1a64:%016llx\",\"baseline_hash\":\"fnv1a64:%016llx\",\"canonical\":%s}\n",
|
|
state.seq, state.simulation_tick, (unsigned long long)hash,
|
|
(unsigned long long)sim_task_state_hash(&baseline), canonical);
|
|
return 0;
|
|
}
|