32 lines
2.2 KiB
JavaScript
32 lines
2.2 KiB
JavaScript
/* Pure conditioning and log parsing tests: no hardware or browser needed. */
|
|
const assert=require('node:assert/strict');
|
|
const {deadZone,defaults,read,Motion}=require('../web/controller-input.js');
|
|
const {parse}=require('../web/console-view.js');
|
|
const pad={connected:true,axes:[0,0,0,0]};
|
|
assert.equal(deadZone(.06),0);assert.equal(deadZone(-1),-1);assert.equal(deadZone(1),1);
|
|
assert.equal(defaults({axes:[0,0]}).vertical,-1);
|
|
assert.equal(read({...pad,connected:false},defaults(pad)),null);
|
|
assert.equal(read(pad,{...defaults(pad),vertical:10}),null);
|
|
const diagonal=read({...pad,axes:[1,-1,0,-1]},defaults(pad));
|
|
assert(Math.abs(Math.hypot(diagonal.turn,diagonal.forward)-1)<1e-10);
|
|
assert.equal(diagonal.vertical,1);
|
|
assert.equal(read({...pad,axes:[-.5,0,0,0]},{...defaults(pad),invertTurn:true}).turn,deadZone(.5));
|
|
const motion=new Motion(),target={turn:.6,forward:.8,vertical:1};
|
|
assert.deepEqual(motion.step(target,0),{turn:0,forward:0,vertical:0});
|
|
const partial=motion.step(target,16);assert(partial.vertical>0&&partial.vertical<.3);
|
|
let current;for(let time=32;time<=1000;time+=16){current=motion.step(target,time);assert(Math.hypot(current.turn,current.forward)<=1+1e-10)}
|
|
assert(current.vertical>.99);
|
|
const neutral={turn:0,forward:0,vertical:0};
|
|
assert(motion.step(neutral,1024).vertical>.99);
|
|
assert(motion.step(neutral,1200).vertical>0);
|
|
assert.deepEqual(motion.step(neutral,1400),neutral);
|
|
motion.reset();assert.deepEqual(motion.step(target,1500),neutral);
|
|
assert.equal(parse('2026-10-01T10:11:12.123 [RX] {"mavpackettype":"HEARTBEAT","base_mode":128}').quiet,true);
|
|
const ack=parse('2026-10-01T10:11:12.123 [RX] {"mavpackettype":"COMMAND_ACK","command":400,"result":0}');
|
|
assert.equal(ack.time,'10:11:12.123');assert.equal(ack.type,'COMMAND_ACK');assert.equal(ack.tone,'command');
|
|
assert.equal(parse('2026-10-01T10:11:12 [TX_LINK_PROBE_TIMEOUT] retry').quiet,false);
|
|
assert.equal(parse('2026-10-01T10:11:12 [RX] {"mavpackettype":"STATUSTEXT","severity":3,"text":"warning"}').tone,'warning');
|
|
assert.equal(parse('2026-10-01T10:11:12 [RX] null').type,'RX');
|
|
assert.equal(parse('unstructured text').payload,'unstructured text');
|
|
console.log('PASS: dead zone, mapping/inversion, diagonal cap, ramp, finite center return, resets, console parsing and warning visibility.');
|