#include <cassert>

#include "tensor_contract.hpp"

int main()
{
    using contextra::TensorContract;
    using contextra::canonicalClassId;
    using contextra::validateTensorContract;

    const TensorContract valid{true, true, {1, 300, 4}, {1, 300, 91}, 1};
    assert(validateTensorContract(valid));

    assert(!validateTensorContract({false, true, {1, 300, 4}, {1, 300, 91}, 1}));
    assert(!validateTensorContract({true, true, {300, 4}, {1, 300, 91}, 1}));
    assert(!validateTensorContract({true, true, {1, 300, 5}, {1, 300, 91}, 1}));
    assert(!validateTensorContract({true, true, {1, 300, 4}, {1, 299, 91}, 1}));
    assert(!validateTensorContract({true, true, {1, 300, 4}, {1, 300, 90}, 1}));
    assert(!validateTensorContract({true, true, {2, 300, 4}, {2, 300, 91}, 1}));

    assert(canonicalClassId(0) == -1);
    assert(canonicalClassId(1) == 0);
    assert(canonicalClassId(13) == 11);
    assert(canonicalClassId(12) == -1);
    assert(canonicalClassId(90) == 79);
    assert(canonicalClassId(91) == -1);
    return 0;
}
