// -*- c-basic-offset: 4 -*-
#include "type_checking.hh"
#include "ast.hh"
#include <iostream>

using namespace std;
using namespace ast;

int
main()
{
    type_checking::IndexType it1("foo");
    type_checking::IndexType it2("foo");
    type_checking::IndexType it3("bar");
    assert(it1 == it2);
    assert(!(it1 != it2));
    assert(!(it1 == it3));
    assert(it1 != it3);

    type_checking::ValType vt1("foo", TYPE_INT);
    type_checking::ValType vt2("foo", TYPE_INT);
    type_checking::ValType vt3("bar", TYPE_INT);
    assert(vt1 == vt2);
    assert(!(vt1 != vt2));
    assert(!(vt1 == vt3));
    assert(vt1 != vt3);

    type_checking::MatrixType mt1("foo", 2);
    type_checking::MatrixType mt2("foo", 2);
    type_checking::MatrixType mt3("foo", 3);
    type_checking::MatrixType mt4("bar", 2);

    assert(mt1 == mt2);
    assert(!(mt1 != mt2));
    assert(!(mt1 == mt3));
    assert(mt1 != mt3);
    assert(!(mt1 == mt4));
    assert(mt1 != mt4);

    type_checking::FunctionType ft1("foo", 2);
    type_checking::FunctionType ft2("foo", 2);
    type_checking::FunctionType ft3("foo", 3);
    type_checking::FunctionType ft4("bar", 2);

    assert(ft1 == ft2);
    assert(!(ft1 != ft2));
    assert(!(ft1 == ft3));
    assert(ft1 != ft3);
    assert(!(ft1 == ft4));
    assert(ft1 != ft4);

    assert(it1 != mt1);
    assert(it1 != ft1);
    assert(ft1 != mt1);
    assert(vt1 != it1);
    assert(vt1 != mt1);
    assert(vt1 != ft1);

    assert(!(it1 == mt1));
    assert(!(it1 == ft1));
    assert(!(ft1 == mt1));
    assert(!(vt1 == it1));
    assert(!(vt1 == mt1));
    assert(!(vt1 == ft1));

    return 0;
}


syntax highlighted by Code2HTML, v. 0.9.1