/** Test extension and contraction. */
  public void testExtendContract() {
    // rational numbers
    BigRational cf = new BigRational(99);
    // System.out.println("cf = " + cf);

    // polynomials over rational numbers
    GenPolynomialRing<BigRational> pf = new GenPolynomialRing<BigRational>(cf, rl);
    // System.out.println("pf = " + pf);

    GenPolynomial<BigRational> a = pf.random(kl, ll, el, q);
    // System.out.println("a = " + a);

    int k = rl;
    GenPolynomialRing<BigRational> pfe = pf.extend(k);
    GenPolynomialRing<BigRational> pfec = pfe.contract(k);
    assertEquals("pf == pfec", pf, pfec);

    GenPolynomial<BigRational> ae = a.extend(pfe, 0, 0);

    Map<ExpVector, GenPolynomial<BigRational>> m = ae.contract(pfec);
    List<GenPolynomial<BigRational>> ml = new ArrayList<GenPolynomial<BigRational>>(m.values());
    GenPolynomial<BigRational> aec = ml.get(0);
    assertEquals("a == aec", a, aec);
    // System.out.println("ae = " + ae);
    // System.out.println("aec = " + aec);
  }