Align AXIS control flow and fix pause and program rendering
Document source UI gates, explicit native live-plot clearing, and remaining parity boundaries. Fix pause/resume transport continuity, repeated stepping, coordinate previews, and spindle override state. Optimize large program snapshots and rendering, and cover the control flows with native Tcl, WASM, and browser checks. Validation: 22 native tests and source/browser checks pass. Worker/App regression: 113 of 123 pass; 10 pre-existing failures remain documented with no new failures.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "sim_linuxcnc_tp.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -43,6 +44,44 @@ int main(void) {
|
||||
assert(sim_linuxcnc_tp_step(planner) == 0);
|
||||
assert(sim_linuxcnc_tp_read_state(planner, &state) == 0);
|
||||
assert(state.position.tran.x > 0.0 && sim_linuxcnc_tp_jog(planner, 0, 1, 100.0, 22) != 0);
|
||||
assert(sim_linuxcnc_tp_abort(planner) == 0);
|
||||
assert(sim_linuxcnc_tp_set_position(planner, &origin) == 0);
|
||||
assert(sim_linuxcnc_tp_jog(planner, 0, 1, -1.0, 23) != 0);
|
||||
assert(sim_linuxcnc_tp_jog(planner, 0, 1, NAN, 23) != 0);
|
||||
assert(sim_linuxcnc_tp_jog(planner, 0, 1, 0.0, 23) == 0);
|
||||
for (int index = 0; index < 3000; ++index) {
|
||||
assert(sim_linuxcnc_tp_step(planner) == 0);
|
||||
assert(sim_linuxcnc_tp_read_state(planner, &state) == 0);
|
||||
assert(state.position.tran.x <= 5.0);
|
||||
if (state.queue_depth == 0) break;
|
||||
}
|
||||
assert(state.queue_depth == 0 && fabs(state.position.tran.x - 5.0) < 1e-9);
|
||||
assert(sim_linuxcnc_tp_jog(planner, 0, 1, 0.0, 24) != 0);
|
||||
assert(sim_linuxcnc_tp_jog(planner, 0, -1, 0.0, 25) == 0);
|
||||
for (int index = 0; index < 50; ++index) assert(sim_linuxcnc_tp_step(planner) == 0);
|
||||
assert(sim_linuxcnc_tp_read_state(planner, &state) == 0);
|
||||
assert(state.position.tran.x < 5.0 && state.position.tran.x > -5.0);
|
||||
assert(sim_linuxcnc_tp_abort(planner) == 0);
|
||||
assert(sim_linuxcnc_tp_read_state(planner, &state) == 0 && state.queue_depth == 0);
|
||||
assert(sim_linuxcnc_tp_set_position(planner, &origin) == 0);
|
||||
first = pose(1, 0, 0); second = pose(2, 0, 0);
|
||||
assert(sim_linuxcnc_tp_add_line(planner, &first, 10, 300, 101, 1) == 0);
|
||||
assert(sim_linuxcnc_tp_add_line(planner, &second, 10, 300, 102, 1) == 0);
|
||||
assert(sim_linuxcnc_tp_set_paused(planner, 1) == 0);
|
||||
assert(sim_linuxcnc_tp_step_line(planner) == 0);
|
||||
for (int tick = 0; tick < 3000 && sim_linuxcnc_tp_is_stepping(planner); ++tick) assert(sim_linuxcnc_tp_step(planner) == 0);
|
||||
assert(!sim_linuxcnc_tp_is_stepping(planner));
|
||||
assert(sim_linuxcnc_tp_read_state(planner, &state) == 0);
|
||||
/* motion/control.c detects an ID transition after the servo sample;
|
||||
a transition may advance less than one cycle into the following TC. */
|
||||
assert(state.position.tran.x >= 1.0 && state.position.tran.x < 1.0 + 10.0 * 0.001);
|
||||
assert(sim_linuxcnc_tp_queue_depth(planner) == 1);
|
||||
assert(sim_linuxcnc_tp_step_line(planner) == 0);
|
||||
for (int tick = 0; tick < 3000 && sim_linuxcnc_tp_is_stepping(planner); ++tick) assert(sim_linuxcnc_tp_step(planner) == 0);
|
||||
assert(sim_linuxcnc_tp_read_state(planner, &state) == 0);
|
||||
assert(fabs(state.position.tran.x - 2.0) < 1e-9);
|
||||
assert(sim_linuxcnc_tp_axis_limit(planner, 0, 0) == -5.0);
|
||||
assert(sim_linuxcnc_tp_axis_limit(planner, 0, 1) == 5.0);
|
||||
puts(canonical);
|
||||
free(planner);
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user