arudradey's picture
Upload folder using huggingface_hub
00df61d verified
Raw
History Blame Contribute Delete
1.84 kB
// Copyright 2021 The Emscripten Authors. All rights reserved.
// Emscripten is available under two separate licenses, the MIT license and the
// University of Illinois/NCSA Open Source License. Both these licenses can be
// found in the LICENSE file.
// Original Source that was modified:
// https://github.com/WebAssembly/binaryen/blob/main/src/tools/fuzzing/random.cpp
#include "random.h"
namespace wasmfs {
int8_t Random::get() {
if (pos == bytes.size()) {
// We ran out of input; go back to the start for more.
finishedInput = true;
pos = 0;
xorFactor++;
}
return bytes[pos++] ^ xorFactor;
}
int16_t Random::get16() {
auto temp = uint16_t(get()) << 8;
return temp | uint16_t(get());
}
int32_t Random::get32() {
auto temp = uint32_t(get16()) << 16;
return temp | uint32_t(get16());
}
int64_t Random::get64() {
auto temp = uint64_t(get32()) << 32;
return temp | uint64_t(get32());
}
uint32_t Random::upTo(uint32_t x) {
if (x == 0) {
return 0;
}
uint32_t raw;
if (x <= 255) {
raw = get();
} else if (x <= 65535) {
raw = get16();
} else {
raw = get32();
}
auto ret = raw % x;
// use extra bits as "noise" for later
xorFactor += raw / x;
return ret;
}
// Returns a random length string of random characters.
std::string Random::getString(int8_t size) {
static const char alphanum[] = "0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
std::string ret;
ret.reserve(size);
for (int i = 0; i < size; ++i) {
ret += alphanum[upTo(sizeof(alphanum) - 1)];
}
return ret;
}
// Returns a random length string of the same character.
std::string Random::getSingleSymbolString(uint32_t length) {
return std::string(length, getString(1)[0]);
}
} // namespace wasmfs