// Path: JAutoDiff/src/nilgiri/math/DoubleReal.java
// public class DoubleReal implements RealNumber<DoubleReal>, Cloneable {
// 	//immutable
// 	
// 	private double m_x;
// 
// 	public DoubleReal() {
// 		this(0.0);
// 	}
// 
// 	public DoubleReal(double i_v) {
// 		m_x = i_v;
// 	}
// 
// 	public double doubleValue() {
// 		return m_x;
// 	}
// 
// 	public double modulus() {
// 		return Math.abs(m_x);
// 	}
// 
// 	public String toString() {
// 		return String.valueOf(m_x);
// 	}
// 
// 	public Object clone() {
// 		return new DoubleReal(m_x);
// 	}
// 
// 	public DoubleReal inverse() {
// 		return new DoubleReal(1.0 / m_x);
// 	}
// 
// 	public DoubleReal negate() {
// 		return new DoubleReal(-m_x);
// 	}
// 
// 	// Operators for DoubleReal
// 
// 	public DoubleReal plus(DoubleReal i_rd) {
// 		return new DoubleReal(m_x + i_rd.m_x);
// 	}
// 
// 	public DoubleReal minus(DoubleReal i_rd) {
// 		return new DoubleReal(m_x - i_rd.m_x);
// 	}
// 
// 	public DoubleReal mul(DoubleReal i_rd) {
// 		return new DoubleReal(m_x * i_rd.m_x);
// 	}
// 
// 	public DoubleReal div(DoubleReal i_rd) {
// 		return new DoubleReal(m_x / i_rd.m_x);
// 	}
// 
// 	// Operators for double
// 
// 	public DoubleReal plus(double i_v) {
// 		return new DoubleReal(m_x + i_v);
// 	}
// 
// 	public DoubleReal minus(double i_v) {
// 		return new DoubleReal(m_x - i_v);
// 	}
// 
// 	public DoubleReal prod(double i_v) {
// 		return new DoubleReal(m_x * i_v);
// 	}
// 
// 	public DoubleReal div(double i_v) {
// 		return new DoubleReal(m_x / i_v);
// 	}
// 
// 	public DoubleReal pow(double i_v) {
// 		return new DoubleReal(Math.pow(m_x, i_v));
// 	}
// 
// 	public DoubleReal pow(int i_n) {
// 		return new DoubleReal(Math.pow(m_x, i_n));
// 	}
// 
// 	public DoubleReal mul(long i_n) {
// 		return new DoubleReal(m_x * i_n);
// 	}
// 
// }
// 
// Path: JAutoDiff/src/nilgiri/math/DoubleRealFactory.java
// public class DoubleRealFactory implements AbstractRealNumberFactory<DoubleReal> {
// 
// 	private static final DoubleRealFactory m_INSTANCE = new DoubleRealFactory();
// 
// 	private DoubleRealFactory() {
// 	}
// 
// 	/** Returns the singleton object of this class.
// 	 * @return the singleton object of this class.
// 	 */
// 	public static DoubleRealFactory instance() {
// 		return m_INSTANCE;
// 	}
// 
// 	/** Returns an object of DoubleReal whose value is i_v.  
// 	 * @param i_v
// 	 * @return DoubleReal(i_v)
// 	 */
// 	public DoubleReal val(double i_v) {
// 		return new DoubleReal(i_v);
// 	}
// 
// 	private static final DoubleReal m_ZERO = new DoubleReal(0.0);
// 	private static final DoubleReal m_UNIT = new DoubleReal(1.0);
// 
// 	public DoubleReal zero() {
// 		return m_ZERO;
// 	}
// 
// 	public DoubleReal one() {
// 		return m_UNIT;
// 	}
// 
// 
// 	public DoubleReal cos(DoubleReal i_x) {
// 		return new DoubleReal(Math.cos(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal sin(DoubleReal i_x) {
// 		return new DoubleReal(Math.sin(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal tan(DoubleReal i_x) {
// 		return new DoubleReal(Math.tan(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal exp(DoubleReal i_x) {
// 		return new DoubleReal(Math.exp(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal log(DoubleReal i_x) {
// 		return new DoubleReal(Math.log(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal pow(DoubleReal i_x, DoubleReal i_y) {
// 		return new DoubleReal(Math.pow(i_x.doubleValue(), i_y.doubleValue()));
// 	}
// 	
// 	public DoubleReal sqrt(DoubleReal i_x) {
// 		return new DoubleReal(Math.sqrt(i_x.doubleValue()));
// 	}
// 	
// 	public DoubleReal square(DoubleReal i_x) {
// 		return new DoubleReal(i_x.doubleValue() * i_x.doubleValue());
// 	}
// 	
// }


import org.junit.Test;
import junit.framework.Assert;
import nilgiri.math.DoubleReal;
import nilgiri.math.DoubleRealFactory;
package nilgiri.math.autodiff;







public class ADOperatorTest {
	DoubleRealFactory RF = DoubleRealFactory.instance();
	DifferentialRealFunctionFactory<DoubleReal> DF = new DifferentialRealFunctionFactory<DoubleReal>(RF);

	
	double value_x = 3.0;
	double value_y = 5.0;
	double value_p = 7.0;
	double value_q = 9.0;
	

