|
| 1 | +package com.baeldung.algorithms.sumoftwosquares; |
| 2 | + |
| 3 | +import org.junit.jupiter.api.Test; |
| 4 | +import org.junit.jupiter.api.DisplayName; |
| 5 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
| 6 | +import static org.junit.jupiter.api.Assertions.assertFalse; |
| 7 | + |
| 8 | + |
| 9 | +class NumberAsSumOfTwoSquaresUnitTest { |
| 10 | + |
| 11 | + @Test |
| 12 | + @DisplayName("Given input number can be expressed as a sum of squares, when checked, then returns true") |
| 13 | + void givenNumberIsSumOfSquares_whenCheckIsCalled_thenReturnsTrue() { |
| 14 | + // Simple cases |
| 15 | + assertTrue(NumberAsSumOfTwoSquares.isSumOfTwoSquares(0)); // 0^2 + 0^2 |
| 16 | + assertTrue(NumberAsSumOfTwoSquares.isSumOfTwoSquares(1)); // 1^2 + 0^2 |
| 17 | + assertTrue(NumberAsSumOfTwoSquares.isSumOfTwoSquares(5)); // 1^2 + 2^2 |
| 18 | + assertTrue(NumberAsSumOfTwoSquares.isSumOfTwoSquares(8)); // 2^2 + 2^2 |
| 19 | + |
| 20 | + // Cases from Fermat theorem |
| 21 | + assertTrue(NumberAsSumOfTwoSquares.isSumOfTwoSquares(50)); // 2 * 5^2. No 4k+3 primes. |
| 22 | + assertTrue(NumberAsSumOfTwoSquares.isSumOfTwoSquares(45)); // 3^2 * 5. 4k+3 prime (3) has even exp. |
| 23 | + assertTrue(NumberAsSumOfTwoSquares.isSumOfTwoSquares(18)); // 2 * 3^2. 4k+3 prime (3) has even exp. |
| 24 | + } |
| 25 | + |
| 26 | + @Test |
| 27 | + @DisplayName("Given input number can't be expressed as a sum of squares, when checked, then returns false") |
| 28 | + void givenNumberIsNotSumOfSquares_whenCheckIsCalled_thenReturnsFalse() { |
| 29 | + // Simple cases |
| 30 | + assertFalse(NumberAsSumOfTwoSquares.isSumOfTwoSquares(3)); // 3 (4k+3, exp 1) |
| 31 | + assertFalse(NumberAsSumOfTwoSquares.isSumOfTwoSquares(6)); // 2 * 3 (3 has exp 1) |
| 32 | + assertFalse(NumberAsSumOfTwoSquares.isSumOfTwoSquares(7)); // 7 (4k+3, exp 1) |
| 33 | + assertFalse(NumberAsSumOfTwoSquares.isSumOfTwoSquares(11)); // 11 (4k+3, exp 1) |
| 34 | + |
| 35 | + // Cases from theorem |
| 36 | + assertFalse(NumberAsSumOfTwoSquares.isSumOfTwoSquares(12)); // 2^2 * 3 (3 has exp 1) |
| 37 | + assertFalse(NumberAsSumOfTwoSquares.isSumOfTwoSquares(21)); // 3 * 7 (both 3 and 7 have exp 1) |
| 38 | + assertFalse(NumberAsSumOfTwoSquares.isSumOfTwoSquares(28)); // 2^2 * 7 (7 has exp 1) |
| 39 | + } |
| 40 | + |
| 41 | + @Test |
| 42 | + @DisplayName("Given input number is negative, when checked, then returns false") |
| 43 | + void givenNegativeNumber_whenCheckIsCalled_thenReturnsFalse() { |
| 44 | + assertFalse(NumberAsSumOfTwoSquares.isSumOfTwoSquares(-1)); // Negatives as hygiene |
| 45 | + assertFalse(NumberAsSumOfTwoSquares.isSumOfTwoSquares(-10)); // Negatives as hygiene |
| 46 | + } |
| 47 | +} |
0 commit comments