-
Notifications
You must be signed in to change notification settings - Fork 432
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
93 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
# Contributing to Rand | ||
|
||
Thank you for your interest in contributing to Rand! | ||
|
||
The following is a list of notes and tips for when you want to contribute to | ||
Rand with a PR. | ||
|
||
If you want to make major changes, it is usually best to open an issue to | ||
discuss the idea first. | ||
|
||
Rand doesn't (yet) use rustfmt. It is best to follow the style of the | ||
surrounding code, and try to keep an 80 character line limit. | ||
|
||
|
||
## Documentation | ||
|
||
We especially welcome documentation PRs. | ||
|
||
As of Rust 1.25 there are differences in how stable and nightly render | ||
documentation links. Make sure it works on stable, then nightly should be good | ||
too. One Travis CI build checks for dead links using `cargo-deadlinks`. If you | ||
want to run the check locally: | ||
```sh | ||
cargo install cargo-deadlinks | ||
# It is recommended to remove left-over files from previous compilations | ||
rm -rf /target/doc | ||
cargo doc --no-deps | ||
cargo deadlinks --dir target/doc | ||
``` | ||
|
||
When making changes to code examples in the documentation, make sure they build | ||
with: | ||
```sh | ||
cargo test --doc | ||
``` | ||
|
||
A helpful command to rebuild documentation automatically on save (only works on | ||
Linux): | ||
``` | ||
while inotifywait -r -e close_write src/ rand_core/; do cargo doc; done | ||
``` | ||
|
||
|
||
## Testing | ||
|
||
Rand already contains a number of unit tests, but could use more. Also the | ||
existing ones could use clean-up. Any work on the tests is appreciated. | ||
|
||
Not every change or new bit of functionality requires tests, but if you can | ||
think of a test that adds value, please add it. | ||
|
||
Depending on the code you change, test with one of: | ||
```sh | ||
cargo test | ||
cargo test --package rand_core | ||
# Test log, serde and 128-bit support | ||
cargo test --features serde1,log,nightly | ||
``` | ||
|
||
We want to be able to not only run the unit tests with `std` available, but also | ||
without. Because `thread_rng()` and `FromEntropy` are not available without the | ||
`std` feature, you may have to disable a new test with `#[cfg(feature="std")]`. | ||
In other cases using `::test::rng` with a constant seed is a good option: | ||
```rust | ||
let mut rng = ::test::rng(528); // just pick some number | ||
``` | ||
|
||
Only the unit tests should work in `no_std` mode, we don't want to complicate | ||
the doc-tests. Run the tests with: | ||
```sh | ||
# Test no_std support | ||
cargo test --lib --no-default-features | ||
cargo test --package rand_core --no-default-features | ||
|
||
# Test no_std+alloc support; requires nightly | ||
cargo test --lib --no-default-features --features alloc | ||
``` | ||
|
||
|
||
## Benchmarking | ||
|
||
A lot of code in Rand is performance-sensitive, most of it is expected to be | ||
used in hot loops in some libraries/applications. If you change code in the | ||
`rngs`, `prngs` or `distributions` modules, especially when you see an 'obvious | ||
cleanup', make sure the benchmarks do not regress. It is nice to report the | ||
benchmark results in the PR (or to report nothing's changed). | ||
|
||
```sh | ||
# Benchmarks (requires nightly) | ||
cargo bench | ||
# Some benchmarks have a faster path with i128_support | ||
cargo bench --features=nightly | ||
``` |