tcrts 0.1.0

Turing complete rust type system
Documentation
#![recursion_limit = "2048"]

use tcrts::all::*;

type _0 = Zero;
type _1 = Next<_0>;
type _2 = Next<_1>;
type _3 = Next<_2>;

#[test]
fn to_val() {
    assert_eq!(<_0 as ToVal>::VALUE, 0);
    assert_eq!(<_1 as ToVal>::VALUE, 1);
    assert_eq!(<_2 as ToVal>::VALUE, 2);
    assert_eq!(<_3 as ToVal>::VALUE, 3);
}

#[test]
fn peano_eq() {
    type Eq0_0 = <_0 as PeanoEq<_0>>::Output;
    type Eq1_1 = <_1 as PeanoEq<_1>>::Output;
    type Eq0_1 = <_0 as PeanoEq<_1>>::Output;

    assert_eq!(Eq0_0::VALUE, True::VALUE);
    assert_eq!(Eq1_1::VALUE, True::VALUE);
    assert_eq!(Eq0_1::VALUE, False::VALUE);
}

#[test]
fn peano_lt() {
    type Lt0_1 = <_0 as PeanoLt<_1>>::Output;
    type Lt1_2 = <_1 as PeanoLt<_2>>::Output;
    type Lt2_1 = <_2 as PeanoLt<_1>>::Output;

    assert_eq!(Lt0_1::VALUE, True::VALUE);
    assert_eq!(Lt1_2::VALUE, True::VALUE);
    assert_eq!(Lt2_1::VALUE, False::VALUE);
}

#[test]
fn peano_gt() {
    type Gt0_1 = <_0 as PeanoGt<_1>>::Output;
    type Gt1_0 = <_1 as PeanoGt<_0>>::Output;
    type Gt2_1 = <_2 as PeanoGt<_1>>::Output;

    assert_eq!(Gt0_1::VALUE, False::VALUE);
    assert_eq!(Gt1_0::VALUE, True::VALUE);
    assert_eq!(Gt2_1::VALUE, True::VALUE);
}

#[test]
fn peano_geq() {
    type Geq0_0 = <_0 as PeanoGEq<_0>>::Output;
    type Geq1_0 = <_1 as PeanoGEq<_0>>::Output;
    type Geq1_2 = <_1 as PeanoGEq<_2>>::Output;

    assert_eq!(Geq0_0::VALUE, True::VALUE);
    assert_eq!(Geq1_0::VALUE, True::VALUE);
    assert_eq!(Geq1_2::VALUE, False::VALUE);
}

#[test]
fn peano_leq() {
    type Leq0_0 = <_0 as PeanoLEq<_0>>::Output;
    type Leq0_1 = <_0 as PeanoLEq<_1>>::Output;
    type Leq2_1 = <_2 as PeanoLEq<_1>>::Output;

    assert_eq!(Leq0_0::VALUE, True::VALUE);
    assert_eq!(Leq0_1::VALUE, True::VALUE);
    assert_eq!(Leq2_1::VALUE, False::VALUE);
}