Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Can some write the JUnit tests to this code that will determine if each of the c

ID: 3809452 • Letter: C

Question

Can some write the JUnit tests to this code that will determine if each of the complex number operations are correct. The tests that should be included are testAdd, testSubtract, testMult, testDiv, testEqComp (equals and compareTo together), testNorm, and testParse. These seven JUnit tests need to be able to test the methods of the ComplexNumber class. They should test a variety of different situations. Test more than one set of values for each of the methods - one test case is not usually enough to determine if it works correctly.

public class ComplexNumber {

   // Variables represent the state of complex Numbers:

   private final MyDouble real; // To be initialized in constructors

   private final MyDouble imag; // To be initialized in constructors

   // Constructors:

   public ComplexNumber(MyDouble realIn, MyDouble imagIn){

       real = realIn;

       imag = imagIn;

   }

   public ComplexNumber(MyDouble realIn){

       MyDouble zero = new MyDouble(0);

       real = realIn;

       imag = zero;

   }

   public ComplexNumber(ComplexNumber x){

       real = x.real;

       imag = x.imag;

   }

   //Instance methods

   public MyDouble getReal(){

       return real;

   }

  

   public MyDouble getImag(){

       return imag;

   }

   public ComplexNumber add(ComplexNumber num1) {

       MyDouble part1 = real.add(num1.getReal());

       MyDouble part2 = imag.add(num1.getImag());

       ComplexNumber result = new ComplexNumber(part1,part2);

       return result;

   }

   public ComplexNumber subtract(ComplexNumber num1) {

       MyDouble part1 = real.subtract(num1.getReal());

       MyDouble part2 = real.subtract(num1.getImag());

       ComplexNumber result = new ComplexNumber(part1, part2);

       return result;

   }

   public ComplexNumber multiply(ComplexNumber num1) {

       MyDouble negative = new MyDouble(-1);

       MyDouble part1 = real.multiply(num1.getReal());

       MyDouble part2 = imag.multiply(num1.getImag());

       MyDouble part3 = real.multiply(num1.getImag());

       MyDouble part4 = imag.multiply(num1.getReal());

       part2=part2.multiply(negative);

       MyDouble part5 = part1.add(part2);

       MyDouble part6 = part3.add(part4);

       ComplexNumber result = new ComplexNumber (part5,part6);

       return result;

   }

   public ComplexNumber divide(ComplexNumber num1) {

       MyDouble part1 = real.multiply(num1.real);

       MyDouble part2 = imag.multiply(num1.imag);

       MyDouble part3 = part1.add(part2);

       MyDouble part4 = num1.real.multiply(num1.real);

       MyDouble part5 = num1.imag.multiply(num1.imag);

       MyDouble part6 = part4.add(part5);

       MyDouble complex1 = part3.divide(part6);

       MyDouble part8 = imag.multiply(num1.real);

       MyDouble part9 = real.multiply(num1.imag);

       MyDouble part10 = part8.subtract(part9);

       MyDouble complex2 = part10.divide(part6);

       ComplexNumber result = new ComplexNumber (complex1,complex2);

       return result;

   }

   public boolean Equals(ComplexNumber otherNum) {

       return real.equals(otherNum.real) && imag == otherNum.imag;

   }

   public int compareTo(ComplexNumber num1){

       if(norm(this).compareTo(norm(num1))==0){

           return 0;

       }

       else if(norm(this).compareTo(norm(num1))<0){

           return -1;

       }

       else{

           return 1;

       }

   }

   public String toString() {

       MyDouble zero = new MyDouble(0);

       if(real.compareTo(zero) != 0){

           if(imag.compareTo(zero) < 0){

               return real.toString() + "-"+ imag.abs().toString()+"i";

           } else if(imag.compareTo(zero) > 0){

               return real.toString() + "+" + imag.toString()+"i";

           } else{

               return real.toString() + "+ 0i";

           }

       } else{

           if(imag.compareTo(zero)<0){

               return "0" + "-" + imag.abs().toString() + "i";

           } else if(imag.compareTo(zero) > 0){

               return "0" + "+" + imag.toString() + "i";

           } else{

               return "0";

           }

       }

   }

   // Public Static Methods:

   public static MyDouble norm(ComplexNumber num1) {

       MyDouble part1 = num1.real;

       MyDouble part2 = num1.imag;

       MyDouble part3 = part1.multiply(part1);

       MyDouble part4 = part2.multiply(part2);

       MyDouble part5 = part3.add(part4);

       MyDouble norm = part5.sqrt();

       return norm;

   }

