Skip to content
Snippets Groups Projects
Commit cceecc07 authored by tina's avatar tina
Browse files

computes the stats about the period lengths, started tests

parent ac8d3837
No related branches found
No related tags found
No related merge requests found
export default function getPeriodLengthStats(cycleLengthArray) {
if (Array.isArray(cycleLengthArray) && (cycleLengthArray.length > 0) && cycleLengthArray.every(cycleLength => {
return (typeof cycleLength === 'number') && !(isNaN(cycleLength))
})) {
const PeriodLengthStats = {}
const sortedCycleLegthArray = cycleLengthArray.sort((a, b) => {
return a - b
})
PeriodLengthStats.minimum = sortedCycleLegthArray[0]
PeriodLengthStats.maximum = sortedCycleLegthArray[cycleLengthArray.length - 1]
PeriodLengthStats.mean = cycleLengthArray.reduce(getSum) / cycleLengthArray.length
// median
if (cycleLengthArray.length % 2 == 1) {
PeriodLengthStats.median = sortedCycleLegthArray[(cycleLengthArray.length + 1) / 2 - 1]
}
else {
const middle = cycleLengthArray.length / 2
PeriodLengthStats.median = (sortedCycleLegthArray[middle - 1] + sortedCycleLegthArray[middle]) / 2
}
PeriodLengthStats.stdDeviation = 0 // default
if (cycleLengthArray.length > 1) {
const sumOfSquares = cycleLengthArray.map(cycleLength => {
return Math.pow(cycleLength - PeriodLengthStats.mean, 2)
}).reduce(getSum)
PeriodLengthStats.stdDeviation = Math.sqrt(sumOfSquares / (cycleLengthArray.length - 1 ))
}
return PeriodLengthStats
}
console.error('getPeriodLengthStats requiers an array of numbers with length > 0.')
}
function getSum(total, num) {
return total + num
}
\ No newline at end of file
import chai from 'chai'
import periodInfo from '../lib/period-length'
const expect = chai.expect
describe('it calculates the median correctly', () => {
it('works for an odd-numbered array', () => {
const periodLengths = [1, 2, 5, 99, 100]
const result = periodInfo(periodLengths).median
expect(result).to.eql(5)
})
/* it('works for an even-numbered array', () => {
}) */
})
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment