diff options
author | Fabian Meumertzheim <meumertzheim@code-intelligence.com> | 2021-02-22 08:12:56 +0100 |
---|---|---|
committer | Fabian Meumertzheim <fabian@meumertzhe.im> | 2021-02-22 14:33:55 +0100 |
commit | 4fb408bdcbfb32b207c0b92cc98bc3e95c9f7665 (patch) | |
tree | feb9831b957c20c6d39b9e6a45202bd0b9a01106 /agent/src/test/java/com/code_intelligence/jazzer | |
parent | 615d76fdaf6f0f055b2d7970c7f4a3ea126885a6 (diff) | |
download | jazzer-api-4fb408bdcbfb32b207c0b92cc98bc3e95c9f7665.tar.gz |
Use NeverZero instead of Saturated Counters for coverage
According to
https://www.usenix.org/system/files/woot20-paper-fioraldi.pdf,
letting coverage 8-bit counters wrap from 255 to 1 on increment performs
better than having them stay at 255. In fact, the latter has been
observed to hurt overall coverage.
Diffstat (limited to 'agent/src/test/java/com/code_intelligence/jazzer')
-rw-r--r-- | agent/src/test/java/com/code_intelligence/jazzer/instrumentor/CoverageInstrumentationTest.kt | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/agent/src/test/java/com/code_intelligence/jazzer/instrumentor/CoverageInstrumentationTest.kt b/agent/src/test/java/com/code_intelligence/jazzer/instrumentor/CoverageInstrumentationTest.kt index 31f40575..e52231cd 100644 --- a/agent/src/test/java/com/code_intelligence/jazzer/instrumentor/CoverageInstrumentationTest.kt +++ b/agent/src/test/java/com/code_intelligence/jazzer/instrumentor/CoverageInstrumentationTest.kt @@ -109,11 +109,14 @@ class CoverageInstrumentationTest { // Control flows through the first if branch once per run. val takenOnEveryRunEdge = ifFirstBranch - for (i in 1..300) { + var lastCounter = 0.toUByte() + for (i in 1..600) { assertSelfCheck(target) assertEquals(1, MockCoverageMap.mem[takenOnceEdge]) - // Verify that the counter does not overflow. - val expectedCounter = i.coerceAtMost(255).toUByte() + // Verify that the counter increments, but is never zero. + val expectedCounter = (lastCounter + 1U).toUByte().takeUnless { it == 0.toUByte() } + ?: (lastCounter + 2U).toUByte() + lastCounter = expectedCounter val actualCounter = MockCoverageMap.mem[takenOnEveryRunEdge].toUByte() assertEquals(expectedCounter, actualCounter, "After $i runs:") } |