// Filtered on Sonntag 2022-März-13 at 23:15:39 by Tippfilter 0.4-4-g83a7d89 (development build)
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/** Die Test-Klasse SchnellePotenzierungTest enthält Tests für die gleichnamige
 * Klasse mit Programmierübungen.
 *
 * @author  Urs Lautebach
 * @version 2021-04  */
public class SchnellePotenzierungTest {
    /** Konstruktor fuer die Test-Klasse SchnellePotenzierungTest */
    public SchnellePotenzierungTest() { }

    /** Wird vor jeder Testfall-Methode aufgerufen. */
    @Before
    public void setUp() { }

    /** Wird nach jeder Testfall-Methode aufgerufen. */
    @After
    public void tearDown() { }
    
    @Test
    public void testEinfacheFaelle() {
        assertEquals(1,  SchnellePotenzierung.modPotenz(1,     0, 5));
        assertEquals(1,  SchnellePotenzierung.modPotenz(2,     0, 5));
        assertEquals(1,  SchnellePotenzierung.modPotenz(3,     0, 5));

        assertEquals(1,  SchnellePotenzierung.modPotenz(2,     0, 5));
        assertEquals(1,  SchnellePotenzierung.modPotenz(88,    0, 15));
        assertEquals(1,  SchnellePotenzierung.modPotenz(75345, 0, 15));
        
        assertEquals(1,  SchnellePotenzierung.modPotenz(1,     1, 5));
        assertEquals(2,  SchnellePotenzierung.modPotenz(2,     1, 5));
        assertEquals(3,  SchnellePotenzierung.modPotenz(3,     1, 5));

        assertEquals(17, SchnellePotenzierung.modPotenz(17, 1, 44));
        assertEquals(17, SchnellePotenzierung.modPotenz(17, 1, 45));
        assertEquals(7,  SchnellePotenzierung.modPotenz(7,  1, 44));
        assertEquals(7,  SchnellePotenzierung.modPotenz(7,  1, 45));
    }

    @Test
    public void testSoMittel() {
        assertEquals(49,  SchnellePotenzierung.modPotenz(7,   2,  100));
        assertEquals(69,  SchnellePotenzierung.modPotenz(13,  2,  100));
        assertEquals(81,  SchnellePotenzierung.modPotenz(9,   2,  152));
        assertEquals(81,  SchnellePotenzierung.modPotenz(3,   4, 1000));
        assertEquals(24,  SchnellePotenzierung.modPotenz(2,  10, 1000));
    }

    @Test
    public void testGrosseZahlen() {
        assertEquals(80,   SchnellePotenzierung.modPotenz(37,   513,   101));
        assertEquals(129,  SchnellePotenzierung.modPotenz(376,   53,  1001));
        assertEquals(5192, SchnellePotenzierung.modPotenz(376, 5173, 12344));
    }
}

