6 #include "common/err.h"
8 UwUVMValue uwu_random(UwUVMArgs *args)
10 uwuutil_require_exact("random.random", args, 2);
12 UwUVMValue value0 = uwuvm_get_arg(args, 0);
14 if (value0.type != &uwuint_type)
15 error("type error: random.random requires an integer as $1\n");
17 UwUVMValue value1 = uwuvm_get_arg(args, 1);
19 if (value1.type != &uwuint_type)
20 error("type error: random.random requires an integer as $2\n");
22 long min = uwuint_get(value0);
23 long max = uwuint_get(value1) + 1;
25 long range = max - min;
28 error("type error: range passed to random.random is empty\n");
31 error("type error: range passed to random.random is bigger than random.max");
33 return uwuint_create(min + rand() % range);
36 UwUVMValue uwu_max(UwUVMArgs *args)
38 uwuutil_require_exact("random.max", args, 0);
39 return uwuint_create(RAND_MAX);
42 UwUVMValue uwu_seed(UwUVMArgs *args)
44 uwuutil_require_exact("random.seed", args, 1);
46 UwUVMValue value = uwuvm_get_arg(args, 0);
48 if (value.type != &uwuint_type)
49 error("type error: random.seed requires an integer as $1\n");
51 srand(uwuint_get(value) % RAND_MAX);
52 return uwunil_create();