Implement second exception rule

This commit is contained in:
Julia Friesel
2018-07-02 13:37:11 +02:00
parent 8db92e96f3
commit 03a0f1fb75
2 changed files with 87 additions and 1 deletions
+31 -1
View File
@@ -42,6 +42,7 @@ function detectTemperatureShift(temperaturesOfCycle) {
} }
function rounded(val, step) { function rounded(val, step) {
// we round the difference because of JS decimal weirdness
const inverted = 1 / step const inverted = 1 / step
return Math.round(val * inverted) / inverted return Math.round(val * inverted) / inverted
} }
@@ -73,6 +74,16 @@ function checkIfFirstHighMeasurement(temp, i, temps, ltl) {
} }
} }
if (secondExceptionRuleApplies(temp, nextTemps, ltl)) {
return {
isFirstHighMeasurement: true,
rules: {
secondException: true,
},
ltl
}
}
return { return {
isFirstHighMeasurement: false isFirstHighMeasurement: false
} }
@@ -81,18 +92,37 @@ function checkIfFirstHighMeasurement(temp, i, temps, ltl) {
function regularRuleApplies(temp, nextTemps, ltl) { function regularRuleApplies(temp, nextTemps, ltl) {
if (!nextTemps.every(temp => temp > ltl)) return false if (!nextTemps.every(temp => temp > ltl)) return false
const thirdTemp = nextTemps[1] const thirdTemp = nextTemps[1]
// we round the difference because of JS decimal weirdness
if (rounded(thirdTemp - ltl, 0.1) < 0.2) return false if (rounded(thirdTemp - ltl, 0.1) < 0.2) return false
return true return true
} }
function firstExceptionRuleApplies(temp, nextTemps, ltl) { function firstExceptionRuleApplies(temp, nextTemps, ltl) {
if (nextTemps.length < 3) return false
if (!nextTemps.every(temp => temp > ltl)) return false if (!nextTemps.every(temp => temp > ltl)) return false
const fourthTemp = nextTemps[2] const fourthTemp = nextTemps[2]
if (fourthTemp > ltl) return true if (fourthTemp > ltl) return true
return false return false
} }
function secondExceptionRuleApplies(temp, nextTemps, ltl) {
if (nextTemps.length < 3) return false
if (secondOrThirdTempIsAtOrBelowLtl(nextTemps, ltl)) {
const fourthTemp = nextTemps[2]
if (rounded(fourthTemp - ltl, 0.1) >= 0.2) return true
}
return false
}
function secondOrThirdTempIsAtOrBelowLtl(nextTemps, ltl) {
const secondIsLow = nextTemps[0] <= ltl
const thirdIsLow = nextTemps[1] <= ltl
if ((secondIsLow || thirdIsLow) && !(secondIsLow && thirdIsLow)) {
return true
} else {
return false
}
}
export { export {
detectTemperatureShift detectTemperatureShift
} }
+56
View File
@@ -82,6 +82,12 @@ describe.only('sensiplan', () => {
expect(status).to.eql({ detected: false }) expect(status).to.eql({ detected: false })
}) })
it('detects missing temperature shift with not enough high temps', function () {
const temps = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.77]
const status = detectTemperatureShift(temps)
expect(status).to.eql({ detected: false })
})
it('detects shift after an earlier one was invalid', function () { it('detects shift after an earlier one was invalid', function () {
const temps = [36.4, 36.4, 36.4, 36.4, 36.4, 36.4, 36.6, 36.6, 36.4, 36.4, 36.7, 36.7, 36.7, 36.7] const temps = [36.4, 36.4, 36.4, 36.4, 36.4, 36.4, 36.6, 36.6, 36.4, 36.4, 36.7, 36.7, 36.7, 36.7]
@@ -95,5 +101,55 @@ describe.only('sensiplan', () => {
}) })
}) })
}) })
describe('2nd exception rule', () => {
it('detects temperature shift with exception temp eql ltl', function () {
const secondException = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.6, 36.8]
const status = detectTemperatureShift(secondException)
expect(status).to.eql({
low: [36.55, 36.45, 36.5, 36.55, 36.6, 36.55],
ltl: 36.6,
high: [36.8, 36.85, 36.6, 36.8],
detected: true,
rules: { secondException: true }
})
})
it('detects temperature shift with exception temp lower than ltl', function () {
const secondException = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.4, 36.8]
const status = detectTemperatureShift(secondException)
expect(status).to.eql({
low: [36.55, 36.45, 36.5, 36.55, 36.6, 36.55],
ltl: 36.6,
high: [36.8, 36.85, 36.4, 36.8],
detected: true,
rules: { secondException: true }
})
})
it('detects missing temperature shift correctly', function () {
const temps = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.4, 36.77, 36.77]
const status = detectTemperatureShift(temps)
expect(status).to.eql({ detected: false })
})
it('detects missing temperature shift when not enough high temps', function () {
const temps = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.4]
const status = detectTemperatureShift(temps)
expect(status).to.eql({ detected: false })
})
it('detects shift after an earlier one was invalid', function () {
const temps = [36.7, 36.57, 36.47, 36.49, 36.57, 36.62, 36.55, 36.8, 36.86, 36.4, 36.77, 36.9, 36.9, 36.86, 37.04]
const status = detectTemperatureShift(temps)
expect(status).to.eql({
low: [36.6, 36.55, 36.8, 36.85, 36.4, 36.75],
ltl: 36.85,
high: [36.9, 36.9, 36.85, 37.05],
detected: true,
rules: { secondException: true }
})
})
})
}) })
}) })