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