#ifndef SCIQLOP_FUZZINGUTILS_H #define SCIQLOP_FUZZINGUTILS_H #include /** * Class that proposes random utility methods */ class RandomGenerator { public: /// @return the unique instance of the random generator static RandomGenerator &instance(); /// Generates a random double between [min, max] double generateDouble(double min, double max); /// Generates a random int between [min, max] int generateInt(int min, int max); /// Returns a random element among the elements of a container. If the container is empty, /// returns an element built by default template ValueType randomChoice(const T &container); private: std::mt19937 m_Mt; explicit RandomGenerator(); }; template ValueType RandomGenerator::randomChoice(const T &container) { if (container.empty()) { return ValueType{}; } auto randomIndex = generateInt(0, container.size() - 1); return container.at(randomIndex); } #endif // SCIQLOP_FUZZINGUTILS