...
1
16
17 package cov
18
19 import (
20 "fmt"
21 "golang.org/x/tools/cover"
22 )
23
24
25
26
27 func DiffProfiles(before []*cover.Profile, after []*cover.Profile) ([]*cover.Profile, error) {
28 var diff []*cover.Profile
29 if len(before) != len(after) {
30 return nil, fmt.Errorf("before and after have different numbers of profiles (%d vs. %d)", len(before), len(after))
31 }
32 for i, beforeProfile := range before {
33 afterProfile := after[i]
34 if err := ensureProfilesMatch(beforeProfile, afterProfile); err != nil {
35 return nil, fmt.Errorf("error on profile #%d: %v", i, err)
36 }
37 diffProfile := cover.Profile{FileName: beforeProfile.FileName, Mode: beforeProfile.Mode}
38 for j, beforeBlock := range beforeProfile.Blocks {
39 afterBlock := afterProfile.Blocks[j]
40 diffBlock := cover.ProfileBlock{
41 StartLine: beforeBlock.StartLine,
42 StartCol: beforeBlock.StartCol,
43 EndLine: beforeBlock.EndLine,
44 EndCol: beforeBlock.EndCol,
45 NumStmt: beforeBlock.NumStmt,
46 Count: afterBlock.Count - beforeBlock.Count,
47 }
48 diffProfile.Blocks = append(diffProfile.Blocks, diffBlock)
49 }
50 diff = append(diff, &diffProfile)
51 }
52 return diff, nil
53 }
54
View as plain text