
public class Sillanrakentaja {


    public static void main(String[] args) {

        Silta s = new Silta(10);

        if (s.getPituus() != 10)
            Testaaja.virhe("Pituus ei ole 10");

        Testaaja.vaadiRajapinta(Silta.class, Laskuri.class);
        Testaaja.tarkistaAttribuutit(Silta.class);

        if (s.getArvo() != 0)
            Testaaja.virhe("Sillan arvo ei ole 0");

        


        // Rautatie

        Rautatiesilta rs = new Rautatiesilta(100);

        if (rs.getPituus() != 100 )
            Testaaja.virhe("Pituus ei ole 100");
        
        if (rs.getArvo() != 0)
            Testaaja.virhe("Laskuri ei palauta 0");

        Testaaja.vaadiPerinta(rs, Silta.class);
        Testaaja.tarkistaAttribuutit(Rautatiesilta.class);



        // Juna

        Juna pitkaJuna = new Juna(28);
        Juna lyhytJuna = new Juna(10);
        
        if (pitkaJuna.getVaunut() != 28)
            Testaaja.virhe("Pitkän junan vaunujen lukumäärä ei ole 28");

        if (lyhytJuna.getVaunut() != 10)
            Testaaja.virhe("Lyhyen junan vaunujen lukumäärä ei ole 10");

        Testaaja.tarkistaAttribuutit(Juna.class);


        // Juna ylittää sillan

        if (!pitkaJuna.ylita(rs))
            Testaaja.virhe("Pitkä juna ei ylita siltaa");

        if (!lyhytJuna.ylita(rs))
            Testaaja.virhe("Lyhyt juna ei ylitä siltaa");

        if (rs.getArvo() != 38 )
            Testaaja.virhe("Rautatiesillan ylittäneiden vaunujen määrä on: "+rs.getArvo()+", eikä ole 38, vaikka kaksi junaa (28 ja 10 vaunua) ylittivät sillan");


        // Maantiesilta

        Maantiesilta ms = new Maantiesilta(50);

        if (ms.getPituus() != 50)
            Testaaja.virhe("Pituus ei ole 50");

        Testaaja.vaadiPerinta(ms, Silta.class);
        Testaaja.tarkistaAttribuutit(Maantiesilta.class);


        // Matti

        Matti mattiP = new Matti('P');
        Matti mattiV = new Matti('V');
        
        if (mattiP.getPaino() != 80)
            Testaaja.virhe("Matti P:n paino ei ole 80");

        if (mattiV.getPaino() != 86)
            Testaaja.virhe("Matti V:n paino ei ole 86");

        Testaaja.tarkistaAttribuutit(Matti.class);


        // Matti ylittää maantiesillan

        if (!mattiP.ylita(ms) )
            Testaaja.virhe("Matti P. ei ylitä siltaa!");

        if (!mattiV.ylita(ms) )
            Testaaja.virhe("Matti V. ei ylitä siltaa!");

        if (ms.getArvo() != 166)
            Testaaja.virhe("Maantiesillan ylittänyt paino on: "+ms.getArvo()+", eikä 166");


        // Auto

        Auto audi = new Auto();
        
        if (!audi.ylita(ms))
            Testaaja.virhe("Audi ei ylitä maantiesiltaa");

        if (ms.getArvo() != 1166)
            Testaaja.virhe("Maantiesillan ylittänyt paino on: "+ms.getArvo()+", eikä 1166");


        Testaaja.onkoValmis();
    }

}
