diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-07-27 21:58:47 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-07-27 21:58:47 -0700 |
commit | b462361dbedb1ebaa76fdeddacca562e9d86a956 (patch) | |
tree | a249a242c0dce38e8922490dd2b944c5f3f2a30f /067random.cc | |
parent | 6d1e3dbaf203daa2edccfe7da1d49422e463e3d7 (diff) | |
download | mu-b462361dbedb1ebaa76fdeddacca562e9d86a956.tar.gz |
3154 - reorg before making 'random' more testable
Diffstat (limited to '067random.cc')
-rw-r--r-- | 067random.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/067random.cc b/067random.cc new file mode 100644 index 00000000..45bcfd7d --- /dev/null +++ b/067random.cc @@ -0,0 +1,62 @@ +:(before "End Primitive Recipe Declarations") +RANDOM, +:(before "End Primitive Recipe Numbers") +put(Recipe_ordinal, "random", RANDOM); +:(before "End Primitive Recipe Checks") +case RANDOM: { + break; +} +:(before "End Primitive Recipe Implementations") +case RANDOM: { + // todo: limited range of numbers, might be imperfectly random + // todo: thread state in extra ingredients and products + products.resize(1); + products.at(0).push_back(rand()); + break; +} + +:(before "End Primitive Recipe Declarations") +MAKE_RANDOM_NONDETERMINISTIC, +:(before "End Primitive Recipe Numbers") +put(Recipe_ordinal, "make-random-nondeterministic", MAKE_RANDOM_NONDETERMINISTIC); +:(before "End Primitive Recipe Checks") +case MAKE_RANDOM_NONDETERMINISTIC: { + break; +} +:(before "End Primitive Recipe Implementations") +case MAKE_RANDOM_NONDETERMINISTIC: { + srand(time(NULL)); + break; +} + +:(before "End Primitive Recipe Declarations") +ROUND, +:(before "End Primitive Recipe Numbers") +put(Recipe_ordinal, "round", ROUND); +:(before "End Primitive Recipe Checks") +case ROUND: { + if (SIZE(inst.ingredients) != 1) { + raise << maybe(get(Recipe, r).name) << "'round' requires exactly one ingredient, but got '" << inst.original_string << "'\n" << end(); + break; + } + if (!is_mu_number(inst.ingredients.at(0))) { + raise << maybe(get(Recipe, r).name) << "first ingredient of 'round' should be a number, but got '" << inst.ingredients.at(0).original_string << "'\n" << end(); + break; + } + break; +} +:(before "End Primitive Recipe Implementations") +case ROUND: { + products.resize(1); + products.at(0).push_back(rint(ingredients.at(0).at(0))); + break; +} + +:(scenario round_to_nearest_integer) +def main [ + 1:number <- round 12.2 +] ++mem: storing 12 in location 1 + +:(before "End Includes") +#include <math.h> |