https://github.com/camshaft/bolero
property testing and verification front-end for Rust
https://github.com/camshaft/bolero
afl fuzz fuzz-testing honggfuzz libfuzzer property-testing
Last synced: about 1 year ago
JSON representation
property testing and verification front-end for Rust
- Host: GitHub
- URL: https://github.com/camshaft/bolero
- Owner: camshaft
- License: mit
- Created: 2019-09-06T00:20:04.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-05-08T00:28:05.000Z (about 1 year ago)
- Last Synced: 2025-05-08T01:27:48.617Z (about 1 year ago)
- Topics: afl, fuzz, fuzz-testing, honggfuzz, libfuzzer, property-testing
- Language: C
- Homepage: https://camshaft.github.io/bolero
- Size: 2.98 MB
- Stars: 202
- Watchers: 3
- Forks: 23
- Open Issues: 48
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# bolero
[](https://github.com/camshaft/bolero/actions?workflow=ci)
[](https://crates.io/crates/bolero)
[](https://docs.rs/bolero)
[](https://github.com/camshaft/bolero/blob/master/LICENSE)
fuzz and property testing front-end for Rust
## Book
A copy of the Bolero Book can be found here: http://camshaft.github.io/bolero
## Quick Start
1. Install subcommand and add a dependency
```console
$ cargo add --dev bolero
$ cargo install -f cargo-bolero
```
2. Write a test using [`bolero::check!`](https://docs.rs/bolero/latest/bolero/macro.check.html) macro:
```rust
pub fn buggy_add(x: u32, y: u32) -> u32 {
if x == 12976 && y == 14867 {
return x.wrapping_sub(y);
}
return x.wrapping_add(y);
}
#[test]
fn fuzz_add() {
bolero::check!()
.with_type()
.cloned()
.for_each(|(a, b)| buggy_add(a, b) == a.wrapping_add(b));
}
```
3. Run the test with `cargo bolero`
```console
$ cargo bolero test fuzz_add
# ... some moments later ...
======================== Test Failure ========================
Input:
(
12976,
14867,
)
Error:
test returned `false`
==============================================================
```
### Linux Installation
`cargo-bolero` needs a couple of libraries installed to compile. If these libraries aren't
available the requirement can be relaxed by executing `cargo install cargo-bolero --no-default-features -f`
#### Debian/Ubuntu
```bash
$ sudo apt install binutils-dev libunwind-dev
```