//- // Copyright 2018 Jason Lingle // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // This #[cfg] is only here so that CI can test building proptest with the // timeout feature disabled. You do not need it in your code. #[cfg(feature = "timeout")] mod fib { use proptest::prelude::*; // The worst possible way to calculate Fibonacci numbers fn fib(n: u64) -> u64 { if n <= 1 { n } else { fib(n - 1) + fib(n - 2) } } proptest! { #![proptest_config(ProptestConfig { // Setting both fork and timeout is redundant since timeout implies // fork, but both are shown for clarity. fork: true, timeout: 1000, .. ProptestConfig::default() })] // NB We omit #[test] on the test function so that main() can call it. fn test_fib(n in prop::num::u64::ANY) { // For large n, this will variously run for an extremely long time, // overflow the stack, or panic due to integer overflow. assert!(fib(n) >= n); } } // This is just here so that main can call it pub fn do_test_fib() { test_fib(); } } fn main() { #[cfg(feature = "timeout")] fib::do_test_fib(); }