pw_fuzzer: Move `Domain` from fuzztest::internal to fuzztest
This CL moves the dummy definition of `Domain<T>` to match the real
location in FuzzTest. This allows fuzzer helpers to specify a return
type instead of using `auto`.
Change-Id: I49810c0f2fe40c97c5b9673c1c3413690331c008
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178213
Reviewed-by: Taylor Cramer <cramertj@google.com>
Commit-Queue: Aaron Green <aarongreen@google.com>
diff --git a/pw_fuzzer/private_overrides/pw_fuzzer/internal/fuzztest.h b/pw_fuzzer/private_overrides/pw_fuzzer/internal/fuzztest.h
index 61066d5..de3b7f3 100644
--- a/pw_fuzzer/private_overrides/pw_fuzzer/internal/fuzztest.h
+++ b/pw_fuzzer/private_overrides/pw_fuzzer/internal/fuzztest.h
@@ -55,7 +55,6 @@
fuzztest::internal::TypeCheckFuzzTest(test_name).IgnoreFunction()
namespace fuzztest {
-namespace internal {
/// Stub for a FuzzTest domain that produces values.
///
@@ -71,6 +70,8 @@
using value_type = T;
};
+namespace internal {
+
/// Stub for a FuzzTest domain that produces containers of values.
///
/// This struct is an extension of `Domain` that add stubs for the methods that
@@ -149,7 +150,7 @@
template <typename T>
auto Arbitrary() {
- return internal::Domain<T>{};
+ return Domain<T>{};
}
////////////////////////////////////////////////////////////////
@@ -159,20 +160,20 @@
// https://github.com/google/fuzztest/blob/main/doc/domains-reference.md#oneof
template <int&... ExplicitArgumentBarrier, typename T, typename... Domains>
-auto OneOf(internal::Domain<T>, Domains...) {
- return internal::Domain<T>{};
+auto OneOf(Domain<T>, Domains...) {
+ return Domain<T>{};
}
// https://github.com/google/fuzztest/blob/main/doc/domains-reference.md#oneof
template <typename T>
auto Just(T) {
- return internal::Domain<T>{};
+ return Domain<T>{};
}
// https://github.com/google/fuzztest/blob/main/doc/domains-reference.md#map
template <int&... ExplicitArgumentBarrier, typename Mapper, typename... Inner>
auto Map(Mapper, Inner...) {
- return internal::Domain<std::decay_t<
+ return Domain<std::decay_t<
std::invoke_result_t<Mapper, typename Inner::value_type&...>>>{};
}
@@ -184,14 +185,14 @@
typename FlatMapper,
typename... Inner>
auto FlatMap(FlatMapper, Inner...) {
- return internal::Domain<
+ return Domain<
typename FlatMapOutputDomain<FlatMapper, Inner...>::value_type>{};
}
// https://github.com/google/fuzztest/blob/main/doc/domains-reference.md#filter
template <int&... ExplicitArgumentBarrier, typename T, typename Pred>
-auto Filter(Pred, internal::Domain<T>) {
- return internal::Domain<T>{};
+auto Filter(Pred, Domain<T>) {
+ return Domain<T>{};
}
////////////////////////////////////////////////////////////////
@@ -271,7 +272,7 @@
// TODO: b/285775246 - Add support for `fuzztest::InRegexp`.
// https://github.com/google/fuzztest/blob/main/doc/domains-reference.md#inregexp-domains
// inline auto InRegexp(std::string_view) {
-// return internal::Domain<std::string_view>{};
+// return Domain<std::string_view>{};
// }
////////////////////////////////////////////////////////////////
@@ -280,12 +281,12 @@
template <typename T>
auto ElementOf(std::initializer_list<T>) {
- return internal::Domain<T>{};
+ return Domain<T>{};
}
template <typename T>
auto BitFlagCombinationOf(std::initializer_list<T>) {
- return internal::Domain<T>{};
+ return Domain<T>{};
}
////////////////////////////////////////////////////////////////
@@ -293,19 +294,19 @@
// https://github.com/google/fuzztest/blob/main/doc/domains-reference.md#container-combinators
template <typename T, int&... ExplicitArgumentBarrier, typename U>
-auto ContainerOf(internal::Domain<U>) {
+auto ContainerOf(Domain<U>) {
return internal::ContainerDomain<T>{};
}
template <template <typename, typename...> class T,
int&... ExplicitArgumentBarrier,
typename U>
-auto ContainerOf(internal::Domain<U>) {
+auto ContainerOf(Domain<U>) {
return internal::ContainerDomain<T<U>>{};
}
template <typename T, int&... ExplicitArgumentBarrier, typename U>
-auto UniqueElementsContainerOf(internal::Domain<U>) {
+auto UniqueElementsContainerOf(Domain<U>) {
return internal::ContainerDomain<T>{};
}
@@ -319,62 +320,62 @@
// https://github.com/google/fuzztest/blob/main/doc/domains-reference.md#container-combinators
template <int&... ExplicitArgumentBarrier, typename T, typename... Domains>
-auto ArrayOf(internal::Domain<T>, Domains... others) {
- return internal::Domain<std::array<T, 1 + sizeof...(others)>>{};
+auto ArrayOf(Domain<T>, Domains... others) {
+ return Domain<std::array<T, 1 + sizeof...(others)>>{};
}
template <int N, int&... ExplicitArgumentBarrier, typename T>
-auto ArrayOf(const internal::Domain<T>&) {
- return internal::Domain<std::array<T, N>>{};
+auto ArrayOf(const Domain<T>&) {
+ return Domain<std::array<T, N>>{};
}
template <typename T, int&... ExplicitArgumentBarrier, typename... Inner>
auto StructOf(Inner...) {
- return internal::Domain<T>{};
+ return Domain<T>{};
}
template <typename T, int&... ExplicitArgumentBarrier>
auto ConstructorOf() {
- return internal::Domain<T>{};
+ return Domain<T>{};
}
template <typename T,
int&... ExplicitArgumentBarrier,
typename U,
typename... Inner>
-auto ConstructorOf(internal::Domain<U>, Inner... inner) {
+auto ConstructorOf(Domain<U>, Inner... inner) {
return ConstructorOf<T>(inner...);
}
template <int&... ExplicitArgumentBarrier, typename T1, typename T2>
-auto PairOf(internal::Domain<T1>, internal::Domain<T2>) {
- return internal::Domain<std::pair<T1, T2>>{};
+auto PairOf(Domain<T1>, Domain<T2>) {
+ return Domain<std::pair<T1, T2>>{};
}
template <int&... ExplicitArgumentBarrier, typename... Inner>
auto TupleOf(Inner...) {
- return internal::Domain<std::tuple<typename Inner::value_type...>>{};
+ return Domain<std::tuple<typename Inner::value_type...>>{};
}
template <typename T, int&... ExplicitArgumentBarrier, typename... Inner>
auto VariantOf(Inner...) {
- return internal::Domain<T>{};
+ return Domain<T>{};
}
template <int&... ExplicitArgumentBarrier, typename... Inner>
auto VariantOf(Inner...) {
- return internal::Domain<std::variant<typename Inner::value_type...>>{};
+ return Domain<std::variant<typename Inner::value_type...>>{};
}
template <template <typename> class Optional,
int&... ExplicitArgumentBarrier,
typename T>
-auto OptionalOf(internal::Domain<T>) {
+auto OptionalOf(Domain<T>) {
return internal::OptionalDomain<Optional<T>>{};
}
template <int&... ExplicitArgumentBarrier, typename T>
-auto OptionalOf(internal::Domain<T> inner) {
+auto OptionalOf(Domain<T> inner) {
return OptionalOf<std::optional>(inner);
}
diff --git a/pw_fuzzer/public/pw_fuzzer/fuzztest.h b/pw_fuzzer/public/pw_fuzzer/fuzztest.h
index 4ca52c9..9e72ec2 100644
--- a/pw_fuzzer/public/pw_fuzzer/fuzztest.h
+++ b/pw_fuzzer/public/pw_fuzzer/fuzztest.h
@@ -49,6 +49,9 @@
namespace pw::fuzzer {
+template <typename T>
+using Domain = fuzztest::Domain<T>;
+
////////////////////////////////////////////////////////////////
// Arbitrary domains
// Additional specializations are provided with the Pigweed domains.