Here is an example of using the TreeMap
type (blatantly stolen from the standard library):
```rust use blart::TreeMap;
// type inference lets us omit an explicit type signature (which
// would be TreeMap<&str, &str>
in this example).
let mut movie_reviews = TreeMap::new();
// review some movies. let _ = moviereviews.tryinsert("Office Space", "Deals with real issues in the workplace.").unwrap(); let _ = moviereviews.tryinsert("Pulp Fiction", "Masterpiece.").unwrap(); let _ = moviereviews.tryinsert("The Godfather", "Very enjoyable.").unwrap(); let _ = moviereviews.tryinsert("The Blues Brothers", "Eye lyked it a lot.").unwrap();
// check for a specific one. if !moviereviews.containskey("Les Misérables") { println!("We've got {} reviews, but Les Misérables ain't one.", movie_reviews.len()); }
// oops, this review has a lot of spelling mistakes, let's delete it. movie_reviews.remove("The Blues Brothers");
// look up the values associated with some keys. let tofind = ["Up!", "Office Space"]; for movie in &tofind { match movie_reviews.get(movie) { Some(review) => println!("{movie}: {review}"), None => println!("{movie} is unreviewed.") } }
// Look up the value for a key (will panic if the key is not found). println!("Movie review: {}", movie_reviews["Office Space"]);
// iterate over everything. for (movie, review) in &movie_reviews { println!("{movie}: \"{review}\""); } ```
Currently we're using some specific crates (sptr
and in the future back to core::ptr::*
) to ensure that we're compatible with Strict Provenance. The following MIRIFLAGS
setup should enable checking to make sure that we're compatible.
bash
MIRIFLAGS="-Zmiri-strict-provenance -Zmiri-symbolic-alignment-check" cargo +nightly miri test
I think this is useful because we're doing some pointer times with our tagged pointers implementation, mutating the contents of the pointer to store bits of data.
To run the fuzzer I use the command:
bash
cargo +nightly fuzz run -j 8 -s address fuzz_raw_api -- -max_len=32768 -max_total_time=3600 && cargo +nightly fuzz cmin fuzz_raw_api
This will run the fuzzer for a total of 3600 seconds (1 hour), using 8 jobs (half of the total number of cores on my dev box), and using the address sanitizer. The cmin
command is used to compact the corpus after generating new entries.
To generate coverage reports from fuzzing corpus:
```bash
TARGETTRIPLE="x8664-unknown-linux-gnu" cargo +nightly fuzz coverage fuzzrawapi && cargo cov -- show fuzz/target/"$TARGETTRIPLE"/release/fuzzrawapi \ --format=html \ -instr-profile=fuzz/coverage/fuzzraw_api/coverage.profdata \
index.html ```
To run the benchmarks, install cargo-criterion
, then run:
bash
cargo +nightly criterion --history-id "$(git rev-parse --short HEAD)-0"
If you get a "Permission denied" error, update perfeventparanoid:
bash
sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'
For further details please take a look at the following link.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.