18 if (buffer.empty())
return 0;
20 buffer = buffer.subspan(1);
34 using Sim = std::bitset<S::Size()>;
36 std::vector<S>
real(2);
38 std::vector<Sim>
sim(2);
43 auto it =
real[idx].begin();
44 unsigned first = S::Size();
45 unsigned last = S::Size();
46 for (
unsigned i = 0; i < S::Size(); ++i) {
47 bool match = (it !=
real[idx].end()) && *it == i;
76 unsigned dest = ((
args & 7) *
sim.size()) >> 3;
77 unsigned src = (((
args >> 3) & 7) *
sim.size()) >> 3;
78 unsigned aux = (((
args >> 6) & 3) *
sim.size()) >> 2;
80 assert((
sim.empty() && dest == 0 &&
src == 0 && aux == 0) ||
81 (!
sim.empty() && dest <
sim.size() &&
src <
sim.size() && aux <
sim.size()));
89 unsigned val =
ReadByte(buffer) % S::Size();
94 }
else if (dest <
sim.size() &&
command-- == 0) {
96 unsigned val =
ReadByte(buffer) % S::Size();
99 real[dest].Reset(val);
101 }
else if (dest <
sim.size() &&
command-- == 0) {
103 unsigned val =
ReadByte(buffer) % S::Size();
108 }
else if (
sim.size() < 4 &&
command-- == 0) {
110 sim.resize(
sim.size() + 1);
113 }
else if (
sim.size() < 4 &&
command-- == 0) {
115 unsigned val =
ReadByte(buffer) % S::Size();
116 std::bitset<S::Size()>
newset;
119 real.push_back(S::Singleton(val));
121 }
else if (dest <
sim.size() &&
command-- == 0) {
126 for (
unsigned i = 0; i < S::Size(); ++i) {
127 if (rng.randbool()) {
133 }
else if (dest <
sim.size() &&
command-- == 0) {
135 unsigned r1 = rng.randrange(S::Size());
136 unsigned r2 = rng.randrange(S::Size());
137 unsigned r3 = rng.randrange(S::Size());
167 }
else if (
sim.size() < 4 &&
command-- == 0) {
169 unsigned r1 = rng.randrange(S::Size());
170 unsigned r2 = rng.randrange(S::Size());
176 }
else if (dest <
sim.size() &&
command-- == 0) {
178 unsigned len =
ReadByte(buffer) % S::Size();
181 for (
unsigned i = 0; i < len; ++i)
sim[dest][i] =
true;
182 real[dest] = S::Fill(len);
186 unsigned val =
ReadByte(buffer) % S::Size();
189 for (
unsigned i = 0; i < S::Size(); ++i) {
197 for (
unsigned i = val; i < S::Size(); ++i) {
275 for (
unsigned i = 0; i <
sim.size(); ++i) {
std::span< const uint8_t > FuzzBufferType
#define LIMITED_WHILE(condition, limit)
Can be used to limit a theoretically unbounded loop.
#define S(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.