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);