	Variable<DoubleReal> x = DF.var("x", new DoubleReal(value_x));
// Path: JAutoDiff/src/nilgiri/math/DoubleReal.java
// public class DoubleReal implements RealNumber<DoubleReal>, Cloneable {
// 	//immutable
// 	
// 	private double m_x;
// 
// 	public DoubleReal() {
// 		this(0.0);
// 	}
// 
// 	public DoubleReal(double i_v) {
// 		m_x = i_v;
// 	}
// 
// 	public double doubleValue() {
// 		return m_x;
// 	}
// 
// 	public double modulus() {
// 		return Math.abs(m_x);
// 	}
// 
// 	public String toString() {
// 		return String.valueOf(m_x);
// 	}
// 
// 	public Object clone() {
// 		return new DoubleReal(m_x);
// 	}
// 
// 	public DoubleReal inverse() {
// 		return new DoubleReal(1.0 / m_x);
// 	}
// 
// 	public DoubleReal negate() {
// 		return new DoubleReal(-m_x);
// 	}
// 
// 	// Operators for DoubleReal
// 
// 	public DoubleReal plus(DoubleReal i_rd) {
// 		return new DoubleReal(m_x + i_rd.m_x);
// 	}
// 
// 	public DoubleReal minus(DoubleReal i_rd) {
// 		return new DoubleReal(m_x - i_rd.m_x);
// 	}
// 
// 	public DoubleReal mul(DoubleReal i_rd) {
// 		return new DoubleReal(m_x * i_rd.m_x);
// 	}
// 
// 	public DoubleReal div(DoubleReal i_rd) {
// 		return new DoubleReal(m_x / i_rd.m_x);
// 	}
// 
// 	// Operators for double
// 
// 	public DoubleReal plus(double i_v) {
// 		return new DoubleReal(m_x + i_v);
// 	}
// 
// 	public DoubleReal minus(double i_v) {
// 		return new DoubleReal(m_x - i_v);
// 	}
// 
// 	public DoubleReal prod(double i_v) {
// 		return new DoubleReal(m_x * i_v);
// 	}
// 
// 	public DoubleReal div(double i_v) {
// 		return new DoubleReal(m_x / i_v);
// 	}
// 
// 	public DoubleReal pow(double i_v) {
// 		return new DoubleReal(Math.pow(m_x, i_v));
// 	}
// 
// 	public DoubleReal pow(int i_n) {
// 		return new DoubleReal(Math.pow(m_x, i_n));
// 	}
// 
// 	public DoubleReal mul(long i_n) {
// 		return new DoubleReal(m_x * i_n);
// 	}
// 
// }
// 
// Path: JAutoDiff/src/nilgiri/math/DoubleRealFactory.java
// public class DoubleRealFactory implements AbstractRealNumberFactory<DoubleReal> {
// 
// 	private static final DoubleRealFactory m_INSTANCE = new DoubleRealFactory();
// 
// 	private DoubleRealFactory() {
// 	}
// 
// 	/** Returns the singleton object of this class.
// 	 * @return the singleton object of this class.
// 	 */
// 	public static DoubleRealFactory instance() {
// 		return m_INSTANCE;
// 	}
// 
// 	/** Returns an object of DoubleReal whose value is i_v.  
// 	 * @param i_v
// 	 * @return DoubleReal(i_v)
// 	 */
// 	public DoubleReal val(double i_v) {
// 		return new DoubleReal(i_v);
// 	}
// 
// 	private static final DoubleReal m_ZERO = new DoubleReal(0.0);
// 	private static final DoubleReal m_UNIT = new DoubleReal(1.0);
// 
// 	public DoubleReal zero() {
// 		return m_ZERO;
// 	}
// 
// 	public DoubleReal one() {
// 		return m_UNIT;
// 	}
// 
// 
// 	public DoubleReal cos(DoubleReal i_x) {
// 		return new DoubleReal(Math.cos(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal sin(DoubleReal i_x) {
// 		return new DoubleReal(Math.sin(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal tan(DoubleReal i_x) {
// 		return new DoubleReal(Math.tan(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal exp(DoubleReal i_x) {
// 		return new DoubleReal(Math.exp(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal log(DoubleReal i_x) {
// 		return new DoubleReal(Math.log(i_x.doubleValue()));
// 	}
// 
// 	public DoubleReal pow(DoubleReal i_x, DoubleReal i_y) {
// 		return new DoubleReal(Math.pow(i_x.doubleValue(), i_y.doubleValue()));
// 	}
// 	
// 	public DoubleReal sqrt(DoubleReal i_x) {
// 		return new DoubleReal(Math.sqrt(i_x.doubleValue()));
// 	}
// 	
// 	public DoubleReal square(DoubleReal i_x) {
// 		return new DoubleReal(i_x.doubleValue() * i_x.doubleValue());
// 	}
// 	
// }


// Path: JAutoDiff/test/nilgiri/math/autodiff/ADOperatorTest.java
import org.junit.Test;
import junit.framework.Assert;
import nilgiri.math.DoubleReal;
import nilgiri.math.DoubleRealFactory;

package nilgiri.math.autodiff;







public class ADOperatorTest {
	DoubleRealFactory RF = DoubleRealFactory.instance();
	DifferentialRealFunctionFactory<DoubleReal> DF = new DifferentialRealFunctionFactory<DoubleReal>(RF);

	
	double value_x = 3.0;
	double value_y = 5.0;
	double value_p = 7.0;
	double value_q = 9.0;
	

	Variable<DoubleReal> x = DF.var("x", new DoubleReal(value_x));
	Variable<DoubleReal> y = DF.var("y", new DoubleReal(value_y));