Tests unitaires

Tests unitaires

Test d’une classe d’entier

public class BigIntegerTest {
    BigInteger twelve;

    @BeforeAll
    void initialize(){
        twelve = BigInteger(12);
    }

    @Test
    void testEquals() {
        assertEquals(BigInteger.ONE, BigInteger.ONE);
        assertNotEquals(BigInteger.TEN, BigInteger.ONE);
        assertNotEquals(BigInteger.TEN, new String("10"));
    }

    @Test
    void testDivideByZero() {
        assertThrows(ArithmeticException.class, () -> {
            BigInteger.ONE.divide(BigInteger.ZERO);
        });
    }
    
    @Test
    void testAdd(){
        BigInteger a = new BigInteger("-12");
        BigInteger b = new BigInteger("123");
        BigInteger sum = new BigInteger("111");
        assertEquals(sum, a.add(b));
        assertEquals(sum, b.add(a));
    }

    @Test
    void testNegate(){
        BigInteger a = new BigInteger("12");
        BigInteger b = new BigInteger("-12");
        assertEquals(a, b.negate());
    }

    @Test
    void testMultiply(){
        BigInteger a = new BigInteger("-12");
        BigInteger b = new BigInteger("12");
        BigInteger product = new BigInteger("-144");
        assertEquals(product, a.multiply(b));
    }
    
    @Test
    void testSubtract(){
        Random random = new Random(0);
        BigInteger[] valuesA = new  BigInteger[100];
        BigInteger[] valuesSub = new BigInteger[100];
        for(int i = 0; i<100; i++){
            int a = random.nextInt();
            int b = random.nextInt();
            long sub = ((long)a)-b;
            valuesA[i] = new BigInteger(Integer.toString(a)).
                    subtract(new BigInteger(Integer.toString(b)));
            valuesSub[i] = new BigInteger(Long.toString(sub));
        }
        assertArrayEquals(valuesSub, valuesA);
    }

    @Test
    void testDivideAndRemainder(){
        Random random = new Random(0);
        BigInteger[][] computedValues = new BigInteger[100][];
        BigInteger[][] expectedValues = new BigInteger[100][2];
        for(int i = 0; i<100; i++){
            int a = random.nextInt(100);
            int b = random.nextInt(100)+1;
            int quotient = a/b;
            int remainder = a%b;

            String stringA = Integer.toString(a);
            String stringB = Integer.toString(b)

            computedValues[i] = new BigInteger(stringA).
                    divideAndRemainder(new BigInteger(stringB));

            expectedValues[i][0] = new BigInteger(Long.toString(quotient));
            expectedValues[i][1] = new BigInteger(Long.toString(remainder));
        }
        assertArrayEquals(expectedValues, computedValues);
    }
}