package complex;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

public class ComplexTest {
    Complex one_one, one_two, two_three;

    @Before
    public void setUp() throws Exception {
        one_one = new Complex(1.0, 1.0);
        one_two = new Complex(1, 2);
        two_three = new Complex(2, 3);
    }

    @Test
    public void testComplexDoubleDouble() {
        assertEquals(new Complex(1.0, 1.0), new Complex(1, 1));
    }

    @Test
    public void testComplexDouble() {
        assertEquals(new Complex(5.5, 0), new Complex(5.5));
    }

    @Test
    public void testComplexString() {
        assertEquals(new Complex(5.3, 2.8), new Complex("5.3+2.8i"));
        assertEquals(new Complex(5, -2), new Complex("5-2i"));
        assertEquals(new Complex(-5, -2), new Complex("-5-2i"));
        assertEquals(new Complex(5, -2), new Complex("5-2i"));
        assertEquals(new Complex(5.1), new Complex("5.1"));
        assertEquals(new Complex(-5.1), new Complex("-5.1"));
    }

    @Test
    public void testAdd() {
        assertEquals(two_three, one_one.add(one_two));
        assertEquals(two_three, one_two.add(one_one));
        assertEquals(new Complex(-1, -1.75),
                     one_one.add(new Complex(-2.0, -2.75)));
    }

    @Test
    public void testMultiply() {
        assertEquals(new Complex(-5, 12),
                     two_three.multiply(two_three));
    }

    @Test
    public void testToString() {
        assertEquals("1.25", new Complex(1.25, 0) + "");
        assertEquals("1.25+3.0i", new Complex(1.25, 3) + "");
        assertEquals("1.0-0.25i", new Complex(1, -0.25) + "");
        assertEquals("0.0+4.5i", new Complex(0, 4.5).toString());
    }

}

