File size: 4,710 Bytes
8ae5fc5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <metal.hpp>
#include "test.hpp"
#define MATRIX(M, N) \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) VALUES(M) COMMA(AND(M, N)) VALUES(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) VALUES(M) COMMA(AND(M, N)) NUMBERS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) VALUES(M) COMMA(AND(M, N)) PAIRS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) VALUES(M) COMMA(AND(M, N)) LISTS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) VALUES(M) COMMA(AND(M, N)) MAPS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) VALUES(M) COMMA(AND(M, N)) LAMBDAS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) NUMBERS(M) COMMA(AND(M, N)) VALUES(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) NUMBERS(M) COMMA(AND(M, N)) NUMBERS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) NUMBERS(M) COMMA(AND(M, N)) PAIRS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) NUMBERS(M) COMMA(AND(M, N)) LISTS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) NUMBERS(M) COMMA(AND(M, N)) MAPS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) NUMBERS(M) COMMA(AND(M, N)) LAMBDAS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) PAIRS(M) COMMA(AND(M, N)) VALUES(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) PAIRS(M) COMMA(AND(M, N)) NUMBERS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) PAIRS(M) COMMA(AND(M, N)) PAIRS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) PAIRS(M) COMMA(AND(M, N)) LISTS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) PAIRS(M) COMMA(AND(M, N)) MAPS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) PAIRS(M) COMMA(AND(M, N)) LAMBDAS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LISTS(M) COMMA(AND(M, N)) VALUES(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LISTS(M) COMMA(AND(M, N)) NUMBERS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LISTS(M) COMMA(AND(M, N)) PAIRS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LISTS(M) COMMA(AND(M, N)) LISTS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LISTS(M) COMMA(AND(M, N)) MAPS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LISTS(M) COMMA(AND(M, N)) LAMBDAS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) MAPS(M) COMMA(AND(M, N)) VALUES(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) MAPS(M) COMMA(AND(M, N)) NUMBERS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) MAPS(M) COMMA(AND(M, N)) PAIRS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) MAPS(M) COMMA(AND(M, N)) LISTS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) MAPS(M) COMMA(AND(M, N)) MAPS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) MAPS(M) COMMA(AND(M, N)) LAMBDAS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LAMBDAS(M) COMMA(AND(M, N)) VALUES(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LAMBDAS(M) COMMA(AND(M, N)) NUMBERS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LAMBDAS(M) COMMA(AND(M, N)) PAIRS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LAMBDAS(M) COMMA(AND(M, N)) LISTS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LAMBDAS(M) COMMA(AND(M, N)) MAPS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::same> COMMA(OR(M, N)) LAMBDAS(M) COMMA(AND(M, N)) LAMBDAS(N)>), (TRUE)); \
CHECK((metal::same<VALUES(M) COMMA(AND(M, N)) VALUES(N)>), (BOOL(M < 2 && N < 2))); \
CHECK((metal::same<ENUM(M, VALUE FIX(N))>), (TRUE)); \
/**/
GEN(MATRIX)
|