@machinemetrics/io-adapter-lib 2.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.circleci/config.yml +141 -0
- package/.eslintrc.json +36 -0
- package/.gitattributes +12 -0
- package/CHANGELOG.md +544 -0
- package/README.md +2 -0
- package/index.js +17 -0
- package/lib/config/adapterConfig.js +535 -0
- package/lib/config/common/allowDenyList.js +58 -0
- package/lib/config/common/jsonPath.js +44 -0
- package/lib/config/common/labjackU3T4Common.js +227 -0
- package/lib/config/common/validations.js +142 -0
- package/lib/config/configError.js +32 -0
- package/lib/config/device/adam-6052Config.js +103 -0
- package/lib/config/device/brotherHTTPConfig.js +215 -0
- package/lib/config/device/ethernetIPConfig.js +191 -0
- package/lib/config/device/ifmIotConfig.js +245 -0
- package/lib/config/device/jsonHttpConfig.js +76 -0
- package/lib/config/device/labjackT4Config.js +39 -0
- package/lib/config/device/labjackT7Config.js +192 -0
- package/lib/config/device/labjackU3Config.js +32 -0
- package/lib/config/device/modbusTcpConfig.js +336 -0
- package/lib/config/device/mqttBaseConfig.js +70 -0
- package/lib/config/device/mqttConfig.js +113 -0
- package/lib/config/device/mqttLincolnConfig.js +62 -0
- package/lib/config/device/mtconnectAdapterConfig.js +42 -0
- package/lib/config/device/mtconnectBaseConfig.js +136 -0
- package/lib/config/device/mtconnectConfig.js +52 -0
- package/lib/config/device/mtconnectHaasConfig.js +15 -0
- package/lib/config/device/nullConfig.js +81 -0
- package/lib/config/device/opcuaConfig.js +205 -0
- package/lib/config/device/pcccConfig.js +88 -0
- package/lib/config/engineConfigV1.js +382 -0
- package/lib/config/engineConfigV2.js +106 -0
- package/lib/config/generator/counterGenConfig.js +15 -0
- package/lib/config/generator/cronGenConfig.js +33 -0
- package/lib/config/generator/dateTimeGenConfig.js +33 -0
- package/lib/config/index.js +339 -0
- package/lib/config/transformConfigUtil.js +296 -0
- package/lib/engine/dataOutput.js +357 -0
- package/lib/engine/deviceOutput.js +186 -0
- package/lib/engine/engineV1.js +480 -0
- package/lib/engine/engineV2.js +719 -0
- package/lib/engine/index.js +34 -0
- package/lib/engine/transformBuilderV1.js +111 -0
- package/lib/engine/transformBuilderV2.js +74 -0
- package/lib/expressionService.js +330 -0
- package/lib/math.js +142 -0
- package/lib/transform/accumulate.js +98 -0
- package/lib/transform/average.js +56 -0
- package/lib/transform/debounce.js +152 -0
- package/lib/transform/downsample.js +69 -0
- package/lib/transform/edge.js +34 -0
- package/lib/transform/expression.js +91 -0
- package/lib/transform/fallingEdge.js +70 -0
- package/lib/transform/fromBuffer.js +89 -0
- package/lib/transform/hash.js +41 -0
- package/lib/transform/ignoreValue.js +118 -0
- package/lib/transform/index.js +93 -0
- package/lib/transform/invert.js +25 -0
- package/lib/transform/latch.js +99 -0
- package/lib/transform/latchValue.js +115 -0
- package/lib/transform/logicAnd.js +67 -0
- package/lib/transform/logicOr.js +67 -0
- package/lib/transform/map.js +115 -0
- package/lib/transform/max.js +57 -0
- package/lib/transform/maxLength.js +39 -0
- package/lib/transform/min.js +57 -0
- package/lib/transform/minDelta.js +40 -0
- package/lib/transform/offDelay.js +89 -0
- package/lib/transform/onDelay.js +89 -0
- package/lib/transform/patternEscape.js +24 -0
- package/lib/transform/patternMatch.js +194 -0
- package/lib/transform/patternReplace.js +170 -0
- package/lib/transform/patternTest.js +85 -0
- package/lib/transform/rateOfChange.js +56 -0
- package/lib/transform/reject.js +115 -0
- package/lib/transform/resample.js +96 -0
- package/lib/transform/risingEdge.js +90 -0
- package/lib/transform/risingEdgeCounter.js +179 -0
- package/lib/transform/sampleInterval.js +12 -0
- package/lib/transform/source.js +116 -0
- package/lib/transform/state.js +201 -0
- package/lib/transform/threshold.js +52 -0
- package/lib/transform/toBuffer.js +159 -0
- package/lib/transform/toggle.js +118 -0
- package/lib/transform/transformState.js +193 -0
- package/lib/transform/trim.js +27 -0
- package/lib/transform/util/chainSource.js +96 -0
- package/lib/transform/util/ringBuffer.js +34 -0
- package/lib/transform/valueChange.js +34 -0
- package/lib/transform/valueDecrease.js +38 -0
- package/lib/transform/valueIncrease.js +38 -0
- package/lib/transform/valueIncreaseDiff.js +66 -0
- package/lib/transform/whenUnavailable.js +73 -0
- package/lib/transform/windowCount.js +86 -0
- package/lib/util/fileUtil.js +44 -0
- package/package.json +38 -0
- package/test/.eslintrc.json +15 -0
- package/test/chainedTransform.test.js +88 -0
- package/test/conditions.test.js +118 -0
- package/test/config/ab-pccc.test.js +41 -0
- package/test/config/adam-6052.test.js +16 -0
- package/test/config/adapter.test.js +109 -0
- package/test/config/brother-http.test.js +19 -0
- package/test/config/ethernet-ip.test.js +19 -0
- package/test/config/ifm-iot.test.js +20 -0
- package/test/config/json-http.test.js +47 -0
- package/test/config/labjack-t4.test.js +78 -0
- package/test/config/labjack-t7.test.js +18 -0
- package/test/config/labjack-u3.test.js +17 -0
- package/test/config/modbusTcp.test.js +87 -0
- package/test/config/mqtt.test.js +19 -0
- package/test/config/mqttLincoln.test.js +29 -0
- package/test/config/mtconnect.test.js +63 -0
- package/test/config/mtconnectAdapter.test.js +124 -0
- package/test/config/mtconnectHaas.test.js +15 -0
- package/test/config/null.test.js +16 -0
- package/test/config/opcua.test.js +97 -0
- package/test/config-tests.js +102 -0
- package/test/configFiles/conditions.yml +37 -0
- package/test/configFiles/data-items-legacy.yml +24 -0
- package/test/configFiles/data-items-shorthand.yml +14 -0
- package/test/configFiles/data-items.yml +12 -0
- package/test/configFiles/device/ab-pccc-default.yml +3 -0
- package/test/configFiles/device/ab-pccc-full.yml +13 -0
- package/test/configFiles/device/adam-6052-default.yml +2 -0
- package/test/configFiles/device/brother-http-default.yml +3 -0
- package/test/configFiles/device/ethernet-ip-default.yml +2 -0
- package/test/configFiles/device/ifm-iot-default.yml +2 -0
- package/test/configFiles/device/json-http-bad-prop.yml +13 -0
- package/test/configFiles/device/json-http-bad-prop2.yml +13 -0
- package/test/configFiles/device/json-http-default.yml +3 -0
- package/test/configFiles/device/json-http-std.yml +13 -0
- package/test/configFiles/device/labjack-t4-condition-exprs.yaml +46 -0
- package/test/configFiles/device/labjack-t4-default.yml +3 -0
- package/test/configFiles/device/labjack-t4-pins-alt.yaml +41 -0
- package/test/configFiles/device/labjack-t4-pins.yaml +40 -0
- package/test/configFiles/device/labjack-t4-v1.yaml +29 -0
- package/test/configFiles/device/labjack-t7-default.yml +2 -0
- package/test/configFiles/device/labjack-u3-default.yml +2 -0
- package/test/configFiles/device/modbus-partial.yml +4 -0
- package/test/configFiles/device/modbus-std-extended.yaml +23 -0
- package/test/configFiles/device/modbus-std.yaml +34 -0
- package/test/configFiles/device/modbus-tcp-default.yml +3 -0
- package/test/configFiles/device/mqtt-default.yml +2 -0
- package/test/configFiles/device/mqtt-lincoln-default.yml +3 -0
- package/test/configFiles/device/mqtt-lincoln-full.yml +7 -0
- package/test/configFiles/device/mtconnect-adapter-default.yml +3 -0
- package/test/configFiles/device/mtconnect-adapter-keys.yaml +18 -0
- package/test/configFiles/device/mtconnect-complex-keys.yaml +17 -0
- package/test/configFiles/device/mtconnect-default.yml +3 -0
- package/test/configFiles/device/mtconnect-duplicate-allow-keys.yaml +10 -0
- package/test/configFiles/device/mtconnect-duplicate-declare-keys.yaml +8 -0
- package/test/configFiles/device/mtconnect-duplicate-deny-keys.yaml +10 -0
- package/test/configFiles/device/mtconnect-haas-default.yml +3 -0
- package/test/configFiles/device/mtconnect-std.yaml +18 -0
- package/test/configFiles/device/null-default.yml +1 -0
- package/test/configFiles/device/opcua-bad-tag.yml +18 -0
- package/test/configFiles/device/opcua-bad-tag2.yml +18 -0
- package/test/configFiles/device/opcua-default.yml +3 -0
- package/test/configFiles/device/opcua-std.yml +18 -0
- package/test/configFiles/dump-test.yml +11 -0
- package/test/configFiles/expressionCond.yml +46 -0
- package/test/configFiles/min-config-t4.yaml +4 -0
- package/test/configFiles/min-config-u3.yaml +3 -0
- package/test/configFiles/missing-device.yaml +2 -0
- package/test/configFiles/parse-error1.yml +9 -0
- package/test/configFiles/parse-error2.yml +9 -0
- package/test/configFiles/repro/buffer-convert-repro.yml +15 -0
- package/test/configFiles/repro/chained-delay-timing-repro.yml +13 -0
- package/test/configFiles/repro/count-init-repro.yml +45 -0
- package/test/configFiles/repro/cycle-break-repro.yml +44 -0
- package/test/configFiles/repro/debounce-repro.yml +46 -0
- package/test/configFiles/repro/diff-count-repro.yml +34 -0
- package/test/configFiles/repro/engine-hang-repro.yml +9 -0
- package/test/configFiles/repro/latch-apm-repro.yml +26 -0
- package/test/configFiles/repro/lockout-count-repro.yml +33 -0
- package/test/configFiles/repro/program-extract-repro.yml +38 -0
- package/test/configFiles/repro/state-latch-repro.yml +47 -0
- package/test/configFiles/repro/ternary-repro.yml +26 -0
- package/test/configFiles/transform/debounce.yml +12 -0
- package/test/configFiles/transform/expression.yml +34 -0
- package/test/configFiles/transform/ignoreValue.yml +31 -0
- package/test/configFiles/transform/latch.yml +11 -0
- package/test/configFiles/transform/latchValue.yml +31 -0
- package/test/configFiles/transform/logicAnd.yml +14 -0
- package/test/configFiles/transform/logicOr.yml +14 -0
- package/test/configFiles/transform/map.yml +19 -0
- package/test/configFiles/transform/maxLength.yml +13 -0
- package/test/configFiles/transform/offDelay.yml +12 -0
- package/test/configFiles/transform/pattern-escape.yml +10 -0
- package/test/configFiles/transform/pattern-match.yml +57 -0
- package/test/configFiles/transform/pattern-replace.yml +34 -0
- package/test/configFiles/transform/pattern-test.yml +25 -0
- package/test/configFiles/transform/reject.yml +24 -0
- package/test/configFiles/transform/risingEdgeCounter.yml +36 -0
- package/test/configFiles/transform/source.yml +20 -0
- package/test/configFiles/transform/state.yml +56 -0
- package/test/configFiles/transform/toggle.yml +19 -0
- package/test/configFiles/transform/whenUnavailable.yml +19 -0
- package/test/dataFiles/noisy-pulse.txt +11330 -0
- package/test/dataItems.test.js +140 -0
- package/test/engine-v1-tests.js +418 -0
- package/test/engine-v2-tests.js +284 -0
- package/test/expression-tests.js +171 -0
- package/test/expressionService.test.js +154 -0
- package/test/expressionServiceCondition.test.js +130 -0
- package/test/repro/buffer-convert-repro.test.js +38 -0
- package/test/repro/chained-delay-timing-repro.test.js +34 -0
- package/test/repro/count-init-repro.test.js +46 -0
- package/test/repro/cylce-break-repro.test.js +57 -0
- package/test/repro/debounce-repro.test.js +65 -0
- package/test/repro/diff-count-repro.test.js +79 -0
- package/test/repro/engine-hang-repro.test.js +38 -0
- package/test/repro/latch-apm-repro.test.js +119 -0
- package/test/repro/lockout-count-repro.test.js +84 -0
- package/test/repro/program-extract-repro.test.js +40 -0
- package/test/repro/state-latch-repro.test.js +63 -0
- package/test/repro/ternary-repro.test.js +43 -0
- package/test/transform/accumulte.test.js +18 -0
- package/test/transform/average.test.js +22 -0
- package/test/transform/debounce.test.js +70 -0
- package/test/transform/downsample.test.js +30 -0
- package/test/transform/edge.test.js +27 -0
- package/test/transform/expression.test.js +189 -0
- package/test/transform/fallingEdge.test.js +59 -0
- package/test/transform/fromBuffer.test.js +60 -0
- package/test/transform/hash.test.js +34 -0
- package/test/transform/ignoreValue.test.js +123 -0
- package/test/transform/invert.test.js +26 -0
- package/test/transform/latch.test.js +33 -0
- package/test/transform/latchValue.test.js +126 -0
- package/test/transform/logicAnd.test.js +80 -0
- package/test/transform/logicOr.test.js +80 -0
- package/test/transform/map.test.js +42 -0
- package/test/transform/max.test.js +30 -0
- package/test/transform/maxLength.test.js +32 -0
- package/test/transform/min.test.js +30 -0
- package/test/transform/minDelta.test.js +14 -0
- package/test/transform/offDelay.test.js +123 -0
- package/test/transform/onDelay.test.js +105 -0
- package/test/transform/patternEscape.test.js +18 -0
- package/test/transform/patternMatch.test.js +177 -0
- package/test/transform/patternReplace.test.js +95 -0
- package/test/transform/patternTest.test.js +105 -0
- package/test/transform/rateOfChange.test.js +34 -0
- package/test/transform/reject.test.js +56 -0
- package/test/transform/resample.test.js +193 -0
- package/test/transform/risingEdge.test.js +60 -0
- package/test/transform/risingEdgeCounter.test.js +227 -0
- package/test/transform/sampleInterval.test.js +22 -0
- package/test/transform/source.test.js +137 -0
- package/test/transform/state.test.js +248 -0
- package/test/transform/threshold.test.js +78 -0
- package/test/transform/toBuffer.test.js +60 -0
- package/test/transform/toggle.test.js +92 -0
- package/test/transform/trim.test.js +30 -0
- package/test/transform/valueChange.test.js +14 -0
- package/test/transform/valueDecrease.test.js +32 -0
- package/test/transform/valueIncrease.test.js +32 -0
- package/test/transform/valueIncreaseDiff.test.js +32 -0
- package/test/transform/whenUnavailable.test.js +93 -0
- package/test/transform/windowCount.test.js +26 -0
- package/test/util/testUtils.js +405 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const RateOfChange = require('../../lib/transform').rateOfChange;
|
|
4
|
+
const testUtils = require('../util/testUtils');
|
|
5
|
+
|
|
6
|
+
describe('rate of change transform tests', function () {
|
|
7
|
+
it('rate of change regular 1', function () {
|
|
8
|
+
const filter = new RateOfChange();
|
|
9
|
+
testUtils.attachTransformValidator(filter);
|
|
10
|
+
|
|
11
|
+
filter.testAnalog([1, 3, 5, 5, 0, -5, 0], 1);
|
|
12
|
+
filter.valdAnalog([0, 2, 2, 0, -5, -5, 5], 1);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('rate of change regular 2', function () {
|
|
16
|
+
const filter = new RateOfChange();
|
|
17
|
+
testUtils.attachTransformValidator(filter);
|
|
18
|
+
|
|
19
|
+
filter.testAnalog([1, 3, 5, 5, 0, -5, 0], 0.1);
|
|
20
|
+
filter.valdAnalog([0, 20, 20, 0, -50, -50, 50], 0.1, 0);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('rate of change irregular', function () {
|
|
24
|
+
const filter = new RateOfChange();
|
|
25
|
+
testUtils.attachTransformValidator(filter);
|
|
26
|
+
|
|
27
|
+
filter.test([
|
|
28
|
+
[1, 2], [3, 4], [5, 6], [0, 10], [20, 14], [2, 15], [2, 16], [8, 21],
|
|
29
|
+
]);
|
|
30
|
+
filter.validate([
|
|
31
|
+
[0, 2], [1, 4], [1, 6], [-1.25, 10], [5, 14], [-18, 15], [0, 16], [1.2, 21],
|
|
32
|
+
]);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Reject = require('../../lib/transform').reject;
|
|
4
|
+
const EngineV2 = require('../../lib/engine/engineV2');
|
|
5
|
+
const testUtils = require('../util/testUtils');
|
|
6
|
+
|
|
7
|
+
describe('reject config file tests', async function () {
|
|
8
|
+
let config;
|
|
9
|
+
before(async () => {
|
|
10
|
+
config = await testUtils.loadConfig('transform/reject.yml');
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const setupFilter = (transform) => {
|
|
14
|
+
const engine = new EngineV2(config);
|
|
15
|
+
return new Reject({
|
|
16
|
+
engine,
|
|
17
|
+
path: transform.path,
|
|
18
|
+
args: transform.args,
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
it('rejects simple string', async function () {
|
|
23
|
+
const filter = setupFilter(config.engine.variables.test1.transform[1]);
|
|
24
|
+
|
|
25
|
+
await testUtils.testValue(filter, ['prog1', 'warmup', 'prog2'], ['prog1', 'prog2']);
|
|
26
|
+
await testUtils.testValue(filter, ['warmup'], []);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('rejects empty string', async function () {
|
|
30
|
+
const filter = setupFilter(config.engine.variables.test2.transform[1]);
|
|
31
|
+
|
|
32
|
+
await testUtils.testValue(filter, ['prog1', '', 'prog2'], ['prog1', 'prog2']);
|
|
33
|
+
await testUtils.testValue(filter, ['', '', ''], []);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('rejects null', async function () {
|
|
37
|
+
const filter = setupFilter(config.engine.variables.test3.transform[1]);
|
|
38
|
+
|
|
39
|
+
await testUtils.testValue(filter, ['prog1', null, 'prog2'], ['prog1', 'prog2']);
|
|
40
|
+
await testUtils.testValue(filter, ['prog1', '', null], ['prog1', '']);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('rejects pattern', async function () {
|
|
44
|
+
const filter = setupFilter(config.engine.variables.test4.transform[1]);
|
|
45
|
+
|
|
46
|
+
await testUtils.testValue(filter, ['prog1', 'warmup', 'prog2', 'warmup20'], ['prog1', 'prog2']);
|
|
47
|
+
await testUtils.testValue(filter, ['warm', 'warmup3'], ['warm']);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('rejects expression', async function () {
|
|
51
|
+
const filter = setupFilter(config.engine.variables.test5.transform[1]);
|
|
52
|
+
|
|
53
|
+
await testUtils.testValue(filter, ['prog1', 'warmup', 'prog2', 'warmup20'], ['prog1', 'prog2', 'warmup20']);
|
|
54
|
+
await testUtils.testValue(filter, ['warm', 'warmup3'], ['warm', 'warmup3']);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const expect = require('chai').expect;
|
|
4
|
+
const Source = require('../../lib/transform').source;
|
|
5
|
+
const Resample = require('../../lib/transform').resample;
|
|
6
|
+
const EngineV2 = require('../../lib/engine/engineV2');
|
|
7
|
+
const ExpressionService = require('../../lib/expressionService');
|
|
8
|
+
const testUtils = require('../util/testUtils');
|
|
9
|
+
|
|
10
|
+
describe('resample transform tests', function () {
|
|
11
|
+
it('resample identity', function () {
|
|
12
|
+
const filter = new Resample({ interval: 1 });
|
|
13
|
+
testUtils.attachTransformValidator(filter);
|
|
14
|
+
|
|
15
|
+
filter.testAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 1);
|
|
16
|
+
filter.valdAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 1);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('resample down 2', function () {
|
|
20
|
+
const filter = new Resample({ interval: 2 });
|
|
21
|
+
testUtils.attachTransformValidator(filter);
|
|
22
|
+
|
|
23
|
+
filter.testAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 1);
|
|
24
|
+
filter.valdAnalog([1, 5, 9, 4, 8], 2, 0);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('resample down 2 offset 1', function () {
|
|
28
|
+
const filter = new Resample({ interval: 2 });
|
|
29
|
+
testUtils.attachTransformValidator(filter);
|
|
30
|
+
|
|
31
|
+
filter.testAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 1, 1);
|
|
32
|
+
filter.valdAnalog([1, 5, 9, 4, 8], 2, 1);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('resample down 2.25', function () {
|
|
36
|
+
// Without an engine to honor pending change times, this is equivalent to interval: 3
|
|
37
|
+
// when fed uniform samples at a rate of 1
|
|
38
|
+
const filter = new Resample({ interval: 2.25 });
|
|
39
|
+
testUtils.attachTransformValidator(filter);
|
|
40
|
+
|
|
41
|
+
filter.testAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 1);
|
|
42
|
+
filter.valdAnalog([1, 7, 4, 0], 3, 0);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('resample down 3', function () {
|
|
46
|
+
const filter = new Resample({ interval: 3 });
|
|
47
|
+
testUtils.attachTransformValidator(filter);
|
|
48
|
+
|
|
49
|
+
filter.testAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 1);
|
|
50
|
+
filter.valdAnalog([1, 7, 4, 0], 3, 0);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('resample down 3 offset 1', function () {
|
|
54
|
+
const filter = new Resample({ interval: 3 });
|
|
55
|
+
testUtils.attachTransformValidator(filter);
|
|
56
|
+
|
|
57
|
+
filter.testAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 1, 1);
|
|
58
|
+
filter.valdAnalog([1, 7, 4, 0], 3, 1);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('resample up 2', function () {
|
|
62
|
+
// Without an engine to honor pending change times, it's generally not possible to upsample
|
|
63
|
+
const filter = new Resample({ interval: 0.5 });
|
|
64
|
+
testUtils.attachTransformValidator(filter);
|
|
65
|
+
|
|
66
|
+
filter.testAnalog([1, 3, 5, 7, 9, 2], 1);
|
|
67
|
+
filter.valdAnalog([1, 3, 5, 7, 9, 2], 1, 0);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('resample down 2 irregular', function () {
|
|
71
|
+
const filter = new Resample({ interval: 2 });
|
|
72
|
+
testUtils.attachTransformValidator(filter);
|
|
73
|
+
|
|
74
|
+
filter.test([
|
|
75
|
+
[1, 0], [3, 1], [5, 2], [7, 31], [9, 32],
|
|
76
|
+
]);
|
|
77
|
+
filter.validate([
|
|
78
|
+
[1, 0], [5, 2], [7, 31],
|
|
79
|
+
]);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('supports pending change', function () {
|
|
83
|
+
const filter = new Resample({ interval: 2.25 });
|
|
84
|
+
expect(filter.supportsPendingChanges()).to.eq(true);
|
|
85
|
+
expect(filter.nextPendingChange()).to.eq(null);
|
|
86
|
+
|
|
87
|
+
const context = { sourceType: 'test', trigger: 'test' };
|
|
88
|
+
|
|
89
|
+
filter.update(context, 10, 1);
|
|
90
|
+
expect(filter.nextPendingChange()).to.eq(3.25);
|
|
91
|
+
filter.update(context, 15, 2);
|
|
92
|
+
expect(filter.nextPendingChange()).to.eq(3.25);
|
|
93
|
+
filter.update(context, 20, 3.25);
|
|
94
|
+
expect(filter.nextPendingChange()).to.eq(5.5);
|
|
95
|
+
filter.update(context, 25, 7);
|
|
96
|
+
expect(filter.nextPendingChange()).to.eq(9.25);
|
|
97
|
+
|
|
98
|
+
filter.setUnavailable(context);
|
|
99
|
+
expect(filter.nextPendingChange()).to.eq(null);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe('resample transform engine tests', function () {
|
|
104
|
+
it('resample down 2.25', function () {
|
|
105
|
+
const exprsvc = new ExpressionService();
|
|
106
|
+
const engine = new EngineV2({ expressionService: exprsvc });
|
|
107
|
+
|
|
108
|
+
exprsvc.addName({ name: 'pin-1', defaultValue: 0, channel: 'device' });
|
|
109
|
+
exprsvc.addExpression({ expression: 'pin-1', path: 'test1' });
|
|
110
|
+
|
|
111
|
+
const filter = new Source({
|
|
112
|
+
engine,
|
|
113
|
+
path: 'test1',
|
|
114
|
+
baseTransform: true,
|
|
115
|
+
args: {
|
|
116
|
+
expression: 'pin-1',
|
|
117
|
+
},
|
|
118
|
+
}).chain(new Resample({ interval: 2.25 }));
|
|
119
|
+
engine.addVariable('res', filter);
|
|
120
|
+
|
|
121
|
+
testUtils.attachEngineTransformValidator(engine, filter);
|
|
122
|
+
|
|
123
|
+
engine.test([
|
|
124
|
+
[1, 1], [3, 2], [5, 3], [7, 4], [9, 5], [2, 6], [4, 7], [6, 8], [8, 9], [0, 10],
|
|
125
|
+
]);
|
|
126
|
+
engine.validateFilter([
|
|
127
|
+
[1, 1], [5, 3.25], [9, 5.5], [4, 7.75], [0, 10],
|
|
128
|
+
]);
|
|
129
|
+
engine.validateEngine('res', [
|
|
130
|
+
[1, 1], [5, 3.25], [9, 5.5], [4, 7.75], [0, 10],
|
|
131
|
+
]);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('resample up 2', function () {
|
|
135
|
+
const exprsvc = new ExpressionService();
|
|
136
|
+
const engine = new EngineV2({ expressionService: exprsvc });
|
|
137
|
+
|
|
138
|
+
exprsvc.addName({ name: 'pin-1', defaultValue: 0, channel: 'device' });
|
|
139
|
+
exprsvc.addExpression({ expression: 'pin-1', path: 'test1' });
|
|
140
|
+
|
|
141
|
+
const filter = new Source({
|
|
142
|
+
engine,
|
|
143
|
+
path: 'test1',
|
|
144
|
+
baseTransform: true,
|
|
145
|
+
args: {
|
|
146
|
+
expression: 'pin-1',
|
|
147
|
+
},
|
|
148
|
+
}).chain(new Resample({ interval: 0.5 }));
|
|
149
|
+
engine.addVariable('res', filter);
|
|
150
|
+
|
|
151
|
+
testUtils.attachEngineTransformValidator(engine, filter);
|
|
152
|
+
|
|
153
|
+
engine.test([
|
|
154
|
+
[1, 1], [3, 2], [5, 3], [7, 4], [9, 5],
|
|
155
|
+
]);
|
|
156
|
+
engine.validateFilter([
|
|
157
|
+
[1, 1], [1, 1.5], [3, 2], [3, 2.5], [5, 3], [5, 3.5], [7, 4], [7, 4.5], [9, 5],
|
|
158
|
+
]);
|
|
159
|
+
engine.validateEngine('res', [
|
|
160
|
+
[1, 1], [3, 2], [5, 3], [7, 4], [9, 5],
|
|
161
|
+
]);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('resample up 2 safety limit', function () {
|
|
165
|
+
const exprsvc = new ExpressionService();
|
|
166
|
+
const engine = new EngineV2({ expressionService: exprsvc });
|
|
167
|
+
|
|
168
|
+
exprsvc.addName({ name: 'pin-1', defaultValue: 0, channel: 'device' });
|
|
169
|
+
exprsvc.addExpression({ expression: 'pin-1', path: 'test1' });
|
|
170
|
+
|
|
171
|
+
const filter = new Source({
|
|
172
|
+
engine,
|
|
173
|
+
path: 'test1',
|
|
174
|
+
baseTransform: true,
|
|
175
|
+
args: {
|
|
176
|
+
expression: 'pin-1',
|
|
177
|
+
},
|
|
178
|
+
}).chain(new Resample({ interval: 0.5 }));
|
|
179
|
+
engine.addVariable('res', filter);
|
|
180
|
+
|
|
181
|
+
testUtils.attachEngineTransformValidator(engine, filter);
|
|
182
|
+
|
|
183
|
+
engine.test([
|
|
184
|
+
[1, 1], [3, 2], [5, 4], [7, 400],
|
|
185
|
+
]);
|
|
186
|
+
engine.validateFilter([
|
|
187
|
+
[1, 1], [1, 1.5], [3, 2], [3, 2.5], [3, 3], [3, 3.5], [5, 4], [5, 399.5], [7, 400],
|
|
188
|
+
]);
|
|
189
|
+
engine.validateEngine('res', [
|
|
190
|
+
[1, 1], [3, 2], [5, 4], [7, 400],
|
|
191
|
+
]);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const RisingEdge = require('../../lib/transform').risingEdge;
|
|
4
|
+
const testUtils = require('../util/testUtils');
|
|
5
|
+
|
|
6
|
+
describe('rising-edge transform tests', function () {
|
|
7
|
+
it('rising-edge regular', function () {
|
|
8
|
+
const filter = new RisingEdge();
|
|
9
|
+
testUtils.attachTransformValidator(filter);
|
|
10
|
+
|
|
11
|
+
filter.testDigital('__^^__^^^^____^_^^^^^_', 1);
|
|
12
|
+
filter.valdDigital('__|___|_______|_|_____', 1);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('rising-edge regular high start', function () {
|
|
16
|
+
const filter = new RisingEdge();
|
|
17
|
+
testUtils.attachTransformValidator(filter);
|
|
18
|
+
|
|
19
|
+
filter.testDigital('^^^^__^^^^____^_^^^^^_', 1);
|
|
20
|
+
filter.valdDigital('______|_______|_|_____', 1);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('rising-edge irregular', function () {
|
|
24
|
+
const filter = new RisingEdge();
|
|
25
|
+
testUtils.attachTransformValidator(filter);
|
|
26
|
+
|
|
27
|
+
filter.test([
|
|
28
|
+
[true, 2], [false, 4], [true, 6], [false, 10], [true, 14], [false, 15], [true, 16], [false, 21],
|
|
29
|
+
]);
|
|
30
|
+
filter.validate([
|
|
31
|
+
[false, 2], [false, 4], [true, 6], [false, 6], [false, 10], [true, 14], [false, 14], [false, 15],
|
|
32
|
+
[true, 16], [false, 16], [false, 21],
|
|
33
|
+
]);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// NB: At start of stream, signal has been in low state for "infinite" time.
|
|
37
|
+
it('rising-edge regular min-dwell 3', function () {
|
|
38
|
+
const filter = new RisingEdge({ minDwell: 3 });
|
|
39
|
+
testUtils.attachTransformValidator(filter);
|
|
40
|
+
|
|
41
|
+
filter.testDigital('__^^__^^^^____^_^^^^^___^^^_', 1);
|
|
42
|
+
filter.valdDigital('__|___________|_________|___', 1);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('rising-edge regular max-dwell 3', function () {
|
|
46
|
+
const filter = new RisingEdge({ maxDwell: 3 });
|
|
47
|
+
testUtils.attachTransformValidator(filter);
|
|
48
|
+
|
|
49
|
+
filter.testDigital('__^^__^^^^____^_^^^^^___^^^_', 1);
|
|
50
|
+
filter.valdDigital('__|___|_________|_______|___', 1);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('rising-edge regular dwell 2 3', function () {
|
|
54
|
+
const filter = new RisingEdge({ minDwell: 2, maxDwell: 3 });
|
|
55
|
+
testUtils.attachTransformValidator(filter);
|
|
56
|
+
|
|
57
|
+
filter.testDigital('__^^__^^^^____^_^^^^^___^^^_', 1);
|
|
58
|
+
filter.valdDigital('__|___|_________________|___', 1);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { expect } = require('chai');
|
|
4
|
+
const RisingEdgeCounter = require('../../lib/transform').risingEdgeCounter;
|
|
5
|
+
const EngineV2 = require('../../lib/engine/engineV2');
|
|
6
|
+
const Builder = require('../../lib/engine/transformBuilderV2');
|
|
7
|
+
const testUtils = require('../util/testUtils');
|
|
8
|
+
|
|
9
|
+
describe('rising-edge-counter transform tests', function () {
|
|
10
|
+
it('rising-edge-counter regular', function () {
|
|
11
|
+
const filter = new RisingEdgeCounter(testUtils.standardBuilderArgs(null, 'test1'));
|
|
12
|
+
testUtils.attachTransformValidator(filter);
|
|
13
|
+
|
|
14
|
+
filter.testDigital('__^^__^^^^____^_^^^^^_', 1);
|
|
15
|
+
filter.valdCounter(' + + + + ', 1);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('rising-edge-counter regular high start', function () {
|
|
19
|
+
const filter = new RisingEdgeCounter(testUtils.standardBuilderArgs(null, 'test1'));
|
|
20
|
+
testUtils.attachTransformValidator(filter);
|
|
21
|
+
|
|
22
|
+
filter.testDigital('^^^^__^^^^____^_^^^^^_', 1);
|
|
23
|
+
filter.valdCounter(' + + + ', 1);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('rising-edge-counter irregular', function () {
|
|
27
|
+
const filter = new RisingEdgeCounter(testUtils.standardBuilderArgs(null, 'test1'));
|
|
28
|
+
testUtils.attachTransformValidator(filter);
|
|
29
|
+
|
|
30
|
+
filter.test([
|
|
31
|
+
[false, 0], [true, 2], [false, 4], [true, 6], [false, 10], [true, 14], [false, 15], [true, 16], [false, 21],
|
|
32
|
+
]);
|
|
33
|
+
filter.validate([
|
|
34
|
+
[0, 0], [1, 2], [1, 4], [2, 6], [2, 10], [3, 14], [3, 15], [4, 16], [4, 21],
|
|
35
|
+
]);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('rising-edge-counter irregular high start', function () {
|
|
39
|
+
const filter = new RisingEdgeCounter(testUtils.standardBuilderArgs(null, 'test1'));
|
|
40
|
+
testUtils.attachTransformValidator(filter);
|
|
41
|
+
|
|
42
|
+
filter.test([
|
|
43
|
+
[true, 2], [false, 4], [true, 6], [false, 10], [true, 14], [false, 15], [true, 16], [false, 21],
|
|
44
|
+
]);
|
|
45
|
+
filter.validate([
|
|
46
|
+
[0, 2], [0, 4], [1, 6], [1, 10], [2, 14], [2, 15], [3, 16], [3, 21],
|
|
47
|
+
]);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('rising-edge-counter pending change', function () {
|
|
51
|
+
const filter = new RisingEdgeCounter(testUtils.standardBuilderArgs(null, 'test1', { mergeWindow: 3 }));
|
|
52
|
+
expect(filter.supportsPendingChanges()).to.eq(true);
|
|
53
|
+
expect(filter.nextPendingChange()).to.eq(null);
|
|
54
|
+
|
|
55
|
+
const context = { sourceType: 'test', trigger: 'test' };
|
|
56
|
+
|
|
57
|
+
filter.update(context, false, 0);
|
|
58
|
+
filter.update(context, true, 1);
|
|
59
|
+
expect(filter.nextPendingChange()).to.eq(4);
|
|
60
|
+
|
|
61
|
+
filter.update(context, false, 0);
|
|
62
|
+
filter.update(context, true, 2);
|
|
63
|
+
expect(filter.nextPendingChange()).to.eq(5);
|
|
64
|
+
|
|
65
|
+
filter.update(context, false, 7);
|
|
66
|
+
expect(filter.nextPendingChange()).to.eq(null);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('rising-edge-counter merge-window', function () {
|
|
70
|
+
const filter = new RisingEdgeCounter(testUtils.standardBuilderArgs(null, 'test1', { mergeWindow: 3 }));
|
|
71
|
+
testUtils.attachTransformValidator(filter);
|
|
72
|
+
|
|
73
|
+
filter.test([
|
|
74
|
+
[false, 0], [true, 1], [false, 1], [true, 2], [false, 2], [true, 4], [false, 4], [true, 8], [false, 8],
|
|
75
|
+
]);
|
|
76
|
+
filter.validate([
|
|
77
|
+
[0, 0], [0, 1], [0, 1], [0, 2], [0, 2], [0, 4], [0, 4], [3, 8], [3, 8],
|
|
78
|
+
]);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('rising-edge-counter full engine config file tests', function () {
|
|
83
|
+
let config;
|
|
84
|
+
before(async () => {
|
|
85
|
+
config = await testUtils.loadConfig('transform/risingEdgeCounter.yml');
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('no reset expression', function () {
|
|
89
|
+
const engine = new EngineV2(config);
|
|
90
|
+
const builder = new Builder(config);
|
|
91
|
+
builder.build(engine);
|
|
92
|
+
|
|
93
|
+
const source = testUtils.valueSource();
|
|
94
|
+
testUtils.attachEngineTransformValidator(engine, engine.variablePool.var1, source);
|
|
95
|
+
|
|
96
|
+
source.sendValues('active', [[false, 0], [true, 2], [false, 4], [true, 6]]);
|
|
97
|
+
source.sendValues('active', [[false, 8], [true, 10], [false, 12], [true, 14]]);
|
|
98
|
+
|
|
99
|
+
engine.validateFilter([
|
|
100
|
+
[0, 0], [1, 2], [1, 4], [2, 6],
|
|
101
|
+
[2, 8], [3, 10], [3, 12], [4, 14],
|
|
102
|
+
]);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('reset expression referencing data source', function () {
|
|
106
|
+
const engine = new EngineV2(config);
|
|
107
|
+
const builder = new Builder(config);
|
|
108
|
+
builder.build(engine);
|
|
109
|
+
|
|
110
|
+
const source = testUtils.valueSource();
|
|
111
|
+
testUtils.attachEngineTransformValidator(engine, engine.variablePool.var2, source);
|
|
112
|
+
|
|
113
|
+
source.sendValues('active', [[false, 0], [true, 2], [false, 4], [true, 6]]);
|
|
114
|
+
source.sendValue('program', 5, 7);
|
|
115
|
+
source.sendValues('active', [[false, 8], [true, 10], [false, 12], [true, 14]]);
|
|
116
|
+
source.sendValue('program', 10, 15);
|
|
117
|
+
source.sendValues('active', [[false, 16], [true, 18], [false, 20], [true, 22]]);
|
|
118
|
+
source.sendValue('program', 5, 23);
|
|
119
|
+
source.sendValues('active', [[false, 24], [true, 26], [false, 28], [true, 30]]);
|
|
120
|
+
source.sendValue('program', 10, 31);
|
|
121
|
+
source.sendValue('program', 5, 32);
|
|
122
|
+
source.sendValues('active', [[false, 34], [true, 36], [false, 38], [true, 40]]);
|
|
123
|
+
|
|
124
|
+
engine.validateFilter([
|
|
125
|
+
[0, 0], [1, 2], [1, 4], [2, 6],
|
|
126
|
+
[2, 7],
|
|
127
|
+
[2, 8], [3, 10], [3, 12], [4, 14],
|
|
128
|
+
[0, 15],
|
|
129
|
+
[0, 16], [0, 18], [0, 20], [0, 22],
|
|
130
|
+
[0, 23],
|
|
131
|
+
[0, 24], [1, 26], [1, 28], [2, 30],
|
|
132
|
+
[0, 31],
|
|
133
|
+
[0, 32],
|
|
134
|
+
[0, 34], [1, 36], [1, 38], [2, 40],
|
|
135
|
+
]);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('reset condition referencing this', function () {
|
|
139
|
+
const engine = new EngineV2(config);
|
|
140
|
+
const builder = new Builder(config);
|
|
141
|
+
builder.build(engine);
|
|
142
|
+
|
|
143
|
+
const source = testUtils.valueSource();
|
|
144
|
+
testUtils.attachEngineTransformValidator(engine, engine.variablePool.var3, source);
|
|
145
|
+
|
|
146
|
+
source.sendValues('active', [[false, 0], [true, 2], [false, 4], [true, 6]]);
|
|
147
|
+
source.sendValues('active', [[false, 8], [true, 10], [false, 12], [true, 14]]);
|
|
148
|
+
|
|
149
|
+
engine.validateFilter([
|
|
150
|
+
[0, 0], [1, 2], [1, 4], [2, 6],
|
|
151
|
+
[2, 8], [0, 10], [0, 12], [1, 14],
|
|
152
|
+
]);
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it('count by expression', function () {
|
|
156
|
+
const engine = new EngineV2(config);
|
|
157
|
+
const builder = new Builder(config);
|
|
158
|
+
builder.build(engine);
|
|
159
|
+
|
|
160
|
+
const source = testUtils.valueSource();
|
|
161
|
+
testUtils.attachEngineTransformValidator(engine, engine.variablePool.var4, source);
|
|
162
|
+
|
|
163
|
+
source.sendValues('active', [[false, 0], [true, 2], [false, 4], [true, 6]]);
|
|
164
|
+
source.sendValues('active', [[false, 8], [true, 10], [false, 12], [true, 14]]);
|
|
165
|
+
|
|
166
|
+
engine.validateFilter([
|
|
167
|
+
[0, 0], [5, 2], [5, 4], [10, 6],
|
|
168
|
+
[10, 8], [15, 10], [15, 12], [20, 14],
|
|
169
|
+
]);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
it('count by expression with reset', function () {
|
|
173
|
+
const engine = new EngineV2(config);
|
|
174
|
+
const builder = new Builder(config);
|
|
175
|
+
builder.build(engine);
|
|
176
|
+
|
|
177
|
+
const source = testUtils.valueSource();
|
|
178
|
+
testUtils.attachEngineTransformValidator(engine, engine.variablePool.var5, source);
|
|
179
|
+
|
|
180
|
+
source.sendValues('active', [[false, 0], [true, 2], [false, 4], [true, 6]]);
|
|
181
|
+
source.sendValues('active', [[false, 8], [true, 10], [false, 12], [true, 14]]);
|
|
182
|
+
|
|
183
|
+
engine.validateFilter([
|
|
184
|
+
[0, 0], [5, 2], [5, 4], [10, 6],
|
|
185
|
+
[10, 8], [0, 10], [0, 12], [5, 14],
|
|
186
|
+
]);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('count with merge-window', function () {
|
|
190
|
+
const engine = new EngineV2(config);
|
|
191
|
+
const builder = new Builder(config);
|
|
192
|
+
builder.build(engine);
|
|
193
|
+
|
|
194
|
+
const source = testUtils.valueSource();
|
|
195
|
+
testUtils.attachEngineTransformValidator(engine, engine.variablePool.var6, source);
|
|
196
|
+
|
|
197
|
+
source.sendValues('active', [[false, 0], [true, 1], [false, 2], [true, 3]]);
|
|
198
|
+
source.sendValues('active', [[false, 4], [true, 8], [false, 9]]);
|
|
199
|
+
|
|
200
|
+
engine.validateFilter([
|
|
201
|
+
[0, 0], [0, 1], [0, 2], [0, 3],
|
|
202
|
+
[0, 4], [2, 6], [2, 8], [2, 9],
|
|
203
|
+
]);
|
|
204
|
+
engine.validateEngine('var6', [
|
|
205
|
+
[0, 0], [2, 6],
|
|
206
|
+
]);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('count by expression 2', function () {
|
|
210
|
+
const engine = new EngineV2(config);
|
|
211
|
+
const builder = new Builder(config);
|
|
212
|
+
builder.build(engine);
|
|
213
|
+
|
|
214
|
+
const source = testUtils.valueSource();
|
|
215
|
+
testUtils.attachEngineTransformValidator(engine, engine.variablePool.var7, source);
|
|
216
|
+
|
|
217
|
+
source.sendValue('ppc', 7, 0);
|
|
218
|
+
source.sendValues('active', [[false, 0], [true, 2], [false, 4], [true, 6]]);
|
|
219
|
+
source.sendValue('ppc', 3, 7);
|
|
220
|
+
source.sendValues('active', [[false, 8], [true, 10], [false, 12], [true, 14]]);
|
|
221
|
+
|
|
222
|
+
engine.validateFilter([
|
|
223
|
+
[0, 0], [7, 2], [7, 4], [14, 6], [14, 7],
|
|
224
|
+
[14, 8], [17, 10], [17, 12], [20, 14],
|
|
225
|
+
]);
|
|
226
|
+
});
|
|
227
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const SampleInterval = require('../../lib/transform').sampleInterval;
|
|
4
|
+
const testUtils = require('../util/testUtils');
|
|
5
|
+
|
|
6
|
+
describe('sample-interval transform tests', function () {
|
|
7
|
+
it('sample-interval regular 0.002', function () {
|
|
8
|
+
const filter = new SampleInterval(0.002);
|
|
9
|
+
testUtils.attachTransformValidator(filter);
|
|
10
|
+
|
|
11
|
+
filter.testAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 0.002);
|
|
12
|
+
filter.valdAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 0.002, 0);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('sample-interval regular 0.01', function () {
|
|
16
|
+
const filter = new SampleInterval(0.01);
|
|
17
|
+
testUtils.attachTransformValidator(filter);
|
|
18
|
+
|
|
19
|
+
filter.testAnalog([1, 3, 5, 7, 9, 2, 4, 6, 8, 0], 0.002);
|
|
20
|
+
filter.valdAnalog([9, 0], 0.01, 0.008);
|
|
21
|
+
});
|
|
22
|
+
});
|