File size: 1,774 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
#include <metal.hpp>

#include "test.hpp"

#define MATRIX(M, N) \
    CHECK((metal::is_invocable<metal::lambda<metal::map> COMMA(N) VALUES(N)>), (BOOL(!N))); \
    CHECK((metal::is_invocable<metal::lambda<metal::map> COMMA(N) NUMBERS(N)>), (BOOL(!N))); \
    CHECK((metal::is_invocable<metal::lambda<metal::map> COMMA(N) PAIRS(N)>), (TRUE)); \
    CHECK((metal::is_invocable<metal::lambda<metal::map> COMMA(N) LISTS(N)>), (BOOL(!N))); \
    CHECK((metal::is_invocable<metal::lambda<metal::map> COMMA(N) MAPS(N)>), (BOOL(!N))); \
    CHECK((metal::is_invocable<metal::lambda<metal::map> COMMA(N) LAMBDAS(N)>), (BOOL(!N))); \
    CHECK((metal::is_invocable<metal::lambda<metal::map>, PAIR(M) COMMA(N) PAIRS(N)>), (BOOL(M >= N))); \
    CHECK((metal::is_invocable<metal::lambda<metal::as_map>, VALUE(M)>), (FALSE)); \
    CHECK((metal::is_invocable<metal::lambda<metal::as_map>, NUMBER(M)>), (FALSE)); \
    CHECK((metal::is_invocable<metal::lambda<metal::as_map>, PAIR(M)>), (FALSE)); \
    CHECK((metal::is_invocable<metal::lambda<metal::as_map>, LIST(M)>), (BOOL(!M))); \
    CHECK((metal::is_invocable<metal::lambda<metal::as_map>, MAP(M)>), (TRUE)); \
    CHECK((metal::is_invocable<metal::lambda<metal::as_map>, LAMBDA(M)>), (FALSE)); \
    CHECK((metal::is_invocable<metal::lambda<metal::as_map>, LAMBDA(_)>), (FALSE)); \
    CHECK((metal::is_map<VALUE(N)>), (FALSE)); \
    CHECK((metal::is_map<NUMBER(N)>), (FALSE)); \
    CHECK((metal::is_map<PAIR(N)>), (FALSE)); \
    CHECK((metal::is_map<LIST(N)>), (BOOL(!N))); \
    CHECK((metal::is_map<MAP(N)>), (TRUE)); \
    CHECK((metal::is_map<LAMBDA(N)>), (FALSE)); \
    CHECK((metal::is_map<LAMBDA(_)>), (FALSE)); \
    CHECK((metal::is_map<metal::list<PAIR(N) COMMA(M) PAIRS(M)>>), (BOOL(N >= M))); \
/**/

GEN(MATRIX)