/* This software is licensed by the MIT License, see LICENSE file */ /* Copyright © 2022 Gregory Lirent */ #include #include #include "../include/test.h" #include "../include/random.h" static void init(unsigned int seed) { if (!seed) seed = time(0); printf("\e[36mRandom module initialized with seed: \e[m\e[32m%u\n\e[m", seed); put_separator(); srand(seed); } int random_init(int argc, char** argv) { if (argc < 2) { init(0); } else init(atol(argv[1])); return 0; } vtype_bool random_boolean() { return rand()&1; } vtype_float random_float() { if (rand()&1) { return ((vtype_float)random_uint16() / (vtype_float)random_int16()) * -1; } return (vtype_float)random_uint16() / (vtype_float)random_int16(); } vtype_double random_double() { if (rand()&1) { return ((vtype_double)random_uint32() / (vtype_double)random_int32()) * -1; } return (vtype_double)random_uint32() / (vtype_double)random_int32(); } vtype_ldouble random_ldouble() { if (rand()&1) { return ((vtype_ldouble)random_uint64() / (vtype_ldouble)random_int64()) * -1; } return (vtype_ldouble)random_uint64() / (vtype_ldouble)random_int64(); } vtype_int8 random_int8() { return random_uint8(); } vtype_int16 random_int16() { return random_uint16(); } vtype_int32 random_int32() { return rand() | ((rand()&1) << 31); } vtype_uint8 random_uint8() { return rand() % 0x100; } vtype_uint16 random_uint16() { return rand() % 0x10000; } vtype_uint32 random_uint32() { return (rand()<<1) | (rand()&1); } vtype_uint64 random_uint64() { return random_int32() * random_int32(); } vtype_int64 random_int64() { return random_uint32() * random_uint32(); }