blob: e719e7636c67d28e25f68a6eb0b1a82a27f9820a [file] [log] [blame]
// WARNING: This file is machine generated by fidlgen.
// fidl_experiment = output_index_json
#pragma once
#include <test/unionsandwich/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 UnionSize8Alignment4 = ::test::unionsandwich::UnionSize8Alignment4;
using SandwichUnionSize8Alignment4 = ::test::unionsandwich::SandwichUnionSize8Alignment4;
using UnionSize12Alignment4 = ::test::unionsandwich::UnionSize12Alignment4;
using SandwichUnionSize12Alignment4 = ::test::unionsandwich::SandwichUnionSize12Alignment4;
using StructSize16Alignment8 = ::test::unionsandwich::StructSize16Alignment8;
using UnionSize24Alignment8 = ::test::unionsandwich::UnionSize24Alignment8;
using SandwichUnionSize24Alignment8 = ::test::unionsandwich::SandwichUnionSize24Alignment8;
using UnionSize36Alignment4 = ::test::unionsandwich::UnionSize36Alignment4;
using SandwichUnionSize36Alignment4 = ::test::unionsandwich::SandwichUnionSize36Alignment4;
template <>
struct MinSize<UnionSize8Alignment4> {
operator size_t() {
size_t sizes[] = {0, MinSize<uint32_t>()};
return 1 + *std::max_element(sizes, sizes + 1 + 1);
}
};
template <>
struct Allocate<UnionSize8Alignment4> {
static_assert(1 > 0, "xunion must have at least one member");
UnionSize8Alignment4 operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<UnionSize8Alignment4>());
uint8_t selector;
ZX_ASSERT(src->CopyBytes(&selector, 1));
(*size)++;
UnionSize8Alignment4 out;
switch (selector % 1) {
case 0: {
out.set_variant(Allocate<uint32_t>{}(src, size));
break;
}
}
return out;
}
};
template <>
struct MinSize<SandwichUnionSize8Alignment4> {
operator size_t() {
return MinSize<uint32_t>() + MinSize<::test::unionsandwich::UnionSize8Alignment4>() + MinSize<uint32_t>();
}
};
template <>
struct Allocate<SandwichUnionSize8Alignment4> {
SandwichUnionSize8Alignment4 operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<SandwichUnionSize8Alignment4>());
SandwichUnionSize8Alignment4 out;
const size_t slack_per_member = (*size - MinSize<SandwichUnionSize8Alignment4>()) / 3;
size_t out_size;
out_size = MinSize<uint32_t>() + slack_per_member;
out.before = Allocate<uint32_t>{}(src, &out_size);
out_size = MinSize<::test::unionsandwich::UnionSize8Alignment4>() + slack_per_member;
out.union_ = Allocate<::test::unionsandwich::UnionSize8Alignment4>{}(src, &out_size);
out_size = MinSize<uint32_t>() + slack_per_member;
out.after = Allocate<uint32_t>{}(src, &out_size);
return out;
}
};
template <>
struct MinSize<UnionSize12Alignment4> {
operator size_t() {
size_t sizes[] = {0, MinSize<::std::array<uint8_t, 6>>()};
return 1 + *std::max_element(sizes, sizes + 1 + 1);
}
};
template <>
struct Allocate<UnionSize12Alignment4> {
static_assert(1 > 0, "xunion must have at least one member");
UnionSize12Alignment4 operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<UnionSize12Alignment4>());
uint8_t selector;
ZX_ASSERT(src->CopyBytes(&selector, 1));
(*size)++;
UnionSize12Alignment4 out;
switch (selector % 1) {
case 0: {
out.set_variant(Allocate<::std::array<uint8_t, 6>>{}(src, size));
break;
}
}
return out;
}
};
template <>
struct MinSize<SandwichUnionSize12Alignment4> {
operator size_t() {
return MinSize<uint32_t>() + MinSize<::test::unionsandwich::UnionSize12Alignment4>() + MinSize<int32_t>();
}
};
template <>
struct Allocate<SandwichUnionSize12Alignment4> {
SandwichUnionSize12Alignment4 operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<SandwichUnionSize12Alignment4>());
SandwichUnionSize12Alignment4 out;
const size_t slack_per_member = (*size - MinSize<SandwichUnionSize12Alignment4>()) / 3;
size_t out_size;
out_size = MinSize<uint32_t>() + slack_per_member;
out.before = Allocate<uint32_t>{}(src, &out_size);
out_size = MinSize<::test::unionsandwich::UnionSize12Alignment4>() + slack_per_member;
out.union_ = Allocate<::test::unionsandwich::UnionSize12Alignment4>{}(src, &out_size);
out_size = MinSize<int32_t>() + slack_per_member;
out.after = Allocate<int32_t>{}(src, &out_size);
return out;
}
};
template <>
struct MinSize<StructSize16Alignment8> {
operator size_t() {
return MinSize<uint64_t>() + MinSize<uint64_t>();
}
};
template <>
struct Allocate<StructSize16Alignment8> {
StructSize16Alignment8 operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<StructSize16Alignment8>());
StructSize16Alignment8 out;
const size_t slack_per_member = (*size - MinSize<StructSize16Alignment8>()) / 2;
size_t out_size;
out_size = MinSize<uint64_t>() + slack_per_member;
out.f1 = Allocate<uint64_t>{}(src, &out_size);
out_size = MinSize<uint64_t>() + slack_per_member;
out.f2 = Allocate<uint64_t>{}(src, &out_size);
return out;
}
};
template <>
struct MinSize<UnionSize24Alignment8> {
operator size_t() {
size_t sizes[] = {0, MinSize<::test::unionsandwich::StructSize16Alignment8>()};
return 1 + *std::max_element(sizes, sizes + 1 + 1);
}
};
template <>
struct Allocate<UnionSize24Alignment8> {
static_assert(1 > 0, "xunion must have at least one member");
UnionSize24Alignment8 operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<UnionSize24Alignment8>());
uint8_t selector;
ZX_ASSERT(src->CopyBytes(&selector, 1));
(*size)++;
UnionSize24Alignment8 out;
switch (selector % 1) {
case 0: {
out.set_variant(Allocate<::test::unionsandwich::StructSize16Alignment8>{}(src, size));
break;
}
}
return out;
}
};
template <>
struct MinSize<SandwichUnionSize24Alignment8> {
operator size_t() {
return MinSize<uint32_t>() + MinSize<::test::unionsandwich::UnionSize24Alignment8>() + MinSize<uint32_t>();
}
};
template <>
struct Allocate<SandwichUnionSize24Alignment8> {
SandwichUnionSize24Alignment8 operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<SandwichUnionSize24Alignment8>());
SandwichUnionSize24Alignment8 out;
const size_t slack_per_member = (*size - MinSize<SandwichUnionSize24Alignment8>()) / 3;
size_t out_size;
out_size = MinSize<uint32_t>() + slack_per_member;
out.before = Allocate<uint32_t>{}(src, &out_size);
out_size = MinSize<::test::unionsandwich::UnionSize24Alignment8>() + slack_per_member;
out.union_ = Allocate<::test::unionsandwich::UnionSize24Alignment8>{}(src, &out_size);
out_size = MinSize<uint32_t>() + slack_per_member;
out.after = Allocate<uint32_t>{}(src, &out_size);
return out;
}
};
template <>
struct MinSize<UnionSize36Alignment4> {
operator size_t() {
size_t sizes[] = {0, MinSize<::std::array<uint8_t, 32>>()};
return 1 + *std::max_element(sizes, sizes + 1 + 1);
}
};
template <>
struct Allocate<UnionSize36Alignment4> {
static_assert(1 > 0, "xunion must have at least one member");
UnionSize36Alignment4 operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<UnionSize36Alignment4>());
uint8_t selector;
ZX_ASSERT(src->CopyBytes(&selector, 1));
(*size)++;
UnionSize36Alignment4 out;
switch (selector % 1) {
case 0: {
out.set_variant(Allocate<::std::array<uint8_t, 32>>{}(src, size));
break;
}
}
return out;
}
};
template <>
struct MinSize<SandwichUnionSize36Alignment4> {
operator size_t() {
return MinSize<uint32_t>() + MinSize<::test::unionsandwich::UnionSize36Alignment4>() + MinSize<uint32_t>();
}
};
template <>
struct Allocate<SandwichUnionSize36Alignment4> {
SandwichUnionSize36Alignment4 operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<SandwichUnionSize36Alignment4>());
SandwichUnionSize36Alignment4 out;
const size_t slack_per_member = (*size - MinSize<SandwichUnionSize36Alignment4>()) / 3;
size_t out_size;
out_size = MinSize<uint32_t>() + slack_per_member;
out.before = Allocate<uint32_t>{}(src, &out_size);
out_size = MinSize<::test::unionsandwich::UnionSize36Alignment4>() + slack_per_member;
out.union_ = Allocate<::test::unionsandwich::UnionSize36Alignment4>{}(src, &out_size);
out_size = MinSize<uint32_t>() + slack_per_member;
out.after = Allocate<uint32_t>{}(src, &out_size);
return out;
}
};
} // namespace fuzzing