better test support

This commit is contained in:
Peli de Halleux 2017-12-19 13:10:40 -08:00
parent e07d6e3a31
commit eac3e183c3
4 changed files with 38 additions and 31 deletions

View File

@ -67,8 +67,8 @@ namespace console.screen {
if (!lines) { if (!lines) {
lines = []; lines = [];
console.addListener(log); console.addListener(log);
brick.buttonUp.onEvent(ButtonEvent.Click, () => scroll(1)) brick.buttonUp.onEvent(ButtonEvent.Click, () => scroll(-1))
brick.buttonDown.onEvent(ButtonEvent.Click, () => scroll(-1)) brick.buttonDown.onEvent(ButtonEvent.Click, () => scroll(1))
} }
} }

View File

@ -75,9 +75,9 @@ namespace motors {
* @param buf message buffer * @param buf message buffer
*/ */
//% //%
export function readPWM(buf: Buffer): number { export function readPWM(buf: Buffer): void {
init() init()
return pwmMM.read(buf); pwmMM.read(buf);
} }
/** /**
@ -261,9 +261,16 @@ namespace motors {
//% //%
isReady(): boolean { isReady(): boolean {
this.init(); this.init();
const r = readPWM(mkCmd(this._port, DAL.opOutputTest, 0)) const buf = mkCmd(this._port, DAL.opOutputTest, 2);
// 0 = ready, 1 = busy readPWM(buf)
return r == 0; const flags = buf.getNumber(NumberFormat.UInt8LE, 2);
// TODO: FIX with ~ support
for(let i = 0; i < DAL.NUM_OUTPUTS; ++i) {
const flag = 1 << i;
if ((this._port & flag) && (flags & flag))
return false;
}
return true;
} }
/** /**
@ -529,8 +536,8 @@ namespace motors {
export const largeCD = new SynchedMotorPair(Output.CD); export const largeCD = new SynchedMotorPair(Output.CD);
function reset(out: Output) { function reset(out: Output) {
let b = mkCmd(out, DAL.opOutputReset, 0) writePWM(mkCmd(out, DAL.opOutputReset, 0))
writePWM(b) writePWM(mkCmd(out, DAL.opOutputClearCount, 0))
} }
function outOffset(out: Output) { function outOffset(out: Output) {

View File

@ -23,9 +23,12 @@ namespace tests {
// clear state // clear state
this.reset(); this.reset();
console.log(`# ${this.name}`) console.log(`> ${this.name}`)
this.handler() this.handler()
if (this.errors.length)
console.log('')
// ensure clean state after test // ensure clean state after test
this.reset(); this.reset();
} }
@ -39,13 +42,15 @@ namespace tests {
const start = control.millis(); const start = control.millis();
console.sendToScreen(); console.sendToScreen();
console.log(`${_tests.length} tests`) console.log(`${_tests.length} tests found`)
console.log(` `)
for (let i = 0; i < _tests.length; ++i) { for (let i = 0; i < _tests.length; ++i) {
const t = _currentTest = _tests[i]; const t = _currentTest = _tests[i];
t.run(); t.run();
_currentTest = undefined; _currentTest = undefined;
} }
console.log(`${_tests.map(t => t.errors.length).reduce((p, c) => p + c, 0)} X, ${Math.ceil((control.millis() - start) / 1000)}s`) console.log(` `)
console.log(`${_tests.length} tests, ${_tests.map(t => t.errors.length).reduce((p, c) => p + c, 0)} errs in ${Math.ceil((control.millis() - start) / 1000)}s`)
} }
/** /**
@ -71,7 +76,7 @@ namespace tests {
//% blockId=testAssert block="assert %message|%condition" //% blockId=testAssert block="assert %message|%condition"
export function assert(message: string, condition: boolean) { export function assert(message: string, condition: boolean) {
if (!condition) { if (!condition) {
console.log(` X ${message || ''}`) console.log(`!!! ${message || ''}`)
if (_currentTest) if (_currentTest)
_currentTest.errors.push(message); _currentTest.errors.push(message);
} }

View File

@ -1,47 +1,42 @@
```typescript // add tests package
tests.test("lgB set speed 10", () => { tests.test("lgB set speed 10", () => {
motors.largeB.setSpeed(10); motors.largeB.setSpeed(10);
loops.pause(100) loops.pause(500)
tests.assertClose("speedB", 10, motors.largeB.speed(), 2) tests.assertClose("speedB", 10, motors.largeB.speed(), 2)
}); });
tests.test("lgB set speed 25 (reversed)", () => { tests.test("lgB set speed 25 (reversed)", () => {
motors.largeB.setReversed(true) motors.largeB.setReversed(true)
motors.largeB.setSpeed(25) motors.largeB.setSpeed(25)
loops.pause(100) loops.pause(500)
tests.assertClose("speedB", -25, motors.largeB.speed(), 2) tests.assertClose("speedB", -25, motors.largeB.speed(), 2)
}); });
tests.test("lgBC set speed 5", () => { tests.test("lgBC set speed 5", () => {
motors.largeBC.setSpeed(5) motors.largeBC.setSpeed(5)
loops.pause(100) loops.pause(500)
tests.assertClose("speedB", 5, motors.largeB.speed(), 1); tests.assertClose("speedB", 5, motors.largeB.speed(), 1);
tests.assertClose("speedC", 5, motors.largeC.speed(), 1); tests.assertClose("speedC", 5, motors.largeC.speed(), 1);
}); });
tests.test("lgBC steer 50% 2x", () => { tests.test("lgBC steer 50% 2x", () => {
motors.largeBC.setBrake(true) motors.largeBC.setBrake(true)
motors.largeBC.steer(50, 50, 1, MoveUnit.Rotations) motors.largeBC.steer(50, 50, 1, MoveUnit.Rotations)
loops.pause(1000) loops.pause(2000)
tests.assertClose("largeB", 360, motors.largeB.angle(), 5) tests.assertClose("largeB", 360, motors.largeB.angle(), 5)
motors.largeBC.setBrake(false) motors.largeBC.setBrake(false)
}) })
tests.test("lgBC steer 50% 500deg", () => { tests.test("lgBC steer 360deg", () => {
motors.largeBC.setBrake(true) motors.largeBC.setBrake(true)
motors.largeBC.steer(50, 50, 135, MoveUnit.Degrees) motors.largeBC.steer(50, 50, 360, MoveUnit.Degrees)
loops.pause(1000) loops.pause(2000)
tests.assertClose("largeB", 135, motors.largeB.angle(), 5) tests.assertClose("largeB", 360, motors.largeB.angle(), 5)
}); });
tests.test("lgBC steer 50% 2s", () => { tests.test("lgBC steer 50% 1s", () => {
motors.largeBC.setBrake(true) motors.largeBC.setBrake(true)
motors.largeBC.steer(50, 50, 500, MoveUnit.MilliSeconds) motors.largeBC.steer(10, 50, 1000, MoveUnit.MilliSeconds)
loops.pause(1000) loops.pause(2000)
}) })
tests.test("lgBC tank 50% 720deg", () => { tests.test("lgBC tank 50% 180deg", () => {
motors.largeBC.setBrake(true) motors.largeBC.setBrake(true)
motors.largeBC.tank(50, 50, 180, MoveUnit.Degrees) motors.largeBC.tank(50, 50, 180, MoveUnit.Degrees)
loops.pause(1000) loops.pause(1000)
tests.assertClose("largeB", 180, motors.largeB.angle(), 5) tests.assertClose("largeB", 180, motors.largeB.angle(), 5)
}); });
```
```package
tests
```