/*
 * Created on 22.09.2004
 */
package bank;

import junit.framework.TestCase;

/**
 * @author oliver
 * @since 22.09.2004
 */
public class KontoTest extends TestCase {

    /**
     * 
     * @uml.property name="konto"
     * @uml.associationEnd 
     * @uml.property name="konto" multiplicity="(0 1)"
     */
    private Konto konto;

    public static void main(String[] args) {
        junit.textui.TestRunner.run(KontoTest.class);
    }

    /*
     * @see TestCase#setUp()
     */
    protected void setUp() throws Exception {
        konto = new Konto("Max Mustermann");
        super.setUp();
    }

    public void testAbfragen() {
        assertEquals(0.0, konto.abfragen(), 0.005);
    }

    public void testEinzahlen() {
        konto.einzahlen(1.23);
        assertEquals(1.23, konto.abfragen(), 0.005);
    }

    public void testAbheben() {
        konto.einzahlen(4.50);
        konto.abheben(3.45);
        assertEquals(1.05, konto.abfragen(), 0.05);
    }

    public final void testUeberweisen() {
        Konto schwarzgeldKonto = new Konto("Bernd Birne");
        konto.einzahlen(5000.00);
        konto.ueberweisen(1000.00, schwarzgeldKonto);
        assertEquals(4000.00, konto.abfragen(), 10.0);
        assertEquals(1000.00, schwarzgeldKonto.abfragen(), 0.005);
    }
    
    public final void testMassenUeberweisung() {
        int n = 1000;
        Konto[] konten = createKonten(n);
        konto.einzahlen(200000.00);
        konto.massenUeberweisung(100.00, konten);
        assertEquals(200000.00 - n * 100.00, konto.abfragen(), 0.01);
    }

    public final void testMassenUeberweisung2() {
        int n = 1000;
        Konto[] konten = createKonten(n);
        konto.einzahlen(200000.00);
        konto.massenUeberweisung2(100.00, konten);
        assertEquals(200000.00 - n * 100.00, konto.abfragen(), 0.01);
    }

    /**
     * @param n
     * @return
     * @author <a href="mailto:boehm@javatux.de">oliver</a>
     * @since  22.11.2004
     */
    private Konto[] createKonten(int n) {
        Konto[] konten = new Konto[n];
        for (int i = 0; i < n; i++) {
            konten[i] = new Konto("Max");
        }
        return konten;
    }

}
