blob: d1523706b393d7e1760b0a71bba09e29323e9123 [file] [log] [blame]
// WARNING: This file is machine generated by fidlgen.
// fidl_experiment = output_index_json
#pragma once
#include <test/arrays/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 StructSmallArray = ::test::arrays::StructSmallArray;
using StructLargeArray = ::test::arrays::StructLargeArray;
using TableSmallArray = ::test::arrays::TableSmallArray;
using TableLargeArray = ::test::arrays::TableLargeArray;
using UnionSmallArray = ::test::arrays::UnionSmallArray;
using UnionLargeArray = ::test::arrays::UnionLargeArray;
template <>
struct MinSize<StructSmallArray> {
operator size_t() {
return MinSize<::std::array<uint32_t, 2>>();
}
};
template <>
struct Allocate<StructSmallArray> {
StructSmallArray operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<StructSmallArray>());
StructSmallArray out;
const size_t slack_per_member = (*size - MinSize<StructSmallArray>()) / 1;
size_t out_size;
out_size = MinSize<::std::array<uint32_t, 2>>() + slack_per_member;
out.a = Allocate<::std::array<uint32_t, 2>>{}(src, &out_size);
return out;
}
};
template <>
struct MinSize<StructLargeArray> {
operator size_t() {
return MinSize<::std::array<uint32_t, 100>>();
}
};
template <>
struct Allocate<StructLargeArray> {
StructLargeArray operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<StructLargeArray>());
StructLargeArray out;
const size_t slack_per_member = (*size - MinSize<StructLargeArray>()) / 1;
size_t out_size;
out_size = MinSize<::std::array<uint32_t, 100>>() + slack_per_member;
out.a = Allocate<::std::array<uint32_t, 100>>{}(src, &out_size);
return out;
}
};
template <>
struct MinSize<TableSmallArray> {
operator size_t() {
return MinSize<::std::array<uint32_t, 2>>();
}
};
template <>
struct Allocate<TableSmallArray> {
TableSmallArray operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<TableSmallArray>());
TableSmallArray out;
const size_t slack_per_member = (*size - MinSize<TableSmallArray>()) / 1;
size_t out_size;
out_size = MinSize<::std::array<uint32_t, 2>>() + slack_per_member;
out.set_a(Allocate<::std::array<uint32_t, 2>>{}(src, &out_size));
return out;
}
};
template <>
struct MinSize<TableLargeArray> {
operator size_t() {
return MinSize<::std::array<uint32_t, 100>>();
}
};
template <>
struct Allocate<TableLargeArray> {
TableLargeArray operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<TableLargeArray>());
TableLargeArray out;
const size_t slack_per_member = (*size - MinSize<TableLargeArray>()) / 1;
size_t out_size;
out_size = MinSize<::std::array<uint32_t, 100>>() + slack_per_member;
out.set_a(Allocate<::std::array<uint32_t, 100>>{}(src, &out_size));
return out;
}
};
template <>
struct MinSize<UnionSmallArray> {
operator size_t() {
size_t sizes[] = {0, MinSize<::std::array<uint32_t, 2>>()};
return 1 + *std::max_element(sizes, sizes + 1 + 1);
}
};
template <>
struct Allocate<UnionSmallArray> {
static_assert(1 > 0, "xunion must have at least one member");
UnionSmallArray operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<UnionSmallArray>());
uint8_t selector;
ZX_ASSERT(src->CopyBytes(&selector, 1));
(*size)++;
UnionSmallArray out;
switch (selector % 1) {
case 0: {
out.set_a(Allocate<::std::array<uint32_t, 2>>{}(src, size));
break;
}
}
return out;
}
};
template <>
struct MinSize<UnionLargeArray> {
operator size_t() {
size_t sizes[] = {0, MinSize<::std::array<uint32_t, 100>>()};
return 1 + *std::max_element(sizes, sizes + 1 + 1);
}
};
template <>
struct Allocate<UnionLargeArray> {
static_assert(1 > 0, "xunion must have at least one member");
UnionLargeArray operator()(FuzzInput* src, size_t* size) {
ZX_ASSERT(*size >= MinSize<UnionLargeArray>());
uint8_t selector;
ZX_ASSERT(src->CopyBytes(&selector, 1));
(*size)++;
UnionLargeArray out;
switch (selector % 1) {
case 0: {
out.set_a(Allocate<::std::array<uint32_t, 100>>{}(src, size));
break;
}
}
return out;
}
};
} // namespace fuzzing