#include #include "test.hpp" #define MATRIX(M, N) \ CHECK((metal::not_>), (BOOL(!!N))); \ CHECK((metal::not_>), (metal::or_, metal::not_>)); \ CHECK((metal::not_>), (metal::and_, metal::not_>)); \ CHECK((metal::neg>), (NUMBER(N))); \ CHECK((metal::inc>), (NUMBER(N))); \ CHECK((metal::dec>), (NUMBER(N))); \ CHECK((metal::same, metal::mul>), (TRUE)); \ CHECK((metal::same, metal::pow>), (TRUE)); \ CHECK((metal::same, metal::div>, NUMBER(2)>>), (TRUE)); \ CHECK((metal::same, NUMBER(INC(N))>>, metal::mod>), (TRUE)); \ CHECK((metal::same, NUMBER(INC(M))>, NUMBER(0)>), (TRUE)); \ CHECK((metal::same), (metal::not_, metal::greater>>)); \ CHECK((metal::less), (metal::greater)); \ CHECK((metal::if_), (metal::and_)); \ CHECK((metal::if_), (metal::or_)); \ CHECK((metal::at>), (VALUE(M))); \ CHECK((metal::insert), (metal::append)); \ CHECK((metal::insert), (metal::prepend)); \ CHECK((metal::erase), (metal::take)); \ CHECK((metal::erase), (metal::drop)); \ CHECK((metal::slice>), (LIST(M))); \ CHECK((metal::take), (metal::reverse, NUMBER(CMPL(M))>>)); \ CHECK((metal::rotate), (metal::join, metal::take>)); \ CHECK((metal::sort, metal::lambda>), (metal::reverse>)); \ CHECK((metal::same>), (TRUE)); \ CHECK((metal::flatten>>), (LIST(M))); \ CHECK((metal::accumulate, metal::list<>, LIST(M)>), (metal::accumulate, metal::list<>, metal::reverse>)); \ CHECK((metal::range, NUMBER(0)>), (metal::reverse)); \ CHECK((metal::transform, metal::always, metal::_1>, metal::indices>), (LIST(M))); \ CHECK((metal::transpose>), (MAP(INC(M)))); \ CHECK((metal::transform, metal::_1>, MAP(M)>), (metal::keys)); \ CHECK((metal::transform, metal::_1>, MAP(M)>), (metal::values)); \ CHECK((metal::first>), (metal::keys)); \ CHECK((metal::second>), (metal::values)); \ CHECK((metal::at>), (PAIR(N))); \ CHECK((metal::has_key, NUMBER(N)>), (BOOL(M != N))); \ CHECK((metal::insert_key), (metal::append>)); \ /**/ GEN(MATRIX)