ZeroErr
Loading...
Searching...
No Matches
domain.h
Go to the documentation of this file.
1#pragma once
3
6
8
9namespace zeroerr {
10
11
20template <typename ValueType, typename CorpusType = ValueType>
21class Domain {
22public:
23 virtual ~Domain() = default;
24
25 virtual CorpusType GetRandomCorpus(Rng& rng) const = 0;
26 virtual ValueType GetRandomValue(Rng& rng) const { return GetValue(GetRandomCorpus(rng)); };
27
28 virtual CorpusType FromValue(const ValueType& v) const = 0;
29 virtual ValueType GetValue(const CorpusType& v) const = 0;
30
31 virtual CorpusType ParseCorpus(IRObject v) const { return IRObject::ToCorpus<CorpusType>(v); }
32 virtual IRObject SerializeCorpus(const CorpusType& v) const { return IRObject::FromCorpus(v); }
33
34 virtual void Mutate(Rng& rng, CorpusType& v, bool only_shrink = false) const = 0;
35 // virtual void MutateSelectedField(Rng& rng, CorpusType& v, unsigned field,
36 // bool only_shrink = false) const {}
37 // virtual unsigned CountNumberOfFields(CorpusType v) const { return 0; }
38};
39
40
47template <typename ValueType, typename CorpusType = ValueType>
48class DomainConvertable : public Domain<ValueType, CorpusType> {
49public:
50 virtual ValueType GetValue(const CorpusType& v) const { return v; }
51 virtual CorpusType FromValue(const ValueType& v) const { return v; }
52};
53
54
55} // namespace zeroerr
56
DomainConvertable is a base class for domains that can be converted to and from a ValueType.
Definition domain.h:48
virtual ValueType GetValue(const CorpusType &v) const
Definition domain.h:50
virtual CorpusType FromValue(const ValueType &v) const
Definition domain.h:51
Domain class for generating random values of a specific type.
Definition domain.h:21
virtual ValueType GetValue(const CorpusType &v) const =0
virtual void Mutate(Rng &rng, CorpusType &v, bool only_shrink=false) const =0
virtual ValueType GetRandomValue(Rng &rng) const
Definition domain.h:26
virtual CorpusType GetRandomCorpus(Rng &rng) const =0
virtual ~Domain()=default
virtual IRObject SerializeCorpus(const CorpusType &v) const
Definition domain.h:32
virtual CorpusType FromValue(const ValueType &v) const =0
virtual CorpusType ParseCorpus(IRObject v) const
Definition domain.h:31
Definition rng.h:30
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_POP
Definition config.h:265
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_PUSH
Definition config.h:218
Definition benchmark.cpp:17
Interface for serializable objects.
Definition serialization.h:43
static std::enable_if< std::is_integral< T >::value||std::is_floating_point< T >::value||std::is_same< T, std::string >::value||std::is_enum< T >::value, IRObject >::type FromCorpus(T val)
Definition serialization.h:145