diff --git a/src/main/java/DNAnalyzer/core/Properties.java b/src/main/java/DNAnalyzer/core/Properties.java index c12eea0c..e16f64eb 100644 --- a/src/main/java/DNAnalyzer/core/Properties.java +++ b/src/main/java/DNAnalyzer/core/Properties.java @@ -16,6 +16,7 @@ import java.io.PrintStream; import java.util.Arrays; import java.util.List; +import java.util.stream.IntStream; import DNAnalyzer.core.DNAAnalysis.BasePairIndex; import DNAnalyzer.data.aminoAcid.AminoAcid; @@ -129,30 +130,25 @@ public static void printNucleotideCount(final String dna, PrintStream out) { */ public static boolean isRandomDNA(final String dna) { long[] nucleotideCount = countBasePairs(dna); - - // This sorts the array to get min and max value - Arrays.sort(nucleotideCount); - - // Only calculate 2 Percentages, as only the highest difference (max - min) is - // relevant - final int maxPercent = nucleotidePercentage(nucleotideCount[3], dna); - final int minPercent = nucleotidePercentage(nucleotideCount[0], dna); - // If the percentage of each nucleotide is between 2% of one another, then it is - // random - - return isDifferenceLessOrEqualTo2(maxPercent, minPercent); - } - - /** - * Checks if the differnce between two numbers is less or equal to 2 - * - * @param maxPercent one number to calculate the difference - * @param minPercent the other number to calculate the difference - * @return Whether the difference is less or equal to 2 - * @category Properties - */ - public static boolean isDifferenceLessOrEqualTo2(int maxPercent, int minPercent) { - return Math.abs(maxPercent - minPercent) <= 2; + int[] percentages = Arrays.stream(nucleotideCount) + .mapToInt(c -> nucleotidePercentage(c, dna)) + .toArray(); + + int a = percentages[BasePairIndex.ADENINE]; + int t = percentages[BasePairIndex.THYMINE]; + int g = percentages[BasePairIndex.GUANINE]; + int c = percentages[BasePairIndex.CYTOSINE]; + + IntStream diffs = IntStream.of( + Math.abs(a - t), + Math.abs(a - g), + Math.abs(a - c), + Math.abs(t - g), + Math.abs(t - c), + Math.abs(g - c) + ); + + return diffs.allMatch(diff -> diff <= 2); } /** diff --git a/src/test/java/DNAnalyzer/core/PropertiesTest.java b/src/test/java/DNAnalyzer/core/PropertiesTest.java index e0ba8d5d..bb7514d0 100644 --- a/src/test/java/DNAnalyzer/core/PropertiesTest.java +++ b/src/test/java/DNAnalyzer/core/PropertiesTest.java @@ -78,24 +78,4 @@ void shouldIsRandomDNAReturnTrue() { boolean actual = Properties.isRandomDNA(dnaString); assertTrue(actual); } - - // @Test - // void shouldIsRandomDNAReturnFalse() { - // String testEmptyString = ""; - // boolean actual = Properties.isRandomDNA(testEmptyString); - // assertFalse(actual); - // } - - @Test - void shouldIsDifferenceLessOrEqualTo2ReturnTrue() { - boolean actual = Properties.isDifferenceLessOrEqualTo2(10, 9); - assertTrue(actual); - } - - @Test - void shouldIsDifferenceLessOrEqualTo2ReturnFalse() { - boolean actual = Properties.isDifferenceLessOrEqualTo2(10, 1); - assertFalse(actual); - } - } \ No newline at end of file