From c603cd6cef43100aa83a62e15f96fd54c9fb987e Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Fri, 13 Nov 2015 10:08:57 -0800 Subject: 2430 - make room for more transforms --- 074random.cc | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 074random.cc (limited to '074random.cc') diff --git a/074random.cc b/074random.cc new file mode 100644 index 00000000..69ed8b2c --- /dev/null +++ b/074random.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_error << maybe(get(Recipe, r).name) << "'round' requires exactly one ingredient, but got " << inst.to_string() << '\n' << end(); + break; + } + if (!is_mu_number(inst.ingredients.at(0))) { + raise_error << 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) +recipe main [ + 1:number <- round 12.2 +] ++mem: storing 12 in location 1 + +:(before "End Includes") +#include -- cgit 1.4.1-2-gfad0