I have been doing a lot of randomized testing and fuzzing lately, and I want to document some lessons learned. This isn’t going to be a grand unified theory of fuzzing, but rather a collection of observations useful for people who already do randomized testing. This post will explore three related questions:
There's a fascinating Rust library, loom, which can be used to thoroughly test lock-free data structures. I always wanted to learn how it works. I still do! But recently I accidentally implemented a small toy which, I think, contains some of the loom's ideas, and it seems worthwhile to write about that. The goal here isn't to teach you what you should be using in practice (if you need that, go read loom's docs), but rather to derive a couple of neat ideas from first principles.