   public static ComplexNumber parseComplexNumber(String string1) {

       MyDouble zero = new MyDouble(0);

       MyDouble zero1 = new MyDouble(0);

       ComplexNumber parsed = new ComplexNumber(zero,zero1);

       String string2 = string1;

       string2.replaceAll(" ", "");

       String string3 = string2;

       if(string3.indexOf("+")>0){

           int stop1 = string3.lastIndexOf("+");

           String realString = string3.substring(0,stop1);

           double realDouble = Double.parseDouble(realString);

           MyDouble realMyDouble = new MyDouble(realDouble);

           String imagString = string3.substring(stop1+1,string3.length()-1);

           double imagDouble = Double.parseDouble(imagString);

           MyDouble imagMyDouble = new MyDouble(imagDouble);

           parsed = new ComplexNumber(realMyDouble,imagMyDouble);

       }else{

           int stop2 = string3.lastIndexOf("-");

           String realString2 = string3.substring(0,stop2);

           double realDouble2 = Double.parseDouble(realString2);

           MyDouble realMyDouble2 = new MyDouble(realDouble2);

           String imagString2 = string3.substring(stop2+1,string3.length()-1);

           double imagDouble2 = Double.parseDouble(imagString2);

           MyDouble imagMyDouble2 = new MyDouble(imagDouble2);

           parsed = new ComplexNumber(realMyDouble2,imagMyDouble2);

       }

       return parsed;

   }

}

Explanation / Answer

