Add unit tests for FibonacciNumberCheck (#4225)

This commit is contained in:
Albina Gimaletdinova
2023-07-01 20:52:52 +03:00
committed by GitHub
parent bc699b86e5
commit 8862a4dea5
3 changed files with 40 additions and 16 deletions

View File

@ -272,7 +272,7 @@
* [FFT](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FFT.java) * [FFT](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FFT.java)
* [FFTBluestein](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FFTBluestein.java) * [FFTBluestein](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FFTBluestein.java)
* [FibonacciJavaStreams](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FibonacciJavaStreams.java) * [FibonacciJavaStreams](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FibonacciJavaStreams.java)
* [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FibonacciNumber.java) * [FibonacciNumberCheck](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FibonacciNumberCheck.java)
* [FindKthNumber](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FindKthNumber.java) * [FindKthNumber](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FindKthNumber.java)
* [FindMax](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FindMax.java) * [FindMax](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FindMax.java)
* [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FindMaxRecursion.java) * [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/maths/FindMaxRecursion.java)
@ -637,6 +637,7 @@
* [FactorialTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FactorialTest.java) * [FactorialTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FactorialTest.java)
* [FastInverseSqrtTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FastInverseSqrtTests.java) * [FastInverseSqrtTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FastInverseSqrtTests.java)
* [FFTTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FFTTest.java) * [FFTTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FFTTest.java)
* [FibonacciNumberCheckTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FibonacciNumberCheckTest.java)
* [FindMaxTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FindMaxTest.java) * [FindMaxTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FindMaxTest.java)
* [FindMinTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FindMinTest.java) * [FindMinTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FindMinTest.java)
* [FrizzyNumberTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FrizzyNumberTest.java) * [FrizzyNumberTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FrizzyNumberTest.java)

View File

@ -2,17 +2,10 @@ package com.thealgorithms.maths;
/** /**
* Fibonacci: 0 1 1 2 3 5 8 13 21 ... * Fibonacci: 0 1 1 2 3 5 8 13 21 ...
* This code checks Fibonacci Numbers up to 45th number.
* Other checks fail because of 'long'-type overflow.
*/ */
public class FibonacciNumber { public class FibonacciNumberCheck {
public static void main(String[] args) {
assert isFibonacciNumber(1);
assert isFibonacciNumber(2);
assert isFibonacciNumber(21);
assert !isFibonacciNumber(9);
assert !isFibonacciNumber(10);
}
/** /**
* Check if a number is perfect square number * Check if a number is perfect square number
* *
@ -20,8 +13,8 @@ public class FibonacciNumber {
* @return <tt>true</tt> if {@code number} is a perfect square, otherwise * @return <tt>true</tt> if {@code number} is a perfect square, otherwise
* <tt>false</tt> * <tt>false</tt>
*/ */
public static boolean isPerfectSquare(int number) { public static boolean isPerfectSquare(long number) {
int sqrt = (int) Math.sqrt(number); long sqrt = (long) Math.sqrt(number);
return sqrt * sqrt == number; return sqrt * sqrt == number;
} }
@ -34,9 +27,9 @@ public class FibonacciNumber {
* <tt>false</tt> * <tt>false</tt>
* @link https://en.wikipedia.org/wiki/Fibonacci_number#Identification * @link https://en.wikipedia.org/wiki/Fibonacci_number#Identification
*/ */
public static boolean isFibonacciNumber(int number) { public static boolean isFibonacciNumber(long number) {
int value1 = 5 * number * number + 4; long value1 = 5 * number * number + 4;
int value2 = 5 * number * number - 4; long value2 = 5 * number * number - 4;
return isPerfectSquare(value1) || isPerfectSquare(value2); return isPerfectSquare(value1) || isPerfectSquare(value2);
} }
} }

View File

@ -0,0 +1,30 @@
package com.thealgorithms.maths;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
/**
* Fibonacci Sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...
*
* @author Albina Gimaletdinova on 01/07/2023
*/
public class FibonacciNumberCheckTest {
@Test
public void testNumberIsFibonacciNumber() {
Assertions.assertTrue(FibonacciNumberCheck.isFibonacciNumber(1));
Assertions.assertTrue(FibonacciNumberCheck.isFibonacciNumber(2));
Assertions.assertTrue(FibonacciNumberCheck.isFibonacciNumber(21));
Assertions.assertTrue(FibonacciNumberCheck.isFibonacciNumber(6765)); // 20th number
Assertions.assertTrue(FibonacciNumberCheck.isFibonacciNumber(832040)); // 30th number
Assertions.assertTrue(FibonacciNumberCheck.isFibonacciNumber(102334155)); // 40th number
Assertions.assertTrue(FibonacciNumberCheck.isFibonacciNumber(701408733)); // 45th number
}
@Test
public void testNumberIsNotFibonacciNumber() {
Assertions.assertFalse(FibonacciNumberCheck.isFibonacciNumber(9));
Assertions.assertFalse(FibonacciNumberCheck.isFibonacciNumber(10));
Assertions.assertFalse(FibonacciNumberCheck.isFibonacciNumber(145));
Assertions.assertFalse(FibonacciNumberCheck.isFibonacciNumber(701408734));
}
}