From ca55a318e9b16bed3f249c169964ad7be8e6fb2a Mon Sep 17 00:00:00 2001
From: badair
Date: Tue, 12 Apr 2016 03:19:28 -0500
Subject: [PATCH] adding tests
---
doc/html/callable_traits/ref.html | 18 ++--
doc/html/index.html | 2 +-
test/add_function_cv.cpp | 105 +++++++++++++++++++
test/is_lvalue_qualified.cpp | 165 ++++++++++++++++++++++++++++++
test/is_rvalue_qualified.cpp | 165 ++++++++++++++++++++++++++++++
5 files changed, 442 insertions(+), 13 deletions(-)
create mode 100644 test/add_function_cv.cpp
create mode 100644 test/is_lvalue_qualified.cpp
create mode 100644 test/is_rvalue_qualified.cpp
diff --git a/doc/html/callable_traits/ref.html b/doc/html/callable_traits/ref.html
index 93a0381..25f87ea 100644
--- a/doc/html/callable_traits/ref.html
+++ b/doc/html/callable_traits/ref.html
@@ -52,7 +52,7 @@
is_lvalue_qualified
is_reference_qualified
is_rvalue_qualified
-is_unqualified
+is_qualified
is_volatile_qualified
max_arity
min_arity
@@ -84,14 +84,8 @@
#include<callable_traits/add_calling_convention.hpp>
-
-
#include<callable_traits/add_function_const.hpp>
-
-
#include<callable_traits/add_function_cv.hpp>
-
-
#include<callable_traits/add_function_lvalue.hpp>
#include<callable_traits/add_function_rvalue.hpp>
#include<callable_traits/add_varargs.hpp>
@@ -113,7 +107,7 @@
#include<callable_traits/is_lvalue_qualified.hpp>
#include<callable_traits/is_reference_qualified.hpp>
#include<callable_traits/is_rvalue_qualified.hpp>
- #include<callable_traits/is_unqualified.hpp>
+ #include<callable_traits/is_qualified.hpp>
#include<callable_traits/is_volatile_qualified.hpp>
#include<callable_traits/max_arity.hpp>
#include<callable_traits/min_arity.hpp>
@@ -1458,17 +1452,17 @@ because ScaryMonster is the narrowest of all _1 parameters. */
TODO
- [is_unqualified]
+ [is_qualified]
diff --git a/doc/html/index.html b/doc/html/index.html
index eddc360..2e68ebb 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -76,7 +76,7 @@
is_lvalue_qualified
is_reference_qualified
is_rvalue_qualified
-
is_unqualified
+
is_qualified
is_volatile_qualified
max_arity
min_arity
diff --git a/test/add_function_cv.cpp b/test/add_function_cv.cpp
new file mode 100644
index 0000000..03440fa
--- /dev/null
+++ b/test/add_function_cv.cpp
@@ -0,0 +1,105 @@
+/*
+Copyright Barrett Adair 2016
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt)
+*/
+
+#include
+#include
+#include
+#include
+
+#ifndef CT_ASSERT
+#define CT_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
+#endif //CT_ASSERT
+
+struct foo {};
+
+namespace ct = callable_traits;
+
+int main() {
+
+ {
+ using f = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...);
+ using l = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) &;
+ using r = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) && ;
+ using c = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) const;
+ using cl = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) const &;
+ using cr = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) const &&;
+ using v = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) volatile;
+ using vl = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) volatile &;
+ using vr = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) volatile &&;
+ using cv = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) const volatile;
+ using cvl = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) const volatile &;
+ using cvr = void(CALLABLE_TRAITS_DEFAULT_VARARGS_CC foo::*)(...) const volatile &&;
+
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ }
+
+ {
+ using f = void(foo::* volatile)(int, int);
+ using l = void(foo::* volatile)(int, int) &;
+ using r = void(foo::* volatile)(int, int) && ;
+ using c = void(foo::* volatile)(int, int) const;
+ using cl = void(foo::* volatile)(int, int) const &;
+ using cr = void(foo::* volatile)(int, int) const &&;
+ using v = void(foo::* volatile)(int, int) volatile;
+ using vl = void(foo::* volatile)(int, int) volatile &;
+ using vr = void(foo::* volatile)(int, int) volatile &&;
+ using cv = void(foo::* volatile)(int, int) const volatile;
+ using cvl = void(foo::* volatile)(int, int) const volatile &;
+ using cvr = void(foo::* volatile)(int, int) const volatile &&;
+
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ }
+
+ {
+ using f = void();
+ using l = void() &;
+ using r = void() && ;
+ using c = void() const;
+ using cl = void() const &;
+ using cr = void() const &&;
+ using v = void() volatile;
+ using vl = void() volatile &;
+ using vr = void() volatile &&;
+ using cv = void() const volatile;
+ using cvl = void() const volatile &;
+ using cvr = void() const volatile &&;
+
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ CT_ASSERT(std::is_same>{});
+ }
+}
diff --git a/test/is_lvalue_qualified.cpp b/test/is_lvalue_qualified.cpp
new file mode 100644
index 0000000..50ee1b2
--- /dev/null
+++ b/test/is_lvalue_qualified.cpp
@@ -0,0 +1,165 @@
+/*
+Copyright Barrett Adair 2016
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt)
+*/
+
+#include
+#include
+#include
+#include
+
+#ifndef CT_ASSERT
+#define CT_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
+#endif //CT_ASSERT
+
+struct foo {};
+
+namespace ct = callable_traits;
+
+template
+void assert_lvalue_qualified() {
+
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_lvalue_qualified(std::declval()))::value);
+}
+
+
+template
+void assert_not_lvalue_qualified() {
+
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_lvalue_qualified(std::declval()))::value);
+}
+
+int main() {
+
+ {
+ using f = void(foo::*)();
+ using l = void(foo::*)() &;
+ using r = void(foo::*)() && ;
+ using c = void(foo::*)() const;
+ using cl = void(foo::*)() const &;
+ using cr = void(foo::*)() const &&;
+ using v = void(foo::*)() volatile;
+ using vl = void(foo::*)() volatile &;
+ using vr = void(foo::*)() volatile &&;
+ using cv = void(foo::*)() const volatile;
+ using cvl = void(foo::*)() const volatile &;
+ using cvr = void(foo::*)() const volatile &&;
+
+ assert_not_lvalue_qualified();
+ assert_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ }
+
+ {
+ struct f { int operator()() { return 0; } };
+ struct l { int operator()() & { return 0; } };
+ struct r { int operator()() && { return 0; } };
+ struct c { int operator()() const { return 0; } };
+ struct cl { int operator()() const & { return 0; } };
+ struct cr { int operator()() const && { return 0; } };
+ struct v { int operator()() volatile { return 0; } };
+ struct vl { int operator()() volatile & { return 0; } };
+ struct vr { int operator()() volatile && { return 0; } };
+ struct cv { int operator()() const volatile { return 0; } };
+ struct cvl { int operator()() const volatile & { return 0; } };
+ struct cvr { int operator()() const volatile && { return 0; } };
+
+ assert_not_lvalue_qualified();
+ assert_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ assert_lvalue_qualified();
+ assert_not_lvalue_qualified();
+ }
+
+ {
+ using f = void();
+ using l = void() &;
+ using r = void() && ;
+ using c = void() const;
+ using cl = void() const &;
+ using cr = void() const &&;
+ using v = void() volatile;
+ using vl = void() volatile &;
+ using vr = void() volatile &&;
+ using cv = void() const volatile;
+ using cvl = void() const volatile &;
+ using cvr = void() const volatile &&;
+
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ CT_ASSERT(ct::is_lvalue_qualified());
+ CT_ASSERT(!ct::is_lvalue_qualified());
+ }
+
+ assert_not_lvalue_qualified();
+ assert_not_lvalue_qualified();
+}
diff --git a/test/is_rvalue_qualified.cpp b/test/is_rvalue_qualified.cpp
new file mode 100644
index 0000000..66ebeaa
--- /dev/null
+++ b/test/is_rvalue_qualified.cpp
@@ -0,0 +1,165 @@
+/*
+Copyright Barrett Adair 2016
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt)
+*/
+
+#include
+#include
+#include
+#include
+
+#ifndef CT_ASSERT
+#define CT_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
+#endif //CT_ASSERT
+
+struct foo {};
+
+namespace ct = callable_traits;
+
+template
+void assert_rvalue_qualified() {
+
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(decltype(ct::is_rvalue_qualified(std::declval()))::value);
+}
+
+
+template
+void assert_not_rvalue_qualified() {
+
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+ CT_ASSERT(!decltype(ct::is_rvalue_qualified(std::declval()))::value);
+}
+
+int main() {
+
+ {
+ using f = void(foo::*)();
+ using l = void(foo::*)() &;
+ using r = void(foo::*)() && ;
+ using c = void(foo::*)() const;
+ using cl = void(foo::*)() const &;
+ using cr = void(foo::*)() const &&;
+ using v = void(foo::*)() volatile;
+ using vl = void(foo::*)() volatile &;
+ using vr = void(foo::*)() volatile &&;
+ using cv = void(foo::*)() const volatile;
+ using cvl = void(foo::*)() const volatile &;
+ using cvr = void(foo::*)() const volatile &&;
+
+ assert_not_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_rvalue_qualified();
+ }
+
+ {
+ struct f { int operator()() { return 0; } };
+ struct l { int operator()() & { return 0; } };
+ struct r { int operator()() && { return 0; } };
+ struct c { int operator()() const { return 0; } };
+ struct cl { int operator()() const & { return 0; } };
+ struct cr { int operator()() const && { return 0; } };
+ struct v { int operator()() volatile { return 0; } };
+ struct vl { int operator()() volatile & { return 0; } };
+ struct vr { int operator()() volatile && { return 0; } };
+ struct cv { int operator()() const volatile { return 0; } };
+ struct cvl { int operator()() const volatile & { return 0; } };
+ struct cvr { int operator()() const volatile && { return 0; } };
+
+ assert_not_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_not_rvalue_qualified();
+ assert_rvalue_qualified();
+ }
+
+ {
+ using f = void();
+ using l = void() &;
+ using r = void() && ;
+ using c = void() const;
+ using cl = void() const &;
+ using cr = void() const &&;
+ using v = void() volatile;
+ using vl = void() volatile &;
+ using vr = void() volatile &&;
+ using cv = void() const volatile;
+ using cvl = void() const volatile &;
+ using cvr = void() const volatile &&;
+
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(!ct::is_rvalue_qualified());
+ CT_ASSERT(ct::is_rvalue_qualified());
+ }
+
+ assert_not_rvalue_qualified();
+ assert_not_rvalue_qualified();
+}