import static org.junit.Assert.*; import org.junit.Test; public class PublicTests{ @Test public void testBasicConstructorsAndGetters() { MyDouble a = new MyDouble(5.7), b = new MyDouble(-3.7); MyDouble d = new MyDouble(555.729); ComplexNumber x = new ComplexNumber(a, b); assertTrue(x.getReal().compareTo(a) == 0 && x.getImag().compareTo(b) == 0); ComplexNumber z = new ComplexNumber(d); assertTrue(z.getReal().compareTo(d) == 0 && z.getImag().compareTo(new MyDouble(0)) == 0); } @Test public void testCopyConstructor() { MyDouble a = new MyDouble(5.7), b = new MyDouble(-3.7); ComplexNumber x = new ComplexNumber(a, b); ComplexNumber y = new ComplexNumber(x); assertTrue(x != y); // Check to be sure they are not aliased! assertTrue(y.getReal().compareTo(a) == 0 && y.getImag().compareTo(b) == 0); } @Test public void testAdd(){ MyDouble a = new MyDouble(5.7), b = new MyDouble(3.7); MyDouble c = new MyDouble(1.0), d = new MyDouble(2.1); ComplexNumber x = new ComplexNumber(a, b); ComplexNumber y = new ComplexNumber(c, d); assertTrue((x.add(y)).compareTo(new ComplexNumber(new MyDouble(6.7), new MyDouble(5.8))) == 0); a = new MyDouble(0); b = new MyDouble(0); c = new MyDouble(1.0); d = new MyDouble(2.1); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue((x.add(y)).compareTo(new ComplexNumber(new MyDouble(1.0), new MyDouble(2.1))) == 0); a = new MyDouble(-5.7); b = new MyDouble(3.7); c = new MyDouble(1.0); d = new MyDouble(-2.1); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue((x.add(y)).compareTo(new ComplexNumber(new MyDouble(-4.7), new MyDouble(1.6))) == 0); } @Test public void testSubtract(){ MyDouble a = new MyDouble(-2), b = new MyDouble(7); MyDouble c = new MyDouble(9.0), d = new MyDouble(-4); ComplexNumber x = new ComplexNumber(a, b); ComplexNumber y = new ComplexNumber(c, d); assertTrue((x.subtract(y)).compareTo(new ComplexNumber(new MyDouble(-11), new MyDouble(11))) == 0); a = new MyDouble(0); b = new MyDouble(0); c = new MyDouble(1.0); d = new MyDouble(2.1); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue((x.subtract(y)).compareTo(new ComplexNumber(new MyDouble(1.0), new MyDouble(-2.1))) == 0); a = new MyDouble(-2); b = new MyDouble(-4); c = new MyDouble(2); d = new MyDouble(4); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue((x.subtract(y)).compareTo(new ComplexNumber(new MyDouble(-4), new MyDouble(8.0))) == 0); } @Test public void testMult(){ MyDouble a = new MyDouble(-2), b = new MyDouble(5); MyDouble c = new MyDouble(9.0), d = new MyDouble(-4); ComplexNumber x = new ComplexNumber(a, b); ComplexNumber y = new ComplexNumber(c, d); assertTrue((x.multiply(y)).compareTo(new ComplexNumber(new MyDouble(2), new MyDouble(53.0))) == 0); a = new MyDouble(0); b = new MyDouble(0); c = new MyDouble(5.6); d = new MyDouble(2); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue((x.multiply(y)).compareTo(new ComplexNumber(new MyDouble(0.0), new MyDouble(0))) == 0); a = new MyDouble(4); b = new MyDouble(2); c = new MyDouble(3); d = new MyDouble(2); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue((x.multiply(y)).compareTo(new ComplexNumber(new MyDouble(8), new MyDouble(14))) == 0); } @Test public void testDiv(){ MyDouble a = new MyDouble(16), b = new MyDouble(-2); MyDouble c = new MyDouble(3), d = new MyDouble(-2); ComplexNumber x = new ComplexNumber(a, b); ComplexNumber y = new ComplexNumber(c, d); assertTrue((x.divide(y)).compareTo(new ComplexNumber(new MyDouble(4), new MyDouble(2))) == 0); a = new MyDouble(0); b = new MyDouble(0); c = new MyDouble(5.6); d = new MyDouble(2); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue((x.divide(y)).compareTo(new ComplexNumber(new MyDouble(0.0), new MyDouble(0))) == 0); a = new MyDouble(-8); b = new MyDouble(27); c = new MyDouble(2); d = new MyDouble(3); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue((x.divide(y)).compareTo(new ComplexNumber(new MyDouble(5.0), new MyDouble(6.0))) == 0); } @Test public void testEqComp(){ MyDouble a = new MyDouble(5), b = new MyDouble(12); MyDouble c = new MyDouble(3.0), d = new MyDouble(4.0); ComplexNumber x = new ComplexNumber(a, b); ComplexNumber y = new ComplexNumber(c, d); assertTrue(x.compareTo(y) == 1); assertFalse(x.equals(y)); a = new MyDouble(1); b = new MyDouble(2); c = new MyDouble(3.0); d = new MyDouble(4.0); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue(x.compareTo(y) == -1); a = new MyDouble(4); b = new MyDouble(3); c = new MyDouble(3.0); d = new MyDouble(4.0); x = new ComplexNumber(a, b); y = new ComplexNumber(c, d); assertTrue(x.compareTo(y) == 0); assertFalse(x.equals(y)); y = new ComplexNumber(d, c); assertTrue(x.equals(y)); } @Test public void testNorm(){ MyDouble a = new MyDouble(3.0), b = new MyDouble(4.0); ComplexNumber x = new ComplexNumber(a, b); assertTrue(ComplexNumber.norm(x).compareTo(new MyDouble(5)) == 0); a = new MyDouble(5); b = new MyDouble(-12); x = new ComplexNumber(a, b); assertTrue(ComplexNumber.norm(x).compareTo(new MyDouble(13)) == 0); a = new MyDouble(4.0); b = new MyDouble(0); x = new ComplexNumber(a, b); assertTrue(ComplexNumber.norm(x).compareTo(new MyDouble(4)) == 0); } @Test public void testParse(){ String complexString = " - 2.7 + 5.9 i"; MyDouble a = new MyDouble(-2.7), b = new MyDouble(5.9); ComplexNumber x = new ComplexNumber(a, b); assertTrue(ComplexNumber.parseComplexNumber(complexString).compareTo(x) == 0); complexString = "3.0 - 2.1i"; a = new MyDouble(3.0); b = new MyDouble(-2.1); x = new ComplexNumber(a, b); assertTrue(ComplexNumber.parseComplexNumber(complexString).compareTo(x) == 0); complexString = "46+0i"; a = new MyDouble(46.0); b = new MyDouble(0); x = new ComplexNumber(a, b); assertTrue(ComplexNumber.parseComplexNumber(complexString).compareTo(x) == 0); complexString = " - 2+ 4.6543i "; a = new MyDouble(-2); b = new MyDouble(4.6543); x = new ComplexNumber(a, b); assertTrue(ComplexNumber.parseComplexNumber(complexString).compareTo(x) == 0); complexString = " - 2 -4.6543i "; a = new MyDouble(-2); b = new MyDouble(-4.6543); x = new ComplexNumber(a, b); assertTrue(ComplexNumber.parseComplexNumber(complexString).compareTo(x) == 0); complexString = "0 + 0i"; a = new MyDouble(0); b = new MyDouble(0.0); x = new ComplexNumber(a, b); assertTrue(ComplexNumber.parseComplexNumber(complexString).compareTo(x) == 0); } }