1#ifndef HALCHECK_GEN_RANGE_HPP
2#define HALCHECK_GEN_RANGE_HPP
10#include <halcheck/gen/discard.hpp>
11#include <halcheck/gen/sample.hpp>
12#include <halcheck/gen/shrink.hpp>
13#include <halcheck/lib/atom.hpp>
14#include <halcheck/lib/iterator/type_traits.hpp>
15#include <halcheck/lib/type_traits.hpp>
22namespace halcheck {
namespace gen {
25 template<typename T, HALCHECK_REQUIRE(std::is_integral<T>())>
31 template<typename T, HALCHECK_REQUIRE(std::is_floating_point<T>())>
36 return gen::shrink_to(
id, min, min * factor + max * (1 - factor));
39 template<typename T, typename U, HALCHECK_REQUIRE(!std::is_same<T, U>())>
42 return (*
this)(id, V(min), V(max));
45 template<typename T, HALCHECK_REQUIRE(lib::is_forward_iterator<T>())>
51extern template unsigned char range_t::operator()(
lib::atom,
unsigned char,
unsigned char)
const;
52extern template signed char range_t::operator()(
lib::atom,
signed char,
signed char)
const;
53extern template char range_t::operator()(
lib::atom,
char,
char)
const;
54extern template unsigned short range_t::operator()(
lib::atom,
unsigned short,
unsigned short)
const;
55extern template signed short range_t::operator()(
lib::atom,
signed short,
signed short)
const;
56extern template unsigned int range_t::operator()(
lib::atom,
unsigned int,
unsigned int)
const;
57extern template signed int range_t::operator()(
lib::atom,
signed int,
signed int)
const;
58extern template unsigned long range_t::operator()(
lib::atom,
unsigned long,
unsigned long)
const;
59extern template signed long range_t::operator()(
lib::atom,
signed long,
signed long)
const;
60extern template unsigned long long range_t::operator()(
lib::atom,
unsigned long long,
unsigned long long)
const;
61extern template signed long long range_t::operator()(
lib::atom,
signed long long,
signed long long)
const;
62extern template float range_t::operator()(
lib::atom,
float,
float)
const;
63extern template double range_t::operator()(
lib::atom,
double,
double)
const;
64extern template long double range_t::operator()(
lib::atom,
long double,
double)
const;
void guard(bool cond)
Throws a gen::discard_exception if the given condition is false.
static const range_t range
Generates a random value in an closed-open interval.
Definition range.hpp:93
HALCHECK_INLINE_CONSTEXPR struct halcheck::gen::@11 sample
Obtains a random value.
lib::variant< lib::symbol, lib::number > atom
An atom is either a symbol or a number.
Definition atom.hpp:194
typename std::common_type< Args... >::type common_type_t
An implementation of std::common_type_t.
Definition type_traits.hpp:133