Hegel 0.3.5
Property-based testing for C++
Loading...
Searching...
No Matches
primitives.h
1#pragma once
2
3#include "hegel/core.h"
4
5namespace hegel::generators {
6
9
15
17 // Concrete IGenerator<T> subclass produced by just(). The schema's
18 // "value" field is a placeholder — the server draws zero entropy for a
19 // constant, so the client parser returns the locally captured value
20 // regardless of what the server echoes back. This means just() works
21 // for any T without requiring T to be JSON-serializable.
22 template <typename T> class JustGenerator : public IGenerator<T> {
23 public:
24 explicit JustGenerator(T value) : value_(std::move(value)) {}
25
26 std::optional<BasicGenerator<T>> as_basic() const override {
27 T v = value_;
28 return BasicGenerator<T>{
29 {{"type", "constant"}, {"value", nullptr}},
30 [v = std::move(v)](const hegel::internal::json::json_raw_ref&) {
31 return v;
32 }};
33 }
34
35 private:
36 T value_;
37 };
39
52 template <typename T> Generator<T> just(T value) {
53 return Generator<T>(new JustGenerator<T>(std::move(value)));
54 }
55
62 inline Generator<std::string> just(const char* value) {
63 return just(std::string(value));
64 }
65
67
68} // namespace hegel::generators
The base class of all generators.
Definition core.h:157
Hegel generators.
Definition core.h:16
Generator< T > just(T value)
Generate a constant value.
Definition primitives.h:52
Generator< bool > booleans()
Generate random boolean values.
*‍/
Definition core.h:94