Skip to content

Commit 3024907

Browse files
authored
Merge pull request #380 from symflower/max-coverage-score
Script to find max coverage score from result data
2 parents 2f61bbf + 4cdcf5f commit 3024907

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
3+
echo "java:"
4+
find $1 -path "*/write-tests/*/java/*/*/evaluation.log" | xargs go run scripts/find-max-coverage/main.go
5+
echo "ruby:"
6+
find $1 -path "*/write-tests/*/ruby/*/*/evaluation.log" | xargs go run scripts/find-max-coverage/main.go
7+
echo "golang:"
8+
find $1 -path "*/write-tests/*/golang/*/*/evaluation.log" | xargs go run scripts/find-max-coverage/main.go

scripts/find-max-coverage/main.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"regexp"
7+
"sort"
8+
"strconv"
9+
"strings"
10+
11+
"golang.org/x/exp/maps"
12+
)
13+
14+
var reTaskFileName = regexp.MustCompile(`Given the following \w+ code file "(.*)" with`)
15+
16+
func parseTaskFileName(s string) (string, bool) {
17+
if match := reTaskFileName.FindStringSubmatch(s); match != nil {
18+
return match[1], true
19+
}
20+
21+
return "", false
22+
}
23+
24+
var reCoverageObjects = regexp.MustCompile(`Executes tests with (\d+) coverage objects`)
25+
26+
func parseCoverageObjects(s string) (int, bool) {
27+
match := reCoverageObjects.FindStringSubmatch(s)
28+
if match == nil {
29+
return 0, false
30+
}
31+
coverageObjectsText := match[1]
32+
coverageObjects, err := strconv.Atoi(coverageObjectsText)
33+
if err != nil {
34+
panic(fmt.Sprintf("cannot convert %q to integer (%q)", coverageObjectsText, s))
35+
}
36+
37+
return coverageObjects, true
38+
}
39+
40+
func main() {
41+
logFileNames := os.Args[1:]
42+
var logFileData []byte
43+
44+
for _, logFileName := range logFileNames {
45+
data, err := os.ReadFile(logFileName)
46+
if err != nil {
47+
panic(err)
48+
}
49+
logFileData = append(logFileData, data...)
50+
}
51+
52+
var currentTaskFileName string
53+
bestCoverage := map[string]int{}
54+
55+
logFileLines := strings.Split(string(logFileData), "\n")
56+
fmt.Printf("Loaded %d log files (total of %d lines)\n", len(logFileNames), len(logFileLines))
57+
for _, line := range logFileLines {
58+
if taskFileName, ok := parseTaskFileName(line); ok {
59+
currentTaskFileName = taskFileName
60+
}
61+
62+
if currentCoverageObjects, ok := parseCoverageObjects(line); ok && currentCoverageObjects > bestCoverage[currentTaskFileName] {
63+
bestCoverage[currentTaskFileName] = currentCoverageObjects
64+
}
65+
}
66+
67+
sum := 0
68+
taskFileNames := maps.Keys(bestCoverage)
69+
sort.Strings(taskFileNames)
70+
for _, taskFileName := range taskFileNames {
71+
score := bestCoverage[taskFileName]
72+
fmt.Printf(" - %q:%d\n", taskFileName, score)
73+
sum += score
74+
}
75+
fmt.Printf("∑ = %d (weighted: %d)\n", sum, sum*10)
76+
}

0 commit comments

Comments
 (0)