camenduru's picture
thanks to nvidia ❤
8ae5fc5
#include <metal.hpp>
#include "test.hpp"
#define MATRIX(M, N) \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, VALUE(M) COMMA(N) VALUES(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, VALUE(M) COMMA(N) NUMBERS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, VALUE(M) COMMA(N) PAIRS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, VALUE(M) COMMA(N) LISTS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, VALUE(M) COMMA(N) MAPS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, VALUE(M) COMMA(N) LAMBDAS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, NUMBER(M) COMMA(N) VALUES(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, NUMBER(M) COMMA(N) NUMBERS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, NUMBER(M) COMMA(N) PAIRS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, NUMBER(M) COMMA(N) LISTS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, NUMBER(M) COMMA(N) MAPS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, NUMBER(M) COMMA(N) LAMBDAS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, PAIR(M) COMMA(N) VALUES(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, PAIR(M) COMMA(N) NUMBERS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, PAIR(M) COMMA(N) PAIRS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, PAIR(M) COMMA(N) LISTS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, PAIR(M) COMMA(N) MAPS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, PAIR(M) COMMA(N) LAMBDAS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LIST(M) COMMA(N) VALUES(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LIST(M) COMMA(N) NUMBERS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LIST(M) COMMA(N) PAIRS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LIST(M) COMMA(N) LISTS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LIST(M) COMMA(N) MAPS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LIST(M) COMMA(N) LAMBDAS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, MAP(M) COMMA(N) VALUES(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, MAP(M) COMMA(N) NUMBERS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, MAP(M) COMMA(N) PAIRS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, MAP(M) COMMA(N) LISTS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, MAP(M) COMMA(N) MAPS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, MAP(M) COMMA(N) LAMBDAS(N)>), (FALSE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(M) COMMA(N) VALUES(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(M) COMMA(N) NUMBERS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(M) COMMA(N) PAIRS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(M) COMMA(N) LISTS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(M) COMMA(N) MAPS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(M) COMMA(N) LAMBDAS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(_) COMMA(N) VALUES(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(_) COMMA(N) NUMBERS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(_) COMMA(N) PAIRS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(_) COMMA(N) LISTS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(_) COMMA(N) MAPS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::lambda<metal::partial>, LAMBDA(_) COMMA(N) LAMBDAS(N)>), (TRUE)); \
CHECK((metal::is_invocable<metal::partial<LAMBDA(M) COMMA(N) ENUM(N, LAMBDA FIX(M))> COMMA(N) VALUES(N)>), (BOOL(M == 2*N))); \
CHECK((metal::invoke<metal::partial<LAMBDA(_) COMMA(M) ENUM(M, LAMBDA FIX(N))> COMMA(CMPL(M)) VALUES(CMPL(M))>), (EXPR(_)<ENUM(M, LAMBDA FIX(N)) COMMA(AND(M, CMPL(M))) VALUES(CMPL(M))>)); \
/**/
GEN(MATRIX)