| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| |
|
| | package main |
| |
|
| | import ( |
| | "fmt" |
| | "os" |
| | ) |
| |
|
| | func main() { |
| | testAll() |
| | verify() |
| | } |
| |
|
| | type block struct { |
| | count uint32 |
| | line uint32 |
| | } |
| |
|
| | var counters = make(map[block]bool) |
| |
|
| | |
| | var coverTest = &thisNameMustBeVeryLongToCauseOverflowOfCounterIncrementStatementOntoNextLineForTest |
| |
|
| | |
| | func check(line, count uint32) { |
| | b := block{ |
| | count, |
| | line, |
| | } |
| | counters[b] = true |
| | } |
| |
|
| | |
| | |
| | func checkVal(line, count uint32, val int) int { |
| | b := block{ |
| | count, |
| | line, |
| | } |
| | counters[b] = true |
| | return val |
| | } |
| |
|
| | var PASS = true |
| |
|
| | |
| | func verify() { |
| | for b := range counters { |
| | got, index := count(b.line) |
| | if b.count == anything && got != 0 { |
| | got = anything |
| | } |
| | if got != b.count { |
| | fmt.Fprintf(os.Stderr, "test_go:%d expected count %d got %d [counter %d]\n", b.line, b.count, got, index) |
| | PASS = false |
| | } |
| | } |
| | verifyPanic() |
| | if !PASS { |
| | fmt.Fprintf(os.Stderr, "FAIL\n") |
| | os.Exit(2) |
| | } |
| | } |
| |
|
| | |
| | |
| | func verifyPanic() { |
| | if coverTest.Count[panicIndex-1] != 1 { |
| | |
| | fmt.Fprintf(os.Stderr, "bad before panic") |
| | PASS = false |
| | } |
| | if coverTest.Count[panicIndex] != 0 { |
| | fmt.Fprintf(os.Stderr, "bad at panic: %d should be 0\n", coverTest.Count[panicIndex]) |
| | PASS = false |
| | } |
| | if coverTest.Count[panicIndex+1] != 1 { |
| | fmt.Fprintf(os.Stderr, "bad after panic") |
| | PASS = false |
| | } |
| | } |
| |
|
| | |
| | func count(line uint32) (uint32, int) { |
| | |
| | |
| | |
| | |
| | |
| | index := -1 |
| | indexLo := uint32(1e9) |
| | for i := range coverTest.Count { |
| | lo, hi := coverTest.Pos[3*i], coverTest.Pos[3*i+1] |
| | if lo == line && line == hi { |
| | return coverTest.Count[i], i |
| | } |
| | |
| | if lo <= line && line <= hi && indexLo > lo { |
| | index = i |
| | indexLo = lo |
| | } |
| | } |
| | if index == -1 { |
| | fmt.Fprintln(os.Stderr, "cover_test: no counter for line", line) |
| | PASS = false |
| | return 0, 0 |
| | } |
| | return coverTest.Count[index], index |
| | } |
| |
|