diff options
| -rw-r--r-- | test.cc | 210 | 
1 files changed, 180 insertions, 30 deletions
@@ -12,155 +12,288 @@ int main(int, char **) { }  // equality  static_assert( -	std::is_same<tav::Boolean<true>, tav::EqualType<tav::Int<1>, tav::Int<2>>>::value, +	std::is_same< +		tav::Boolean<true>, +		tav::EqualType<tav::Int<1>, tav::Int<2>> +	>::value,  	"(EqualType 1 2) != #t"  );  static_assert( -	std::is_same<tav::Boolean<false>, tav::EqualType<tav::Int<1>, tav::Size<1>>>::value, +	std::is_same< +		tav::Boolean<false>, +		tav::EqualType<tav::Int<1>, tav::Size<1>> +	>::value,  	"(EqualType (int 1) (size 2)) != #f"  );  static_assert( -	std::is_same<tav::Boolean<true>, tav::EqualValue<tav::Int<1>, tav::Size<1>>>::value, +	std::is_same< +		tav::Boolean<true>, +		tav::EqualValue<tav::Int<1>, tav::Size<1>> +	>::value,  	"(equal? (int 1) (size 1)) != #t"  );  static_assert( -	std::is_same<tav::Boolean<false>, tav::EqualValue<tav::Int<1>, tav::Int<2>>>::value, +	std::is_same< +		tav::Boolean<false>, +		tav::EqualValue<tav::Int<1>, tav::Int<2>> +	>::value,  	"(equal? 1 2) != #f"  );  // basic math operations  static_assert( -	std::is_same<tav::Int<3>, tav::Add<tav::Int<1>, tav::Int<2>>>::value, +	std::is_same< +		tav::Int<3>, +		tav::Add<tav::Int<1>, tav::Int<2>> +	>::value,  	"(+ 1 2) != 3"  );  static_assert( -	std::is_same<tav::Int<4>, tav::Substract<tav::Int<10>, tav::Int<6>>>::value, +	std::is_same< +		tav::Int<4>, +		tav::Substract<tav::Int<10>, tav::Int<6>> +	>::value,  	"(- 10 6) != 4"  );  static_assert( -	std::is_same<tav::Int<42>, tav::Multiply<tav::Int<2>, tav::Int<21>>>::value, +	std::is_same< +		tav::Int<42>, +		tav::Multiply<tav::Int<2>, tav::Int<21>> +	>::value,  	"(* 2 21) != 42"  );  static_assert( -	std::is_same<tav::Int<5>, tav::Divide<tav::Int<10>, tav::Int<2>>>::value, +	std::is_same< +		tav::Int<5>, +		tav::Divide<tav::Int<10>, tav::Int<2>> +	>::value,  	"(/ 10 2) != 42"  );  // conditionals  static_assert( -	std::is_same<tav::Int<1>, tav::If<true,  tav::Int<1>, tav::Int<2>>::type>::value, +	std::is_same< +		tav::Int<1>, +		tav::If<true, tav::Int<1>, tav::Int<2>>::type +	>::value,  	"(if #t 1 2) != 1"  );  static_assert( -	std::is_same<tav::Int<2>, tav::If<false,  tav::Int<1>, tav::Int<2>>::type>::value, +	std::is_same< +		tav::Int<2>, +		tav::If<false, tav::Int<1>, tav::Int<2>>::type +	>::value,  	"(if #f 1 2) != 2"  );  // cons  static_assert( -	std::is_same<tav::Int<1>, tav::Car<tav::Cons<tav::Int<1>, void>>>::value, +	std::is_same< +		tav::Int<1>, +		tav::Car< +			tav::Cons<tav::Int<1>, void> +		> +	>::value,  	"(car (cons 1 void)) != 1"  );  static_assert( -	std::is_same<tav::Int<1>, tav::Car<tav::Cons<tav::Int<1>, tav::Int<2>>>>::value, +	std::is_same< +		tav::Int<1>, +		tav::Car< +			tav::Cons<tav::Int<1>, tav::Int<2>> +		> +	>::value,  	"(car (cons 1 2)) != 1"  );  static_assert( -	std::is_same<tav::Int<2>, tav::Cdr<tav::Cons<tav::Int<1>, tav::Int<2>>>>::value, +	std::is_same< +		tav::Int<2>, +		tav::Cdr< +			tav::Cons<tav::Int<1>, tav::Int<2>> +		> +	>::value,  	"(cdr (cons 1 2)) != 2"  );  static_assert( -	std::is_same<tav::Int<2>, tav::Car<tav::Cdr<tav::Cons<tav::Int<1>, tav::Cons<tav::Int<2>, tav::Int<3>>>>>>::value, +	std::is_same< +		tav::Int<2>, +		tav::Car< +			tav::Cdr< +				tav::Cons<tav::Int<1>, tav::Cons<tav::Int<2>, tav::Int<3>>> +			> +		> +	>::value,  	"(car (cdr (cons 1 (cons 2 3)))) != 2"  );  // list  static_assert( -	std::is_same<tav::Cons<tav::Int<1>, void>, tav::List<tav::Int<1>>::type>::value, +	std::is_same< +		tav::Cons<tav::Int<1>, void>, +		tav::List<tav::Int<1>>::type +	>::value,  	"(list 1) != (cons 1 void)"  );  static_assert( -	std::is_same<tav::Cons<tav::Int<1>, tav::Cons<tav::Int<2>, void>>, tav::List<tav::Int<1>, tav::Int<2>>::type>::value, +	std::is_same< +		tav::Cons<tav::Int<1>, tav::Cons<tav::Int<2>, void>>, +		tav::List<tav::Int<1>, tav::Int<2>>::type +	>::value,  	"(list 1 2) != (cons 1 (cons 2 void))"  );  // list length  static_assert( -	std::is_same<tav::Size<1>, tav::Length<tav::List<tav::Int<1>>::type>::type>::value, +	std::is_same< +		tav::Size<1>, +		tav::Length< +			tav::List<tav::Int<1>>::type +		>::type +	>::value,  	"(length (list 1)) != 1"  );  static_assert( -	std::is_same<tav::Size<2>, tav::Length<tav::List<tav::Int<1>, tav::Int<2>>::type>::type>::value, +	std::is_same< +		tav::Size<2>, +		tav::Length< +			tav::List<tav::Int<1>, tav::Int<2>>::type +		>::type +	>::value,  	"(length (list 1 2)) != 2"  );  // list nth  static_assert( -	std::is_same<tav::Int<1>, tav::Nth<tav::Size<0>, tav::List<tav::Int<1>>::type>::type>::value, +	std::is_same< +		tav::Int<1>, +		tav::Nth< +			tav::Size<0>, +			tav::List<tav::Int<1>>::type +		>::type +	>::value,  	"(nth 0 (list 1)) != 1"  );  static_assert( -	std::is_same<tav::Int<1>, tav::Nth<tav::Size<0>, tav::List<tav::Int<1>, tav::Int<2>>::type>::type>::value, +	std::is_same< +		tav::Int<1>, +		tav::Nth< +			tav::Size<0>, +			tav::List<tav::Int<1>, tav::Int<2>>::type +		>::type +	>::value,  	"(nth 0 (list 1 2)) != 1"  );  static_assert( -	std::is_same<tav::Int<2>, tav::Nth<tav::Size<1>, tav::List<tav::Int<1>, tav::Int<2>>::type>::type>::value, +	std::is_same< +		tav::Int<2>, +		tav::Nth< +			tav::Size<1>, +			tav::List<tav::Int<1>, tav::Int<2>>::type +		>::type +	>::value,  	"(nth 1 (list 1 2)) != 2"  );  // list take  static_assert( -	std::is_same<tav::Size<1>, tav::Length<tav::Take<tav::Size<1>, tav::List<tav::Int<1>, tav::Int<2>>::type>::type>::type>::value, +	std::is_same< +		tav::Size<1>, +		tav::Length< +			tav::Take< +				tav::Size<1>, +				tav::List<tav::Int<1>, tav::Int<2>>::type +			>::type +		>::type +	>::value,  	"(length (take 1 (list 1 2))) != 1"  );  static_assert( -	std::is_same<tav::Size<2>, tav::Length<tav::Take<tav::Size<2>, tav::List<tav::Int<1>, tav::Int<2>>::type>::type>::type>::value, +	std::is_same< +		tav::Size<2>, +		tav::Length< +			tav::Take< +				tav::Size<2>, +				tav::List<tav::Int<1>, tav::Int<2>>::type +			>::type +		>::type +	>::value,  	"(length (take 2 (list 1 2))) != 2"  );  static_assert( -	std::is_same<tav::Size<2>, tav::Length<tav::Take<tav::Size<3>, tav::List<tav::Int<1>, tav::Int<2>>::type>::type>::type>::value, +	std::is_same< +		tav::Size<2>, +		tav::Length< +			tav::Take< +				tav::Size<3>, +				tav::List<tav::Int<1>, tav::Int<2>>::type +			>::type +		>::type +	>::value,  	"(length (take 3 (list 1 2))) != 2"  );  // list concatenate  static_assert( -	std::is_same<tav::Size<2>, tav::Length<tav::Concatenate<tav::List<tav::Int<1>>::type, tav::List<tav::Int<2>>::type>::type>::type>::value, +	std::is_same< +		tav::Size<2>, +		tav::Length< +			tav::Concatenate< +				tav::List<tav::Int<1>>::type, +				tav::List<tav::Int<2>>::type +			>::type +		>::type +	>::value,  	"(length (concatenate (list 1) (list 2))) != 2"  );  static_assert( -	std::is_same<tav::Size<4>, tav::Length<tav::Concatenate<tav::List<tav::Int<1>, tav::Int<2>>::type, tav::List<tav::Int<3>, tav::Int<4>>::type>::type>::type>::value, +	std::is_same< +		tav::Size<4>, +		tav::Length< +			tav::Concatenate< +				tav::List<tav::Int<1>, tav::Int<2>>::type, +				tav::List<tav::Int<3>, tav::Int<4>>::type +			>::type +		>::type +	>::value,  	"(length (concatenate (list 1 2) (list 3 4))) != 4"  );  // list fold  static_assert( -	std::is_same<tav::Int<6>, tav::Fold<tav::Add, tav::Int<0>, tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type>::type>::value, +	std::is_same< +		tav::Int<6>, +		tav::Fold< +			tav::Add, +			tav::Int<0>, +			tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type +		>::type +	>::value,  	"(fold + 0 (list 1 2 3)) != 6"  ); @@ -170,20 +303,37 @@ template <typename Element>  using quadruple = tav::Multiply<tav::Int<4>, Element>;  static_assert( -	std::is_same<tav::List<tav::Int<4>, tav::Int<8>, tav::Int<12>>::type, tav::Map<quadruple, tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type>::type>::value, +	std::is_same< +		tav::List<tav::Int<4>, tav::Int<8>, tav::Int<12>>::type, +		tav::Map< +			quadruple, +			tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type +		>::type +	>::value,  	"(map quadruple (list 1 2 3)) != (list 4 8 12)"  );  // list filter  static_assert( -	std::is_same<tav::List<tav::Int<1>, tav::Int<3>>::type, tav::Filter<tav::Odd, tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type>::type>::value, +	std::is_same< +		tav::List<tav::Int<1>, tav::Int<3>>::type, +		tav::Filter< +			tav::Odd, +			tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type +		>::type +	>::value,  	"(filter odd (list 1 2 3)) != (list 1 3)"  );  // list reverse  static_assert( -	std::is_same<tav::List<tav::Int<3>, tav::Int<2>, tav::Int<1>>::type, tav::Reverse<tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type>::type>::value, +	std::is_same< +		tav::List<tav::Int<3>, tav::Int<2>, tav::Int<1>>::type, +		tav::Reverse< +			tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type +		>::type +	>::value,  	"(reverse (list 1 2 3)) != (list 3 2 1)"  );  | 
