123456789101112131415161718192021222324252627282930313233 |
- // 310-Gen-VariablesInGenerator.cpp
- // Shows how to use variables when creating generators.
- // Note that using variables inside generators is dangerous and should
- // be done only if you know what you are doing, because the generators
- // _WILL_ outlive the variables -- thus they should be either captured
- // by value directly, or copied by the generators during construction.
- #include <catch2/catch.hpp>
- TEST_CASE("Generate random doubles across different ranges",
- "[generator][example][advanced]") {
- // Workaround for old libstdc++
- using record = std::tuple<double, double>;
- // Set up 3 ranges to generate numbers from
- auto r = GENERATE(table<double, double>({
- record{3, 4},
- record{-4, -3},
- record{10, 1000}
- }));
- // This will not compile (intentionally), because it accesses a variable
- // auto number = GENERATE(take(50, random(std::get<0>(r), std::get<1>(r))));
- // GENERATE_COPY copies all variables mentioned inside the expression
- // thus this will work.
- auto number = GENERATE_COPY(take(50, random(std::get<0>(r), std::get<1>(r))));
- REQUIRE(std::abs(number) > 0);
- }
- // Compiling and running this file will result in 150 successful assertions
|