#ifndef BANDIT_EQUAL_H #define BANDIT_EQUAL_H #include #include #include "Matcher.h" namespace bandit { namespace Matchers { template std::ostream& operator<<(std::ostream& os, const std::unique_ptr& obj) { return os << *obj; } template class Equal : public Matcher { public: explicit Equal(const T& expectedValue) : Matcher(), _expectedValue(expectedValue) {} template bool matches(const U& actualValue) const { return actualValue == _expectedValue; } bool matches(char* actualValue) const { return strcmp(actualValue, &*_expectedValue) == 0; } bool matches(const char* actualValue) const { return strcmp(actualValue, &*_expectedValue) == 0; } template bool matches(const std::unique_ptr& pointer) const { return matches(pointer.get()); } protected: virtual std::string failure_message_end() const { std::ostringstream ss; ss << "equal <" << _expectedValue << ">"; return ss.str(); } private: const T& _expectedValue; }; template Equal equal(const T& expectedValue) { return Equal(expectedValue); } template bool operator==(const ValueProxy& actualValue, const U& expectedValue) { return actualValue.to == expectedValue; } template bool operator==(const MatchProxy& matchProxy, const U& expectedValue) { matchProxy(equal(expectedValue)); return true; } template bool operator!=(const ValueProxy& actualValue, const U& expectedValue) { return actualValue.to != expectedValue; } template bool operator!=(const MatchProxy& matchProxy, const U& expectedValue) { matchProxy.negate()(equal(expectedValue)); return true; } }} #endif // BANDIT_EQUAL_H