|
6 | 6 | "fmt"
|
7 | 7 | "io/ioutil"
|
8 | 8 | "log"
|
| 9 | + "math" |
9 | 10 | "os"
|
10 | 11 | "path/filepath"
|
11 | 12 |
|
@@ -163,27 +164,35 @@ func coverage(repo *Repo) (*cvg.Coverage, error) {
|
163 | 164 | }
|
164 | 165 | }
|
165 | 166 |
|
166 |
| - var fileTokThresh float32 = 0.7 |
| 167 | + var fileTokThresh float64 = 0.7 |
167 | 168 | numIndexedFiles := 0
|
168 | 169 | numDefs, numRefs, numRefsValid := 0, 0, 0
|
169 |
| - loc := 0 |
| 170 | + loc := 0 // lines of code |
170 | 171 | var uncoveredFiles []string
|
171 | 172 | for file, datum := range codeFileData {
|
172 | 173 | loc += datum.LoC
|
173 | 174 | numDefs += datum.NumDefs
|
174 | 175 | numRefs += datum.NumRefs
|
175 | 176 | numRefsValid += datum.NumRefsValid
|
176 |
| - if float32(datum.NumDefs+datum.NumRefsValid)/float32(datum.LoC) > fileTokThresh { |
| 177 | + if float64(datum.NumDefs+datum.NumRefsValid)/float64(datum.LoC) > fileTokThresh { |
177 | 178 | numIndexedFiles++
|
178 | 179 | } else {
|
179 | 180 | uncoveredFiles = append(uncoveredFiles, file)
|
180 | 181 | }
|
181 | 182 | }
|
182 | 183 |
|
183 | 184 | return &cvg.Coverage{
|
184 |
| - FileScore: float32(numIndexedFiles) / float32(len(codeFileData)), |
185 |
| - RefScore: float32(numRefsValid) / float32(numRefs), |
186 |
| - TokDensity: float32(numDefs+numRefs) / float32(loc), |
| 185 | + FileScore: divideSentinel(float64(numIndexedFiles), float64(len(codeFileData)), -1), |
| 186 | + RefScore: divideSentinel(float64(numRefsValid), float64(numRefs), -1), |
| 187 | + TokDensity: divideSentinel(float64(numDefs+numRefs), float64(loc), -1), |
187 | 188 | UncoveredFiles: uncoveredFiles,
|
188 | 189 | }, nil
|
189 | 190 | }
|
| 191 | + |
| 192 | +func divideSentinel(x, y, sentinel float64) float64 { |
| 193 | + q := x / y |
| 194 | + if math.IsNaN(q) { |
| 195 | + return sentinel |
| 196 | + } |
| 197 | + return q |
| 198 | +} |
0 commit comments