From c3aaad1c0d76e8899f554bda34d03d1d2ccab3a3 Mon Sep 17 00:00:00 2001
From: arnaudlabourel <arnaud.labourel@univ-amu.fr>
Date: Tue, 14 Sep 2021 14:42:41 +0200
Subject: [PATCH] Added test class for Complex

---
 src/test/java/mandelbrot/ComplexTest.java | 136 ++++++++++++++++++++++
 1 file changed, 136 insertions(+)
 create mode 100644 src/test/java/mandelbrot/ComplexTest.java

diff --git a/src/test/java/mandelbrot/ComplexTest.java b/src/test/java/mandelbrot/ComplexTest.java
new file mode 100644
index 0000000..458277c
--- /dev/null
+++ b/src/test/java/mandelbrot/ComplexTest.java
@@ -0,0 +1,136 @@
+package mandelbrot;
+import static net.obvj.junit.utils.matchers.AdvancedMatchers.*;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.*;
+
+public class ComplexTest {
+    private Complex onePlusI;
+    private Complex minusI;
+    private Complex minusOne;
+    private Complex oneMinusI;
+    private Complex twoI;
+    private Complex two;
+    private Complex one;
+    private Complex i;
+    private Complex zero;
+
+    @BeforeEach
+    void initializeTestValues(){
+        onePlusI = new Complex(1,1);
+        minusI = new Complex(0,-1);
+        minusOne = new Complex(-1,0);
+        oneMinusI = new Complex(1, -1);
+        twoI = new Complex(0,2);
+        two = new Complex(2,0);
+        one = new Complex(1,0);
+        i = new Complex(0,1);
+        zero = new Complex(0,0);
+    }
+
+    @Test
+    void testEquals(){
+        assertThat(onePlusI, is(equalTo(onePlusI)));
+        assertThat(onePlusI, is(equalTo(new Complex(1, 1))));
+        assertThat(two, is(not(equalTo(twoI))));
+    }
+
+    @Test
+    void testGetReal(){
+        assertThat(two.getReal(), is(closeTo(2., Helpers.EPSILON)));
+        assertThat(onePlusI.getReal(), is(closeTo(1., Helpers.EPSILON)));
+        assertThat(oneMinusI.getReal(), is(closeTo(1., Helpers.EPSILON)));
+    }
+
+    @Test
+    void testGetImaginary(){
+        assertThat(two.getImaginary(), is(closeTo(0., Helpers.EPSILON)));
+        assertThat(onePlusI.getImaginary(), is(closeTo(1., Helpers.EPSILON)));
+        assertThat(oneMinusI.getImaginary(), is(closeTo(-1., Helpers.EPSILON)));
+    }
+    @Test
+    void testOne(){
+        assertThat(Complex.ONE.getReal(), is(closeTo(1., Helpers.EPSILON)));
+        assertThat(Complex.ONE.getImaginary(), is(closeTo(0., Helpers.EPSILON)));
+    }
+    @Test
+    void testI(){
+        assertThat(Complex.I.getReal(), is(closeTo(0., Helpers.EPSILON)));
+        assertThat(Complex.I.getImaginary(), is(closeTo(1., Helpers.EPSILON)));
+    }
+    @Test
+    void testZero(){
+        assertThat(Complex.ZERO.getReal(), is(closeTo(0., Helpers.EPSILON)));
+        assertThat(Complex.ZERO.getImaginary(), is(closeTo(0., Helpers.EPSILON)));
+    }
+    @Test
+    void testNegate(){
+        assertThat(two.negate(), is(equalTo(new Complex(-2,0))));
+        assertThat(minusI.negate(), is(equalTo(i)));
+        assertThat(oneMinusI.negate(), is(equalTo(new Complex(-1, 1))));
+    }
+
+    @Test
+    void testReciprocal(){
+        assertThat(one.reciprocal(), is(equalTo(one)));
+        assertThat(minusI.reciprocal(), is(equalTo(i)));
+        assertThat(two.reciprocal(), is(equalTo(new Complex(0.5,0))));
+        assertThat(oneMinusI.reciprocal(), is(equalTo(new Complex(0.5,0.5))));
+    }
+
+    @Test
+    void testReciprocalOfZero(){
+        assertThat(()->zero.reciprocal(), throwsException(ArithmeticException.class));
+    }
+
+    @Test
+    void testSubtract(){
+        assertThat(zero.subtract(one), is(equalTo(minusOne)));
+        assertThat(one.subtract(i), is(equalTo(oneMinusI)));
+    }
+
+    @Test
+    void testDivide(){
+        assertThat(onePlusI.divide(Complex.ONE), equalTo(onePlusI));
+        assertThat(Complex.ONE.divide(two), equalTo(new Complex(0.5, 0)));
+        assertThat(oneMinusI.divide(onePlusI), equalTo(minusI));
+    }
+
+    @Test
+    void testDivideByZero(){
+        assertThat(()->one.divide(zero), throwsException(ArithmeticException.class));
+    }
+
+    @Test
+    void testConjugate(){
+        assertThat(two.conjugate(), equalTo(two));
+        assertThat(oneMinusI.conjugate(), equalTo(onePlusI));
+    }
+
+    @Test
+    void testRotation(){
+        assertThat(Complex.rotation(Math.PI/2), equalTo(i));
+        assertThat(Complex.rotation(-Math.PI/2), equalTo(minusI));
+        assertThat(Complex.rotation(0), equalTo(one));
+        assertThat(Complex.rotation(Math.PI/4), equalTo(new Complex(Math.sqrt(2)/2., Math.sqrt(2)/2.)));
+        assertThat(Complex.rotation(Math.PI/3), equalTo(new Complex(1./2., Math.sqrt(3)/2.)));
+    }
+
+    @Test
+    void testBasicToString(){
+        assertThat(two.toString(), containsString("2.0"));
+        assertThat(i.toString(), containsString("i"));
+    }
+
+    @Test
+    void testToStringFormat(){
+        assertThat(oneMinusI.toString(), is(equalTo("1.0 - 1.0i")));
+        assertThat(onePlusI.toString(), is(equalTo("1.0 + 1.0i")));
+        assertThat(minusI.toString(), is(equalTo("-1.0i")));
+        assertThat(twoI.toString(), is(equalTo("2.0i")));
+        assertThat(two.toString(), is(equalTo("2.0")));
+    }
+}
\ No newline at end of file
-- 
GitLab