aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/type.h11
-rw-r--r--test.cc26
2 files changed, 28 insertions, 9 deletions
diff --git a/src/type.h b/src/type.h
index 74e0650..0bcf272 100644
--- a/src/type.h
+++ b/src/type.h
@@ -18,19 +18,16 @@ template <
typename X,
typename Y
>
-using equal_type = typename std::integral_constant<
- bool,
- std::is_same<typename X::value_type, typename Y::value_type>::value
+using EqualType = typename std::is_same<
+ typename X::value_type,
+ typename Y::value_type
>::type;
template <
typename X,
typename Y
>
-using equal_value = typename std::integral_constant<
- bool,
- X::value == Y::value
->::type;
+using EqualValue = Boolean<X::value == Y::value>;
}
diff --git a/test.cc b/test.cc
index 5b4467a..8ae99a7 100644
--- a/test.cc
+++ b/test.cc
@@ -9,8 +9,27 @@
int main(int, char **) { }
-template <typename Element>
-using quadruple = tav::Multiply<tav::Int<4>, Element>;
+// equality
+
+static_assert(
+ std::is_same<tav::Boolean<true>, tav::EqualType<tav::Int<1>, tav::Int<2>>>::value,
+ "(EqualType 1 2) != #t"
+);
+
+static_assert(
+ std::is_same<tav::Boolean<false>, tav::EqualType<tav::Int<1>, tav::Size<1>>>::value,
+ "(EqualType (int 1) (size 2)) != #f"
+);
+
+static_assert(
+ std::is_same<tav::Boolean<true>, tav::EqualValue<tav::Int<1>, tav::Size<1>>>::value,
+ "(equal? (int 1) (size 1)) != #t"
+);
+
+static_assert(
+ std::is_same<tav::Boolean<false>, tav::EqualValue<tav::Int<1>, tav::Int<2>>>::value,
+ "(equal? 1 2) != #f"
+);
// basic math operations
@@ -147,6 +166,9 @@ static_assert(
// list map
+template <typename Element>
+using quadruple = tav::Multiply<tav::Int<4>, Element>;
+
static_assert(
std::is_same<tav::List<tav::Int<4>, tav::Int<8>, tav::Int<12>>::type, tav::Map<quadruple, tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type>::type>::value,
"(map quadruple (list 1 2 3)) != (list 4 8 12)"