| | |
| | |
| | |
| |
|
| | package fuzz |
| |
|
| | import ( |
| | "fmt" |
| | "math/bits" |
| | ) |
| |
|
| | |
| | |
| | func ResetCoverage() { |
| | cov := coverage() |
| | clear(cov) |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | func SnapshotCoverage() { |
| | cov := coverage() |
| | for i, b := range cov { |
| | coverageSnapshot[i] = pow2Table[b] |
| | } |
| | } |
| |
|
| | |
| | |
| | func diffCoverage(base, snapshot []byte) []byte { |
| | if len(base) != len(snapshot) { |
| | panic(fmt.Sprintf("the number of coverage bits changed: before=%d, after=%d", len(base), len(snapshot))) |
| | } |
| | found := false |
| | for i := range snapshot { |
| | if snapshot[i]&^base[i] != 0 { |
| | found = true |
| | break |
| | } |
| | } |
| | if !found { |
| | return nil |
| | } |
| | diff := make([]byte, len(snapshot)) |
| | for i := range diff { |
| | diff[i] = snapshot[i] &^ base[i] |
| | } |
| | return diff |
| | } |
| |
|
| | |
| | |
| | func countNewCoverageBits(base, snapshot []byte) int { |
| | n := 0 |
| | for i := range snapshot { |
| | n += bits.OnesCount8(snapshot[i] &^ base[i]) |
| | } |
| | return n |
| | } |
| |
|
| | |
| | |
| | func isCoverageSubset(base, snapshot []byte) bool { |
| | for i, v := range base { |
| | if v&snapshot[i] != v { |
| | return false |
| | } |
| | } |
| | return true |
| | } |
| |
|
| | |
| | |
| | func hasCoverageBit(base, snapshot []byte) bool { |
| | for i := range snapshot { |
| | if snapshot[i]&base[i] != 0 { |
| | return true |
| | } |
| | } |
| | return false |
| | } |
| |
|
| | func countBits(cov []byte) int { |
| | n := 0 |
| | for _, c := range cov { |
| | n += bits.OnesCount8(c) |
| | } |
| | return n |
| | } |
| |
|
| | var ( |
| | coverageEnabled = len(coverage()) > 0 |
| | coverageSnapshot = make([]byte, len(coverage())) |
| |
|
| | |
| | |
| | |
| | _counters, _ecounters [0]byte |
| |
|
| | |
| | pow2Table [256]byte |
| | ) |
| |
|
| | func init() { |
| | for i := range pow2Table { |
| | b := byte(i) |
| | b |= b >> 1 |
| | b |= b >> 2 |
| | b |= b >> 4 |
| | b -= b >> 1 |
| | pow2Table[i] = b |
| | } |
| | } |
| |
|