libcdsb/tests/src/random.c
2022-06-03 11:54:22 +03:00

82 lines
1.8 KiB
C

/* This software is licensed by the MIT License, see LICENSE file */
/* Copyright © 2022 Gregory Lirent */
#include <time.h>
#include <stdlib.h>
#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();
}