diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index acd49c59b..ecfece5d0 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -17,6 +17,8 @@ add_executable(yul-phaser yulPhaser/main.cpp yulPhaser/Program.h yulPhaser/Program.cpp + yulPhaser/Random.h + yulPhaser/Random.cpp ) target_link_libraries(yul-phaser PRIVATE solidity Boost::program_options) diff --git a/tools/yulPhaser/Random.cpp b/tools/yulPhaser/Random.cpp new file mode 100644 index 000000000..645afb395 --- /dev/null +++ b/tools/yulPhaser/Random.cpp @@ -0,0 +1,44 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ + +#include + +#include +#include +#include + +#include + +using namespace solidity; + +uint32_t phaser::uniformRandomInt(uint32_t _min, uint32_t _max) +{ + // TODO: Seed must be configurable + static boost::random::mt19937 generator(time(0)); + boost::random::uniform_int_distribution<> distribution(_min, _max); + + return distribution(generator); +} + +uint32_t phaser::binomialRandomInt(uint32_t _numTrials, double _successProbability) +{ + // TODO: Seed must be configurable + static boost::random::mt19937 generator(time(0)); + boost::random::binomial_distribution<> distribution(_numTrials, _successProbability); + + return distribution(generator); +} diff --git a/tools/yulPhaser/Random.h b/tools/yulPhaser/Random.h new file mode 100644 index 000000000..25091ddef --- /dev/null +++ b/tools/yulPhaser/Random.h @@ -0,0 +1,28 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ + +#pragma once + +#include + +namespace solidity::phaser +{ + +uint32_t uniformRandomInt(uint32_t _min, uint32_t _max); +uint32_t binomialRandomInt(uint32_t _numTrials, double _successProbability); + +}