Skip to content

Commit

Permalink
[#403] Add stats for all line changes per green commit
Browse files Browse the repository at this point in the history
To generate a retro file template containing stats about the green and red commits
- add ChangedLines.All()
- add TcrEvents.AllLineChangesPerGreenCommit()
- Refactor in TcrEvents
- add tests
  • Loading branch information
philou authored and mengdaming committed Oct 22, 2024
1 parent 68daa4a commit 574fa9e
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 4 deletions.
5 changes: 5 additions & 0 deletions src/events/tcr_event.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ type (
}
)

// All returns the sum of all line changes, from both test and source
func (l ChangedLines) All() int {
return l.Src + l.Test
}

// Possible values for CommandStatus
const (
StatusPass CommandStatus = "pass"
Expand Down
6 changes: 6 additions & 0 deletions src/events/tcr_event_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,9 @@ func Test_yaml_conversion_on_sample_tcr_event(t *testing.T) {
assert.Equal(t, expected, yaml)
assert.Equal(t, *event, FromYAML(yaml))
}

func Test_ChangedLines_can_sum_its_total_line_changes(t *testing.T) {
changedLines := ChangedLines{1, 2}

assert.Equal(t, 1+2, changedLines.All())
}
31 changes: 27 additions & 4 deletions src/events/tcr_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,12 +193,35 @@ func (events *TcrEvents) TestLineChangesPerCommit() IntAggregates {
// AllLineChangesPerCommit returns the minimum, average and maximum number of changed
// lines per commit (source and tests)
func (events *TcrEvents) AllLineChangesPerCommit() IntAggregates {
return events.lineChangesPerCommit(
func(e DatedTcrEvent) int {
return e.Event.Changes.Src + e.Event.Changes.Test
})
return events.lineChangesPerCommit(allLineChanges)
}

// AllLineChangesPerGreenCommit returns the minimum, average, and maximum number of
// changed lines per green commit (source and test)
func (events *TcrEvents) AllLineChangesPerGreenCommit() IntAggregates {
passingEvents := eventsWithGreenStatus(events)
return passingEvents.lineChangesPerCommit(allLineChanges)
}

func allLineChanges(e DatedTcrEvent) int {
return e.Event.Changes.All()
}

func eventsWithGreenStatus(events *TcrEvents) TcrEvents {
return filter(*events, func(event DatedTcrEvent) bool {
return event.Event.Status == StatusPass
})
}

func filter[T any](slice []T, f func(T) bool) []T {
var n []T
for _, e := range slice {
if f(e) {
n = append(n, e)
}
}
return n
}
func (events *TcrEvents) lineChangesPerCommit(metricFunc func(e DatedTcrEvent) int) IntAggregates {
if len(*events) == 0 {
return IntAggregates{0, 0, 0}
Expand Down
43 changes: 43 additions & 0 deletions src/events/tcr_events_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,49 @@ func Test_events_time_between_commits(t *testing.T) {
}
}

func Test_average_size_of_green_commits(t *testing.T) {
testFlags := []struct {
desc string
events TcrEvents
expected IntAggregates
}{
{
"1 passing event",
TcrEvents{*ADatedTcrEvent(WithTcrEvent(*ATcrEvent(
WithCommandStatus(StatusPass),
WithModifiedSrcLines(3),
WithModifiedTestLines(0))))},
IntAggregates{min: 3, avg: 3, max: 3},
},
{
"summing all tests and source line changes",
TcrEvents{*ADatedTcrEvent(WithTcrEvent(*ATcrEvent(
WithCommandStatus(StatusPass),
WithModifiedSrcLines(3),
WithModifiedTestLines(2))))},
IntAggregates{min: 5, avg: 5, max: 5},
},
{
"1 passing and 1 failing event",
TcrEvents{
*ADatedTcrEvent(WithTcrEvent(*ATcrEvent(
WithCommandStatus(StatusPass),
WithModifiedSrcLines(4),
WithModifiedTestLines(0)))),
*ADatedTcrEvent(WithTcrEvent(*ATcrEvent(
WithCommandStatus(StatusFail),
WithModifiedSrcLines(5),
WithModifiedTestLines(0))))},
IntAggregates{min: 4, avg: 4, max: 4},
},
}
for _, tt := range testFlags {
t.Run(tt.desc, func(t *testing.T) {
assert.Equal(t, tt.expected, tt.events.AllLineChangesPerGreenCommit())
})
}
}

func Test_events_line_changes_per_commit(t *testing.T) {
testFlags := []struct {
desc string
Expand Down

0 comments on commit 574fa9e

Please sign in to comment.