|
|
@@ -1,5 +1,5 @@
|
|
|
import {alignToWindow, removeSpikes} from './cleanData';
|
|
|
-import {testTemperatureData} from './testData';
|
|
|
+import {testData} from './testData';
|
|
|
import * as should from 'should';
|
|
|
|
|
|
describe('Clean data', () => {
|
|
|
@@ -7,59 +7,59 @@ describe('Clean data', () => {
|
|
|
it('Aligns data to 15 minute increments', () => {
|
|
|
// Adapted from the data in testData.ts
|
|
|
const expected = [
|
|
|
- { time: 1640296800000, temperature: -4.2 },
|
|
|
- { time: 1640297700000, temperature: -4.3 },
|
|
|
- { time: 1640298600000, temperature: -4.4 },
|
|
|
- { time: 1640299500000, temperature: -4.2 },
|
|
|
- { time: 1640300400000, temperature: -4.2 },
|
|
|
- { time: 1640301300000, temperature: -4.2 },
|
|
|
- { time: 1640302200000, temperature: -0.2 },
|
|
|
- { time: 1640303100000, temperature: -2.9 },
|
|
|
- { time: 1640304000000, temperature: -3.9 },
|
|
|
- { time: 1640304900000, temperature: -4.0 },
|
|
|
- { time: 1640305800000, temperature: -3.9 },
|
|
|
- { time: 1640306700000, temperature: -3.8 },
|
|
|
- { time: 1640307600000, temperature: -3.8 },
|
|
|
+ { time: 1640296800000, value: -4.2 },
|
|
|
+ { time: 1640297700000, value: -4.3 },
|
|
|
+ { time: 1640298600000, value: -4.4 },
|
|
|
+ { time: 1640299500000, value: -4.2 },
|
|
|
+ { time: 1640300400000, value: -4.2 },
|
|
|
+ { time: 1640301300000, value: -4.2 },
|
|
|
+ { time: 1640302200000, value: -0.2 },
|
|
|
+ { time: 1640303100000, value: -2.9 },
|
|
|
+ { time: 1640304000000, value: -3.9 },
|
|
|
+ { time: 1640304900000, value: -4.0 },
|
|
|
+ { time: 1640305800000, value: -3.9 },
|
|
|
+ { time: 1640306700000, value: -3.8 },
|
|
|
+ { time: 1640307600000, value: -3.8 },
|
|
|
];
|
|
|
|
|
|
- const actual = alignToWindow(testTemperatureData, 'temperature', 15);
|
|
|
+ const actual = alignToWindow(testData, 15);
|
|
|
should(actual).deepEqual(expected);
|
|
|
});
|
|
|
|
|
|
it('Skips the first period when empty', () => {
|
|
|
const input = [
|
|
|
- { time: 1640296752000, temperature: -4.21 },
|
|
|
- { time: 1640297111475, temperature: -4.28 },
|
|
|
- { time: 1640297410320, temperature: -4.29 },
|
|
|
- { time: 1640297709214, temperature: -4.34 },
|
|
|
+ { time: 1640296752000, value: -4.21 },
|
|
|
+ { time: 1640297111475, value: -4.28 },
|
|
|
+ { time: 1640297410320, value: -4.29 },
|
|
|
+ { time: 1640297709214, value: -4.34 },
|
|
|
];
|
|
|
|
|
|
const expected = [
|
|
|
- { time: 1640296800000, temperature: -4.2 },
|
|
|
- { time: 1640297700000, temperature: -4.3 },
|
|
|
+ { time: 1640296800000, value: -4.2 },
|
|
|
+ { time: 1640297700000, value: -4.3 },
|
|
|
];
|
|
|
|
|
|
- const actual = alignToWindow(input, 'temperature', 15);
|
|
|
+ const actual = alignToWindow(input, 15);
|
|
|
should(actual).deepEqual(expected);
|
|
|
});
|
|
|
|
|
|
it('Inserts NaN when a middle period is empty', () => {
|
|
|
const input = [
|
|
|
- { time: 1640296812283, temperature: -4.21 },
|
|
|
- { time: 1640297111475, temperature: -4.28 },
|
|
|
+ { time: 1640296812283, value: -4.21 },
|
|
|
+ { time: 1640297111475, value: -4.28 },
|
|
|
// Empty period here
|
|
|
- { time: 1640298307129, temperature: -4.42 },
|
|
|
- { time: 1640298606065, temperature: -4.4 },
|
|
|
- { time: 1640298905167, temperature: -4.27 },
|
|
|
+ { time: 1640298307129, value: -4.42 },
|
|
|
+ { time: 1640298606065, value: -4.4 },
|
|
|
+ { time: 1640298905167, value: -4.27 },
|
|
|
];
|
|
|
|
|
|
const expected = [
|
|
|
- { time: 1640296800000, temperature: -4.2 },
|
|
|
- { time: 1640297700000, temperature: NaN },
|
|
|
- { time: 1640298600000, temperature: -4.4 },
|
|
|
+ { time: 1640296800000, value: -4.2 },
|
|
|
+ { time: 1640297700000, value: NaN },
|
|
|
+ { time: 1640298600000, value: -4.4 },
|
|
|
];
|
|
|
|
|
|
- const actual = alignToWindow(input, 'temperature', 15);
|
|
|
+ const actual = alignToWindow(input, 15);
|
|
|
should(actual).deepEqual(expected);
|
|
|
});
|
|
|
});
|
|
|
@@ -67,49 +67,49 @@ describe('Clean data', () => {
|
|
|
describe('Remove Spikes', () => {
|
|
|
it('Removes spiky measurements', () => {
|
|
|
// Testing that abnormally large spikes are removed. For example, if
|
|
|
- // the chip heats up and causes a 2+ Celsius spike in temperature.
|
|
|
+ // the chip heats up and causes a 2+ Celsius spike in value.
|
|
|
|
|
|
const input = [
|
|
|
- { time: 1, temperature: -4.23 },
|
|
|
- { time: 2, temperature: -4.14 },
|
|
|
- { time: 3, temperature: -4.12 },
|
|
|
- { time: 4, temperature: 3.65 }, // Large spike
|
|
|
- { time: 5, temperature: -2.05 }, // Smaller, but still big
|
|
|
- { time: 6, temperature: -3.12 },
|
|
|
- { time: 7, temperature: -3.63 },
|
|
|
+ { time: 1, value: -4.23 },
|
|
|
+ { time: 2, value: -4.14 },
|
|
|
+ { time: 3, value: -4.12 },
|
|
|
+ { time: 4, value: 3.65 }, // Large spike
|
|
|
+ { time: 5, value: -2.05 }, // Smaller, but still big
|
|
|
+ { time: 6, value: -3.12 },
|
|
|
+ { time: 7, value: -3.63 },
|
|
|
];
|
|
|
const expected = [
|
|
|
- { time: 1, temperature: -4.23 },
|
|
|
- { time: 2, temperature: -4.14 },
|
|
|
- { time: 3, temperature: -4.12 },
|
|
|
- { time: 6, temperature: -3.12 },
|
|
|
- { time: 7, temperature: -3.63 },
|
|
|
+ { time: 1, value: -4.23 },
|
|
|
+ { time: 2, value: -4.14 },
|
|
|
+ { time: 3, value: -4.12 },
|
|
|
+ { time: 6, value: -3.12 },
|
|
|
+ { time: 7, value: -3.63 },
|
|
|
];
|
|
|
|
|
|
- const actual = removeSpikes(input, 'temperature');
|
|
|
+ const actual = removeSpikes(input);
|
|
|
should(actual).deepEqual(expected);
|
|
|
});
|
|
|
|
|
|
it('Sorts data', () => {
|
|
|
// Same data as earlier test, but rearranged
|
|
|
const input = [
|
|
|
- { time: 4, temperature: 3.65 }, // Large spike
|
|
|
- { time: 1, temperature: -4.23 },
|
|
|
- { time: 7, temperature: -3.63 },
|
|
|
- { time: 2, temperature: -4.14 },
|
|
|
- { time: 6, temperature: -3.12 },
|
|
|
- { time: 5, temperature: -2.05 }, // Smaller, but still big
|
|
|
- { time: 3, temperature: -4.12 },
|
|
|
+ { time: 4, value: 3.65 }, // Large spike
|
|
|
+ { time: 1, value: -4.23 },
|
|
|
+ { time: 7, value: -3.63 },
|
|
|
+ { time: 2, value: -4.14 },
|
|
|
+ { time: 6, value: -3.12 },
|
|
|
+ { time: 5, value: -2.05 }, // Smaller, but still big
|
|
|
+ { time: 3, value: -4.12 },
|
|
|
];
|
|
|
const expected = [
|
|
|
- { time: 1, temperature: -4.23 },
|
|
|
- { time: 2, temperature: -4.14 },
|
|
|
- { time: 3, temperature: -4.12 },
|
|
|
- { time: 6, temperature: -3.12 },
|
|
|
- { time: 7, temperature: -3.63 },
|
|
|
+ { time: 1, value: -4.23 },
|
|
|
+ { time: 2, value: -4.14 },
|
|
|
+ { time: 3, value: -4.12 },
|
|
|
+ { time: 6, value: -3.12 },
|
|
|
+ { time: 7, value: -3.63 },
|
|
|
];
|
|
|
|
|
|
- const actual = removeSpikes(input, 'temperature');
|
|
|
+ const actual = removeSpikes(input);
|
|
|
should(actual).deepEqual(expected);
|
|
|
});
|
|
|
});
|