50 lines
2.0 KiB
Markdown
50 lines
2.0 KiB
Markdown
---
|
||
epic: 5
|
||
story: 5.4
|
||
title: "Section Aggregators"
|
||
status: draft
|
||
---
|
||
|
||
## Epic 5 — Variables, Line References & Aggregators
|
||
**Goal:** Transform the notepad into a lightweight computational document.
|
||
|
||
### Story 5.4: Section Aggregators
|
||
|
||
As a **CalcPad user**,
|
||
I want to use aggregation keywords like `sum`, `total`, `average`, `min`, `max`, and `count` to compute over a section of lines,
|
||
So that I can quickly summarize a group of related values without manually writing out each reference.
|
||
|
||
**Acceptance Criteria:**
|
||
|
||
**Given** lines 1–4 contain numeric values `10`, `20`, `30`, `40` and line 5 is empty
|
||
**When** the user writes `sum` on line 5 (or after the group)
|
||
**Then** the result is `100` (sum of lines 1–4)
|
||
|
||
**Given** lines 1–4 contain numeric values and line 5 is a heading `## Monthly Costs`
|
||
**When** the user writes `total` immediately after lines 6–9 (which contain values under that heading)
|
||
**Then** `total` sums only lines 6–9 (the section bounded by the heading above and the aggregator line)
|
||
|
||
**Given** a section with values `10`, `20`, `30`
|
||
**When** the user writes `average` (or `avg`) at the end of the section
|
||
**Then** the result is `20`
|
||
|
||
**Given** a section with values `5`, `12`, `3`, `8`
|
||
**When** the user writes `min` at the end of the section
|
||
**Then** the result is `3`
|
||
|
||
**Given** a section with values `5`, `12`, `3`, `8`
|
||
**When** the user writes `max` at the end of the section
|
||
**Then** the result is `12`
|
||
|
||
**Given** a section with values `5`, `12`, `3`, `8`
|
||
**When** the user writes `count` at the end of the section
|
||
**Then** the result is `4` (number of lines with numeric results)
|
||
|
||
**Given** a section contains a mix of numeric lines and comment lines
|
||
**When** an aggregator is applied
|
||
**Then** only lines with numeric results are included in the aggregation (comments and blank lines are skipped)
|
||
|
||
**Given** an empty section (heading immediately followed by another heading or end-of-document)
|
||
**When** the user writes `sum`
|
||
**Then** the result is `0` (or an appropriate indication that there are no values to aggregate)
|