initial commit
This commit is contained in:
83
node_modules/node-pid-controller/test/index.js
generated
vendored
Normal file
83
node_modules/node-pid-controller/test/index.js
generated
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var Controller = require('../')
|
||||
, should = require('should')
|
||||
, assert = require('assert')
|
||||
;
|
||||
|
||||
/**
|
||||
* Tests
|
||||
*/
|
||||
describe('pid-controller', function(){
|
||||
|
||||
var options = {
|
||||
k_p: 0.5,
|
||||
k_i: 0.1,
|
||||
k_d: 0.2,
|
||||
dt: 1
|
||||
};
|
||||
|
||||
// Create the controller
|
||||
var ctr = new Controller(options.k_p, options.k_i, options.k_d, options.dt);
|
||||
|
||||
it('should have set the coefficient', function() {
|
||||
ctr.k_p.should.equal(options.k_p);
|
||||
ctr.k_i.should.equal(options.k_i);
|
||||
ctr.k_d.should.equal(options.k_d);
|
||||
ctr.dt.should.equal(options.dt);
|
||||
});
|
||||
|
||||
it('should have set the coefficient from an options object', function(){
|
||||
var ctr = new Controller(options);
|
||||
|
||||
ctr.k_p.should.equal(options.k_p);
|
||||
ctr.k_i.should.equal(options.k_i);
|
||||
ctr.k_d.should.equal(options.k_d);
|
||||
ctr.dt.should.equal(options.dt);
|
||||
});
|
||||
|
||||
it('should set the target', function(){
|
||||
var v = 120; // 120km/h
|
||||
ctr.setTarget(v);
|
||||
ctr.target.should.equal(v);
|
||||
});
|
||||
|
||||
it('should return the correction', function(){
|
||||
var vt = 110; // current speed
|
||||
var correction = ctr.update(vt);
|
||||
correction.should.equal(8);
|
||||
});
|
||||
|
||||
it('should reset the controller', function(){
|
||||
ctr.reset();
|
||||
ctr.sumError.should.equal(0);
|
||||
ctr.lastError.should.equal(0);
|
||||
ctr.lastTime.should.equal(0);
|
||||
});
|
||||
|
||||
it('should return the correction for the given update interval', function(){
|
||||
ctr.dt = 2; // 2 seconds between updates
|
||||
var correction = ctr.update(115);
|
||||
correction.should.equal(4);
|
||||
ctr.dt = options.dt; // Reset dt
|
||||
});
|
||||
|
||||
it('should return the correction with sumError <= i_max', function() {
|
||||
var ctr = new Controller(options);
|
||||
ctr.i_max = 5; // sumError will be 10
|
||||
ctr.setTarget(120);
|
||||
var correction = ctr.update(110);
|
||||
correction.should.equal(7.5);
|
||||
ctr.sumError.should.be.belowOrEqual(ctr.i_max);
|
||||
});
|
||||
|
||||
it('should return a null correction', function(){
|
||||
var ctr = new Controller(0, 0, 0);
|
||||
ctr.setTarget(120);
|
||||
var correction = ctr.update(110);
|
||||
correction.should.equal(0);
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user