fix undefined-behavior src/pid_fuzzy.c:119:25
[liba.git] / javascript / test / pid_fuzzy.js
blobee805439e124f95cc4064ee88a6585859e71cbc1
1 #!/usr/bin/env node
2 var liba = require("../liba");
3 function assert(expr) {
4     if (!eval(expr)) {
5         throw Error(expr);
6     }
8 function do_leak_check() {
9     for (const arg of arguments) {
10         arg.delete();
11     }
12     if (liba.do_leak_check) {
13         liba.do_leak_check();
14     }
16 var NL = -3;
17 var NM = -2;
18 var NS = -1;
19 var ZO = 0;
20 var PS = +1;
21 var PM = +2;
22 var PL = +3;
23 var me = [
24     [liba.mf.TRI, NL, NL, NM],
25     [liba.mf.TRI, NL, NM, NS],
26     [liba.mf.TRI, NM, NS, ZO],
27     [liba.mf.TRI, NS, ZO, PS],
28     [liba.mf.TRI, ZO, PS, PM],
29     [liba.mf.TRI, PS, PM, PL],
30     [liba.mf.TRI, PM, PL, PL],
32 var NL = -6;
33 var NM = -4;
34 var NS = -2;
35 var ZO = 0;
36 var PS = +2;
37 var PM = +4;
38 var PL = +6;
39 var mec = [
40     [liba.mf.TRI, NL, NL, NM],
41     [liba.mf.TRI, NL, NM, NS],
42     [liba.mf.TRI, NM, NS, ZO],
43     [liba.mf.TRI, NS, ZO, PS],
44     [liba.mf.TRI, ZO, PS, PM],
45     [liba.mf.TRI, PS, PM, PL],
46     [liba.mf.TRI, PM, PL, PL],
48 var NL = -15;
49 var NM = -10;
50 var NS = -5;
51 var ZO = 0;
52 var PS = +5;
53 var PM = +10;
54 var PL = +15;
55 var mkp = [
56     [NL, NL, NM, NM, NS, ZO, ZO],
57     [NL, NL, NM, NS, NS, ZO, PS],
58     [NM, NM, NM, NS, ZO, PS, PS],
59     [NM, NM, NS, ZO, PS, PM, PM],
60     [NS, NS, ZO, PS, PS, PM, PM],
61     [NS, ZO, PS, PM, PM, PM, PL],
62     [ZO, ZO, PM, PM, PM, PL, PL],
64 var NL = -3;
65 var NM = -2;
66 var NS = -1;
67 var ZO = 0;
68 var PS = +1;
69 var PM = +2;
70 var PL = +3;
71 var mki = [
72     [PL, PL, PM, PM, PS, ZO, ZO],
73     [PL, PL, PM, PS, PS, ZO, ZO],
74     [PL, PM, PS, PS, ZO, NS, NS],
75     [PM, PM, PS, ZO, NS, NM, NM],
76     [PM, PS, ZO, NS, NS, NM, NL],
77     [ZO, ZO, NS, NS, NM, NL, NL],
78     [ZO, ZO, NS, NM, NM, NL, NL],
80 var mkd = [
81     [NS, PS, PL, PL, PL, PM, NS],
82     [NS, PS, PL, PM, PM, PS, ZO],
83     [ZO, PS, PM, PM, PS, PS, ZO],
84     [ZO, PS, PS, PS, PS, PS, ZO],
85     [ZO, ZO, ZO, ZO, ZO, ZO, ZO],
86     [NL, NS, NS, NS, NS, NS, NL],
87     [NL, NM, NM, NM, NS, NS, NL],
89 var ctx = new liba.pid_fuzzy();
90 ctx.rule(me, mec, mkp, mki, mkd).set_block(2);
91 ctx.kpid(10, 0.1, 1).op(liba.pid_fuzzy.EQU);
92 console.log(ctx.zero().run(10, 0));
93 console.log(ctx.zero().pos(10, 0));
94 console.log(ctx.zero().inc(10, 0));
95 assert("ctx.kp != undefined");
96 assert("ctx.ki != undefined");
97 assert("ctx.kd != undefined");
98 assert("ctx.summax != undefined");
99 assert("ctx.summin != undefined");
100 assert("ctx.sum != undefined");
101 assert("ctx.outmax != undefined");
102 assert("ctx.outmin != undefined");
103 assert("ctx.out != undefined");
104 assert("ctx.fdb != undefined");
105 assert("ctx.err != undefined");
106 assert("ctx.order != undefined");
107 assert("ctx.block != undefined");
108 ctx.kp = 0;
109 ctx.ki = 0;
110 ctx.kd = 0;
111 ctx.summax = 0;
112 ctx.summin = 0;
113 ctx.outmax = 0;
114 ctx.outmin = 0;
115 ctx.block = 0;
116 do_leak_check(ctx);