blob: 69e08ca278b33a1ae751fd8b6fd1bc4ec0bf5f7d [file] [log] [blame]
// WARNING: This file is machine generated by fidlgen.
#pragma once
#include <test/name/cpp/fidl.h>
#include "lib/fidl/cpp/fuzzing/traits.h"
#include "lib/fidl/cpp/internal/header.h"
// For ::std::max_element().
#include <algorithm>
// For uint64_t.
#include <stdint.h>
namespace fuzzing {
using Union = ::test::name::Union;
using Table = ::test::name::Table;
using Struct = ::test::name::Struct;
using Service = ::test::name::Service;
using MyEnum = ::test::name::MyEnum;
using MyBits = ::test::name::MyBits;
template <>
struct MinSize<Union> {
operator size_t() {
size_t sizes[] = {0, MinSize<int32_t>()};
return 1 + *std::max_element(sizes, sizes + 1 + 1);
}
};
template <>
struct Allocate<Union> {
static_assert(1 > 0, "xunion must have at least one member");
Union operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<Union>());
uint8_t selector;
ZX_ASSERT(src->CopyBytes(&selector, 1));
(*size)++;
Union out;
switch (selector % 1) {
case 0: {
out.set_Field(Allocate<int32_t>{}(src, size));
break;
}
}
return out;
}
};
template <>
struct MinSize<Table> {
operator size_t() { return MinSize<int32_t>(); }
};
template <>
struct Allocate<Table> {
Table operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<Table>());
const size_t slack_per_member = (*size - MinSize<Table>()) / 1;
Table out;
size_t out_size;
out_size = MinSize<int32_t>() + slack_per_member;
out.set_Field(Allocate<int32_t>{}(src, &out_size));
return out;
}
};
template <>
struct MinSize<Struct> {
operator size_t() { return MinSize<int32_t>(); }
};
template <>
struct Allocate<Struct> {
Struct operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<Struct>());
const size_t slack_per_member = (*size - MinSize<Struct>()) / 1;
Struct out;
size_t out_size;
out_size = MinSize<int32_t>() + slack_per_member;
out.Field = Allocate<int32_t>{}(src, &out_size);
return out;
}
};
template <>
struct MinSize<MyEnum> {
operator size_t() { return sizeof(uint64_t); }
};
template <>
struct Allocate<MyEnum> {
MyEnum operator()(FuzzInput* src, size_t* size) {
MyEnum out;
uint64_t selector;
ZX_ASSERT(*size >= sizeof(uint64_t));
ZX_ASSERT(src->CopyObject(&selector));
*size = sizeof(uint64_t);
switch (selector % 2) {
case 0:
out = MyEnum::FOO;
break;
case 1:
out = MyEnum::BAR;
break;
}
return out;
}
};
template <>
struct MinSize<MyBits> {
operator size_t() { return sizeof(MyBits); }
};
template <>
struct Allocate<MyBits> {
MyBits operator()(FuzzInput* src, size_t* size) {
MyBits out;
ZX_ASSERT(*size >= sizeof(MyBits));
ZX_ASSERT(src->CopyObject(&out));
*size = sizeof(MyBits);
return out;
}
};
} // namespace fuzzing