def test_Domain_unify():
    F3 = GF(3)
    assert (unify(F3, F3) == F3)
    assert (unify(F3, ZZ) == ZZ)
    assert (unify(F3, QQ) == QQ)
    assert (unify(F3, ALG) == ALG)
    assert (unify(F3, RR) == RR)
    assert (unify(F3, CC) == CC)
    assert (unify(F3, ZZ[x]) == ZZ[x])
    assert (unify(F3, ZZ.frac_field(x)) == ZZ.frac_field(x))
    assert (unify(F3, EX) == EX)
    assert (unify(ZZ, F3) == ZZ)
    assert (unify(ZZ, ZZ) == ZZ)
    assert (unify(ZZ, QQ) == QQ)
    assert (unify(ZZ, ALG) == ALG)
    assert (unify(ZZ, RR) == RR)
    assert (unify(ZZ, CC) == CC)
    assert (unify(ZZ, ZZ[x]) == ZZ[x])
    assert (unify(ZZ, ZZ.frac_field(x)) == ZZ.frac_field(x))
    assert (unify(ZZ, EX) == EX)
    assert (unify(QQ, F3) == QQ)
    assert (unify(QQ, ZZ) == QQ)
    assert (unify(QQ, QQ) == QQ)
    assert (unify(QQ, ALG) == ALG)
    assert (unify(QQ, RR) == RR)
    assert (unify(QQ, CC) == CC)
    assert (unify(QQ, ZZ[x]) == QQ[x])
    assert (unify(QQ, ZZ.frac_field(x)) == QQ.frac_field(x))
    assert (unify(QQ, EX) == EX)
    assert (unify(RR, F3) == RR)
    assert (unify(RR, ZZ) == RR)
    assert (unify(RR, QQ) == RR)
    assert (unify(RR, ALG) == RR)
    assert (unify(RR, RR) == RR)
    assert (unify(RR, CC) == CC)
    assert (unify(RR, ZZ[x]) == RR[x])
    assert (unify(RR, ZZ.frac_field(x)) == RR.frac_field(x))
    assert (unify(RR, EX) == EX)
    assert (unify(CC, F3) == CC)
    assert (unify(CC, ZZ) == CC)
    assert (unify(CC, QQ) == CC)
    assert (unify(CC, ALG) == CC)
    assert (unify(CC, RR) == CC)
    assert (unify(CC, CC) == CC)
    assert (unify(CC, ZZ[x]) == CC[x])
    assert (unify(CC, ZZ.frac_field(x)) == CC.frac_field(x))
    assert (unify(CC, EX) == EX)
    assert (unify(ZZ[x], F3) == ZZ[x])
    assert (unify(ZZ[x], ZZ) == ZZ[x])
    assert (unify(ZZ[x], QQ) == QQ[x])
    assert (unify(ZZ[x], ALG) == ALG[x])
    assert (unify(ZZ[x], RR) == RR[x])
    assert (unify(ZZ[x], CC) == CC[x])
    assert (unify(ZZ[x], ZZ[x]) == ZZ[x])
    assert (unify(ZZ[x], ZZ.frac_field(x)) == ZZ.frac_field(x))
    assert (unify(ZZ[x], EX) == EX)
    assert (unify(ZZ.frac_field(x), F3) == ZZ.frac_field(x))
    assert (unify(ZZ.frac_field(x), ZZ) == ZZ.frac_field(x))
    assert (unify(ZZ.frac_field(x), QQ) == QQ.frac_field(x))
    assert (unify(ZZ.frac_field(x), ALG) == ALG.frac_field(x))
    assert (unify(ZZ.frac_field(x), RR) == RR.frac_field(x))
    assert (unify(ZZ.frac_field(x), CC) == CC.frac_field(x))
    assert (unify(ZZ.frac_field(x), ZZ[x]) == ZZ.frac_field(x))
    assert (unify(ZZ.frac_field(x), ZZ.frac_field(x)) == ZZ.frac_field(x))
    assert (unify(ZZ.frac_field(x), EX) == EX)
    assert (unify(EX, F3) == EX)
    assert (unify(EX, ZZ) == EX)
    assert (unify(EX, QQ) == EX)
    assert (unify(EX, ALG) == EX)
    assert (unify(EX, RR) == EX)
    assert (unify(EX, CC) == EX)
    assert (unify(EX, ZZ[x]) == EX)
    assert (unify(EX, ZZ.frac_field(x)) == EX)
    assert (unify(EX, EX) == EX)
