Start the cumulative numerical habit implementation

pull/1186/head
Quentin Hibon 4 years ago
parent b62e436054
commit 509af486eb

@ -95,7 +95,27 @@ open class EntryList {
clear() clear()
val original = originalEntries.getKnown() val original = originalEntries.getKnown()
if (isNumerical) { if (isNumerical) {
original.forEach { add(it) } assert(frequency.numerator == 1)
val intervals = buildIntervals(frequency, original)
snapIntervalsTogether(intervals)
val computed = buildEntriesFromInterval(original, intervals).sortedBy { it.timestamp }
var currentValue = 0
val currentWindow = ArrayDeque<Entry>()
for (entry in computed) {
if (entry.value == UNKNOWN) {
continue
}
currentValue += entry.value
currentWindow.addLast(entry)
while (entry.timestamp.minus(frequency.denominator - 1).isNewerThan(currentWindow.first().timestamp)) {
currentValue -= currentWindow.first().value
currentWindow.removeFirst()
assert(currentValue >= 0)
}
// TODO: we need to keep track of both today's value and the current cumulative value
add(Entry(entry.timestamp, currentValue))
}
} else { } else {
val intervals = buildIntervals(frequency, original) val intervals = buildIntervals(frequency, original)
snapIntervalsTogether(intervals) snapIntervalsTogether(intervals)

@ -96,7 +96,7 @@ class EntryListTest {
} }
@Test @Test
fun testComputeNumerical() { fun testComputeNumericalDaily() {
val today = DateUtils.getToday() val today = DateUtils.getToday()
val original = EntryList() val original = EntryList()
@ -115,6 +115,26 @@ class EntryListTest {
assertEquals(expected, computed.getKnown()) assertEquals(expected, computed.getKnown())
} }
@Test
fun testComputeNumericalWeekly() {
val today = DateUtils.getToday()
val original = EntryList()
original.add(Entry(today.minus(4), 100))
original.add(Entry(today.minus(9), 200))
original.add(Entry(today.minus(10), 300))
val computed = EntryList()
computed.recomputeFrom(original, Frequency.WEEKLY, isNumerical = true)
val expected = listOf(
Entry(today.minus(4), 600),
Entry(today.minus(9), 500),
Entry(today.minus(10), 300),
)
assertEquals(expected, computed.getKnown())
}
@Test @Test
fun testGroupByNumerical() { fun testGroupByNumerical() {
val offsets = intArrayOf( val offsets = intArrayOf(

Loading…
Cancel
Save