github.com/covergates/covergates@v0.2.2-0.20201009050117-42ef8a19fb95/service/perl/coverage.go (about) 1 package perl 2 3 import "fmt" 4 5 type coverDB struct { 6 Runs map[string]*coverRun `json:"runs"` 7 } 8 9 type coverRun struct { 10 Name string `json:"name"` 11 Counts map[string]*coverCount `json:"count"` 12 Dir string `json:"dir"` 13 Digests map[string]string `json:"digests"` 14 } 15 16 type coverCount struct { 17 Statement []int `json:"statement"` 18 } 19 20 type coverDigest struct { 21 Statement []int `json:"statement"` 22 File string `json:"file"` 23 } 24 25 func updateSummary(s map[string]*coverCount, r *coverRun) error { 26 for name, count := range r.Counts { 27 sc, ok := s[name] 28 if !ok { 29 s[name] = newCoverCount(len(count.Statement)) 30 sc = s[name] 31 } 32 if err := sc.updateStatement(count.Statement); err != nil { 33 return err 34 } 35 } 36 return nil 37 } 38 39 func (db *coverDB) CountSummarize() (map[string]*coverCount, error) { 40 if len(db.Runs) <= 0 { 41 return nil, fmt.Errorf("No runs") 42 } 43 summary := make(map[string]*coverCount) 44 for _, run := range db.Runs { 45 if err := updateSummary(summary, run); err != nil { 46 return nil, err 47 } 48 } 49 return summary, nil 50 } 51 52 func newCoverCount(lines int) *coverCount { 53 return &coverCount{ 54 Statement: make([]int, lines), 55 } 56 } 57 58 func (c *coverCount) updateStatement(statement []int) error { 59 if len(statement) != len(c.Statement) { 60 return fmt.Errorf("Statement count mismatch") 61 } 62 for i, n := range statement { 63 c.Statement[i] += n 64 } 65 return nil 66 }