def test_Domain_unify():
    F3 = GF(3)
    assert (unify(F3, F3) == F3)
    assert (unify(F3, ZZ) == ZZ)
    assert (unify(F3, QQ) == QQ)
    assert (unify(F3, ALG) == ALG)
    assert (unify(F3, RR) == RR)
    assert (unify(F3, CC) == CC)
    assert (unify(F3, ZZ[x]) == ZZ[x])
    assert (unify(F3, ZZ.frac_field(x)) == ZZ.frac_field(x))
    assert (unify(F3, EX) == EX)
    assert (unify(ZZ, F3) == ZZ)
    assert (unify(ZZ, ZZ) == ZZ)
    assert (unify(ZZ, QQ) == QQ)
    assert (unify(ZZ, ALG) == ALG)
    assert (unify(ZZ, RR) == RR)
    assert (unify(ZZ, CC) == CC)
    assert (unify(ZZ, ZZ[x]) == ZZ[x])
    assert (unify(ZZ, ZZ.frac_field(x)) == ZZ.frac_field(x))
    assert (unify(ZZ, EX) == EX)
    assert (unify(QQ, F3) == QQ)
    assert (unify(QQ, ZZ) == QQ)
    assert (unify(QQ, QQ) == QQ)
    assert (unify(QQ, ALG) == ALG)
    assert (unify(QQ, RR) == RR)
    assert (unify(QQ, CC) == CC)
    assert (unify(QQ, ZZ[x]) == QQ[x])
    assert (unify(QQ, ZZ.frac_field(x)) == QQ.frac_field(x))
    assert (unify(QQ, EX) == EX)
    assert (unify(RR, F3) == RR)
    assert (unify(RR, ZZ) == RR)
    assert (unify(RR, QQ) == RR)
    assert (unify(RR, ALG) == RR)
    assert (unify(RR, RR) == RR)
    assert (unify(RR, CC) == CC)
    assert (unify(RR, ZZ[x]) == RR[x])
    assert (unify(RR, ZZ.frac_field(x)) == RR.frac_field(x))
    assert (unify(RR, EX) == EX)
    assert (unify(CC, F3) == CC)
    assert (unify(CC, ZZ) == CC)
    assert (unify(CC, QQ) == CC)
    assert (unify(CC, ALG) == CC)
    assert (unify(CC, RR) == CC)
    assert (unify(CC, CC) == CC)
    assert (unify(CC, ZZ[x]) == CC[x])
    assert (unify(CC, ZZ.frac_field(x)) == CC.frac_field(x))
    assert (unify(CC, EX) == EX)
    assert (unify(ZZ[x], F3) == ZZ[x])
    assert (unify(ZZ[x], ZZ) == ZZ[x])
    assert (unify(ZZ[x], QQ) == QQ[x])
    assert (unify(ZZ[x], ALG) == ALG[x])
    assert (unify(ZZ[x], RR) == RR[x])
    assert (unify(ZZ[x], CC) == CC[x])
    assert (unify(ZZ[x], ZZ[x]) == ZZ[x])
    assert (unify(ZZ[x], ZZ.frac_field(x)) == ZZ.frac_field(x))
    assert (unify(ZZ[x], EX) == EX)
    assert (unify(ZZ.frac_field(x), F3) == ZZ.frac_field(x))
    assert (unify(ZZ.frac_field(x), ZZ) == ZZ.frac_field(x))
    assert (unify(ZZ.frac_field(x), QQ) == QQ.frac_field(x))
    assert (unify(ZZ.frac_field(x), ALG) == ALG.frac_field(x))
    assert (unify(ZZ.frac_field(x), RR) == RR.frac_field(x))
    assert (unify(ZZ.frac_field(x), CC) == CC.frac_field(x))
    assert (unify(ZZ.frac_field(x), ZZ[x]) == ZZ.frac_field(x))
    assert (unify(ZZ.frac_field(x), ZZ.frac_field(x)) == ZZ.frac_field(x))
    assert (unify(ZZ.frac_field(x), EX) == EX)
    assert (unify(EX, F3) == EX)
    assert (unify(EX, ZZ) == EX)
    assert (unify(EX, QQ) == EX)
    assert (unify(EX, ALG) == EX)
    assert (unify(EX, RR) == EX)
    assert (unify(EX, CC) == EX)
    assert (unify(EX, ZZ[x]) == EX)
    assert (unify(EX, ZZ.frac_field(x)) == EX)
    assert (unify(EX, EX) == EX)