001/*
002 * $Id$
003 */
004
005package edu.jas.integrate;
006
007
008import edu.jas.arith.BigRational;
009import edu.jas.kern.ComputerThreads;
010import edu.jas.poly.GenPolynomial;
011import edu.jas.poly.GenPolynomialRing;
012import edu.jas.poly.TermOrder;
013import edu.jas.ufd.Quotient;
014import edu.jas.ufd.QuotientRing;
015
016import junit.framework.Test;
017import junit.framework.TestCase;
018import junit.framework.TestSuite;
019
020
021/**
022 * Elementary integration Bernoulli algorithm with linear factors with JUnit.
023 * @author Heinz Kredel
024 */
025
026public class ElementaryIntegrationAbsoluteTest extends TestCase {
027
028
029    /**
030     * main.
031     */
032    public static void main(String[] args) {
033        junit.textui.TestRunner.run(suite());
034    }
035
036
037    /**
038     * Constructs a <CODE>ElementaryIntegrationAbsoluteTest</CODE> object.
039     * @param name String.
040     */
041    public ElementaryIntegrationAbsoluteTest(String name) {
042        super(name);
043    }
044
045
046    /**
047     * suite.
048     */
049    public static Test suite() {
050        TestSuite suite = new TestSuite(ElementaryIntegrationAbsoluteTest.class);
051        return suite;
052    }
053
054
055    TermOrder tord;
056
057
058    QuotientRing<BigRational> qfac;
059
060
061    GenPolynomialRing<BigRational> pfac;
062
063
064    ElementaryIntegration<BigRational> integrator;
065
066
067    QuotIntegral<BigRational> rint;
068
069
070    @Override
071    protected void setUp() {
072        tord = new TermOrder(TermOrder.INVLEX);
073        BigRational br = new BigRational(1);
074        String[] vars = new String[] { "x" };
075        pfac = new GenPolynomialRing<BigRational>(br, 1, tord, vars);
076        qfac = new QuotientRing<BigRational>(pfac);
077        integrator = new ElementaryIntegrationBernoulli<BigRational>(br);
078    }
079
080
081    @Override
082    protected void tearDown() {
083        ComputerThreads.terminate();
084    }
085
086
087    /**
088     * Test Bernoulli algorithm.
089     */
090    public void testRationalBernoulli() {
091        GenPolynomial<BigRational> agen = pfac.univariate(0, 4);
092        agen = agen.sum(pfac.fromInteger(4)); // x^4 + 4
093
094        // GenPolynomial<BigRational> x6 = pfac.univariate(0, 6);
095        // GenPolynomial<BigRational> x4 = pfac.univariate(0, 4);
096        // GenPolynomial<BigRational> x2 = pfac.univariate(0, 2);
097        // // x^6 - 5 x^4 + 5 x^2 + 4
098        // agen = x6.subtract(x4.multiply(pfac.fromInteger(5))); 
099        // agen = agen.sum(x2.multiply(pfac.fromInteger(5))); 
100        // agen = agen.sum(pfac.fromInteger(4)); 
101
102        // GenPolynomial<BigRational> x3 = pfac.univariate(0, 3);
103        // GenPolynomial<BigRational> x = pfac.univariate(0);
104        // // x^3 + x
105        // agen = x3.sum(x); 
106
107        // GenPolynomial<BigRational> x2 = pfac.univariate(0, 2);
108        // // x^2 - 2
109        // agen = x2.subtract(pfac.fromInteger(2));
110
111        GenPolynomial<BigRational> N = pfac.getONE();
112        Quotient<BigRational> Q = new Quotient<BigRational>(qfac, N, agen);
113
114        rint = integrator.integrate(Q);
115        //System.out.println("\nquot integral: " + rint.toString());
116        assertTrue("isIntegral ", integrator.isIntegral(rint));
117        assertFalse("rint not empty: " + rint, rint.toString().isEmpty());
118        assertTrue("rint contains: " + rint, rint.toString().indexOf("integral") >= 0);
119    }
120
121}