package com.thealgorithms.maths;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class GCDTest {

    @Test
    void test1() {
        Assertions.assertThrows(ArithmeticException.class, () -> GCD.gcd(-1, 0));
    }

    @Test
    void test2() {
        Assertions.assertThrows(ArithmeticException.class, () -> GCD.gcd(10, -2));
    }

    @Test
    void test3() {
        Assertions.assertThrows(ArithmeticException.class, () -> GCD.gcd(-5, -3));
    }

    @Test
    void test4() {
        Assertions.assertEquals(GCD.gcd(0, 2), 2);
    }

    @Test
    void test5() {
        Assertions.assertEquals(GCD.gcd(10, 0), 10);
    }

    @Test
    void test6() {
        Assertions.assertEquals(GCD.gcd(1, 0), 1);
    }

    @Test
    void test7() {
        Assertions.assertEquals(GCD.gcd(9, 6), 3);
    }

    @Test
    void test8() {
        Assertions.assertEquals(GCD.gcd(48, 18, 30, 12), 6);
    }

    @Test
    void testArrayGcd1() {
        Assertions.assertEquals(GCD.gcd(new int[] {9, 6}), 3);
    }

    @Test
    void testArrayGcd2() {
        Assertions.assertEquals(GCD.gcd(new int[] {2 * 3 * 5 * 7, 2 * 5 * 5 * 5, 2 * 5 * 11, 5 * 5 * 5 * 13}), 5);
    }

    @Test
    void testArrayGcdForEmptyInput() {
        Assertions.assertEquals(GCD.gcd(new int[] {}), 0);
    }
}
