diff --git a/kari.hpp b/kari.hpp index 161b06d..139253a 100644 --- a/kari.hpp +++ b/kari.hpp @@ -504,6 +504,8 @@ namespace kari constexpr auto operator > (us_t, us_t) { return curry(std::greater<>()); } constexpr auto operator <= (us_t, us_t) { return curry(std::less_equal<>()); } constexpr auto operator >= (us_t, us_t) { return curry(std::greater_equal<>()); } + constexpr auto operator == (us_t, us_t) { return curry(std::equal_to<>()); } + constexpr auto operator != (us_t, us_t) { return curry(std::not_equal_to<>()); } constexpr auto operator | (us_t, us_t) { return curry(std::bit_or<>()); } constexpr auto operator & (us_t, us_t) { return curry(std::bit_and<>()); } @@ -524,6 +526,8 @@ namespace kari template < typename A > constexpr auto operator > (A&& a, us_t) { return (_ > _)(std::forward(a)); } template < typename A > constexpr auto operator <= (A&& a, us_t) { return (_ <= _)(std::forward(a)); } template < typename A > constexpr auto operator >= (A&& a, us_t) { return (_ >= _)(std::forward(a)); } + template < typename A > constexpr auto operator == (A&& a, us_t) { return (_ == _)(std::forward(a)); } + template < typename A > constexpr auto operator != (A&& a, us_t) { return (_ != _)(std::forward(a)); } template < typename A > constexpr auto operator | (A&& a, us_t) { return (_ | _)(std::forward(a)); } template < typename A > constexpr auto operator & (A&& a, us_t) { return (_ & _)(std::forward(a)); } @@ -544,6 +548,8 @@ namespace kari template < typename A > constexpr auto operator > (us_t, A&& a) { return fflip(_ > _)(std::forward(a)); } template < typename A > constexpr auto operator <= (us_t, A&& a) { return fflip(_ <= _)(std::forward(a)); } template < typename A > constexpr auto operator >= (us_t, A&& a) { return fflip(_ >= _)(std::forward(a)); } + template < typename A > constexpr auto operator == (us_t, A&& a) { return fflip(_ == _)(std::forward(a)); } + template < typename A > constexpr auto operator != (us_t, A&& a) { return fflip(_ != _)(std::forward(a)); } template < typename A > constexpr auto operator | (us_t, A&& a) { return fflip(_ | _)(std::forward(a)); } template < typename A > constexpr auto operator & (us_t, A&& a) { return fflip(_ & _)(std::forward(a)); } diff --git a/tests/tests.cpp b/tests/tests.cpp index 64ca0d4..e66edc3 100644 --- a/tests/tests.cpp +++ b/tests/tests.cpp @@ -207,17 +207,32 @@ TEST_CASE("kari_feature") { REQUIRE((_ / 2)(84) == 42); REQUIRE((_ % 100)(142) == 42); + REQUIRE((_ == 42)(42)); + REQUIRE((_ != 42)(40)); + REQUIRE_FALSE((_ == 42)(40)); + REQUIRE_FALSE((_ != 42)(42)); + REQUIRE((40 + _)(2) == 42); REQUIRE((44 - _)(2) == 42); REQUIRE((21 * _)(2) == 42); REQUIRE((84 / _)(2) == 42); REQUIRE((142 % _)(100) == 42); + REQUIRE((42 == _)(42)); + REQUIRE((42 != _)(40)); + REQUIRE_FALSE((42 == _)(40)); + REQUIRE_FALSE((42 != _)(42)); + REQUIRE((_ + _)(40,2) == 42); REQUIRE((_ - _)(44,2) == 42); REQUIRE((_ * _)(21,2) == 42); REQUIRE((_ / _)(84,2) == 42); REQUIRE((_ % _)(142,100) == 42); + + REQUIRE((_ == _)(42,42)); + REQUIRE((_ != _)(42,40)); + REQUIRE_FALSE((_ == _)(42,40)); + REQUIRE_FALSE((_ != _)(42,42)); } SECTION("ref_functor") { REQUIRE(curry(minus3_gf())(1,2,3) == -4);