QCValue** vals;
} QCResult;
+typedef struct {
+ uint64_t state;
+ uint64_t mult;
+ uint64_t incr;
+} QCRand_t;
+
typedef int (*QCProp)(int nvals, QCValue** vals);
typedef QCValue* (*QCGenFn)(void);
static int Seed = 0, NTrials = 1000;
+
+int myrand(rand_t* rand) {
+ uint64_t x = rand->state;
+ unsigned count = (unsigned)(x >> 59);
+ rand->state = x * rand->mult + rand->incr;
+ x ^= x >> 18;
+ x = (uint32_t)(x >> 27);
+ return (x >> count | x << (-count & 31));
+}
+
+void mysrand(rand_t* rand, uint64_t seed) {
+ rand->state = 0x4d595df4d0f33173;
+ rand->mult = 6364136223846793005u;
+ rand->incr = 1442695040888963407u;
+ if (seed) {
+ rand->state = seed + rand->incr;
+ (void)myrand(rand);
+ }
+}
+
+
+
+
void qcinit(int seed) {
Seed = (seed ? seed : time(NULL));
srand(Seed);