EqualOperation.ceylon

import ceylon.ast.core {
    EqualOperation,
    ComparingExpression
}
import ceylon.ast.redhat {
    RedHatTransformer,
    equalOperationToCeylon,
    compileEqualOperation
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JEqualOp=EqualOp
    }
}

shared object equalOperation satisfies ConcreteTest<EqualOperation,JEqualOp> {
    
    String->EqualOperation construct(String->ComparingExpression left, String->ComparingExpression right)
            => "``left.key``==``right.key``"->EqualOperation(left.item, right.item);
    
    shared String->EqualOperation aEqualsBExpression = construct(baseExpression.aExpression, baseExpression.bExpression);
    "a&b == a&b&c"
    shared String->EqualOperation aIntBEqualsAIntBIntCExpression = construct(intersectionOperation.aIntersectBExpression, intersectionOperation.aIntersectBIntersectCExpression);
    
    compile = compileEqualOperation;
    fromCeylon = RedHatTransformer.transformEqualOperation;
    toCeylon = equalOperationToCeylon;
    codes = [aEqualsBExpression, aIntBEqualsAIntBIntCExpression];
}