diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4373ec6..ea9da33 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,21 +6,9 @@ updates: interval: weekly target-branch: main open-pull-requests-limit: 10 - - package-ecosystem: maven - directory: "/" - schedule: - interval: weekly - target-branch: master - open-pull-requests-limit: 10 - package-ecosystem: github-actions directory: "/" schedule: interval: weekly target-branch: main open-pull-requests-limit: 10 - - package-ecosystem: github-actions - directory: "/" - schedule: - interval: weekly - target-branch: master - open-pull-requests-limit: 10 diff --git a/src/main/java/algorithms/sprint4/Map.java b/src/main/java/algorithms/sprint4/Map.java index da9637b..3c156e9 100644 --- a/src/main/java/algorithms/sprint4/Map.java +++ b/src/main/java/algorithms/sprint4/Map.java @@ -137,7 +137,7 @@ static class Reader { private int len = 0; int read() throws IOException { - if (ptr == len) { + if (ptr >= len) { len = in.read(buffer); ptr = 0; if (len == -1) { @@ -189,6 +189,9 @@ int nextInt(int min, int max) throws IOException { char nextCommand() throws IOException { int c = read(); while (c <= ' ') { + if (c == -1) { + throw new IOException("Unexpected end of input"); + } c = read(); } diff --git a/src/main/java/kyu4/MorseCodeDecoder.java b/src/main/java/kyu4/MorseCodeDecoder.java index cf6bb3e..56bd3c7 100644 --- a/src/main/java/kyu4/MorseCodeDecoder.java +++ b/src/main/java/kyu4/MorseCodeDecoder.java @@ -56,8 +56,6 @@ public class MorseCodeDecoder { ALPHABET_TO_MORSE.put("0", "-----"); ALPHABET_TO_MORSE.put(" ", " "); - MORSE_TO_ALPHABET.put("a", "b"); - MORSE_TO_ALPHABET.put("c", "d"); MORSE_TO_ALPHABET.put("-.-.-.", ";"); MORSE_TO_ALPHABET.put("-...-", "="); MORSE_TO_ALPHABET.put("---", "O"); @@ -84,7 +82,7 @@ public class MorseCodeDecoder { MORSE_TO_ALPHABET.put("-.", "N"); MORSE_TO_ALPHABET.put("..---", "2"); MORSE_TO_ALPHABET.put("-....", "6"); - MORSE_TO_ALPHABET.put("---...", ";"); + MORSE_TO_ALPHABET.put("---...", ":"); MORSE_TO_ALPHABET.put(".-.-.", "+"); MORSE_TO_ALPHABET.put(".--.-.", "@"); MORSE_TO_ALPHABET.put("....-", "4"); diff --git a/src/main/java/kyu6/GiveMeDiamond.java b/src/main/java/kyu6/GiveMeDiamond.java index 7d9e02d..ce0ee3c 100644 --- a/src/main/java/kyu6/GiveMeDiamond.java +++ b/src/main/java/kyu6/GiveMeDiamond.java @@ -11,10 +11,10 @@ public static String print(int n) { int count = n / 2 + 1; StringBuilder strings = new StringBuilder(); for (int i = 1; i <= count; i++) { - strings.append(" ".repeat(count - i)).append("*".repeat(i * 2 - 1)).append(System.lineSeparator()); + strings.append(" ".repeat(count - i)).append("*".repeat(i * 2 - 1)).append('\n'); } for (int i = count - 1; i >= 1; i--) { - strings.append(" ".repeat(count - i)).append("*".repeat(i * 2 - 1)).append(System.lineSeparator()); + strings.append(" ".repeat(count - i)).append("*".repeat(i * 2 - 1)).append('\n'); } return strings.toString(); } diff --git a/src/main/java/kyu6/Prime.java b/src/main/java/kyu6/Prime.java index 3370936..4c1d010 100644 --- a/src/main/java/kyu6/Prime.java +++ b/src/main/java/kyu6/Prime.java @@ -1,15 +1,24 @@ package kyu6; -import java.math.BigInteger; - public class Prime { //6 https://www.codewars.com/kata/5262119038c0985a5b00029f/train/java public static boolean isPrime(int num) { - return num > 0 && BigInteger.valueOf(num).isProbablePrime((int) Math.log(num) + 1); + if (num < 2) { + return false; + } + if (num % 2 == 0) { + return num == 2; + } + for (int divisor = 3; (long) divisor * divisor <= num; divisor += 2) { + if (num % divisor == 0) { + return false; + } + } + return true; } diff --git a/src/test/java/algorithms/sprint4/MapTest.java b/src/test/java/algorithms/sprint4/MapTest.java index 17de432..de9818b 100644 --- a/src/test/java/algorithms/sprint4/MapTest.java +++ b/src/test/java/algorithms/sprint4/MapTest.java @@ -1,11 +1,17 @@ package algorithms.sprint4; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.OptionalInt; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; @Tag("unit") class MapTest { @@ -23,6 +29,23 @@ void hashTableSupportsPutGetUpdateAndDelete() { assertTrue(table.delete(1).isEmpty()); } + @Test + @Timeout(10) + void readerReportsEndOfInputInsteadOfReplayingTheBuffer() throws IOException { + InputStream original = System.in; + try { + System.setIn(new ByteArrayInputStream("g 7".getBytes(StandardCharsets.UTF_8))); + Map.Reader reader = new Map.Reader(); + + assertEquals('g', reader.nextCommand()); + assertEquals(7, reader.nextInt()); + assertThrows(IOException.class, reader::nextCommand); + assertThrows(IOException.class, reader::nextInt); + } finally { + System.setIn(original); + } + } + @Test void hashTableHandlesCollisionsAndNegativeKeys() { Map.HashTable table = new Map.HashTable(); diff --git a/src/test/java/kyu4/MorseCodeDecoderTest.java b/src/test/java/kyu4/MorseCodeDecoderTest.java index 7bb562f..f2de84e 100644 --- a/src/test/java/kyu4/MorseCodeDecoderTest.java +++ b/src/test/java/kyu4/MorseCodeDecoderTest.java @@ -51,6 +51,7 @@ static Stream morseMessages() { Arguments.of(".... . -.--", "HEY"), Arguments.of("...---...", "SOS"), Arguments.of(" .... . -.-- .--- ..- -.. . ", "HEY JUDE"), + Arguments.of("---... -.-.-.", ":;"), Arguments.of("", "") ); } diff --git a/src/test/java/kyu6/PrimeTest.java b/src/test/java/kyu6/PrimeTest.java index 8d74901..09879d5 100644 --- a/src/test/java/kyu6/PrimeTest.java +++ b/src/test/java/kyu6/PrimeTest.java @@ -21,4 +21,16 @@ public class PrimeTest { void smokeTestsShouldExecuteApi() { quality.SmokeMethodTestHarness.verify(kyu6.Prime.class); } + + @ParameterizedTest + @ValueSource(ints = {2, 3, 5, 7, 11, 13, 101, 7919, 2147483647}) + void shouldAcceptPrimes(int candidate) { + assertTrue(isPrime(candidate)); + } + + @ParameterizedTest + @ValueSource(ints = {-7, -1, 0, 1, 4, 9, 15, 25, 49, 121, 7917, 2147483645}) + void shouldRejectNonPrimes(int candidate) { + assertFalse(isPrime(candidate)); + } }