blob: e4507c4ce57a4a3f848dfc15cd7ca1f1e6d730e0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#ifndef BANDIT_BECLOSETO_H
#define BANDIT_BECLOSETO_H
#include "Matcher.h"
namespace bandit { namespace Matchers {
template<typename T>
class BeCloseTo : public Matcher
{
public:
explicit BeCloseTo(const T& expectedValue): Matcher(), _expectedValue(expectedValue), _threshold(0.01) {}
BeCloseTo<T>& within(float threshold)
{
_threshold = threshold;
return *this;
}
template<typename U>
bool matches(const U& actualValue) const
{
return this->subtractable_types_match(actualValue, _expectedValue);
}
protected:
virtual std::string failure_message_end() const
{
std::ostringstream ss;
ss << "be close to <" << _expectedValue << ">" << " (within " << _threshold << ")";
return ss.str();
}
private:
template<typename U, typename V>
bool subtractable_types_match(const U& actualValue, const V& expectedValue) const
{
return (actualValue > (expectedValue - _threshold)) && (actualValue < (expectedValue + _threshold));
}
private:
const T& _expectedValue;
float _threshold;
};
template<typename T>
BeCloseTo<T> be_close_to(const T& expectedValue)
{
return BeCloseTo<T>(expectedValue);
}
}}
#endif // BANDIT_BECLOSETO_H
|