diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index 3726c41..0b0c368 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -3,3 +3,6 @@
# Reformat all Java sources with palantir-java-format
f490a4f2627cc093ad2cfa4ba93809556254e7de
+
+# Add final to parameters, locals, fields and static-only classes
+5c6d4e98af79d60fc12d93bbfba6b9dac8406b8f
diff --git a/config/pmd/final-modifiers.xml b/config/pmd/final-modifiers.xml
new file mode 100644
index 0000000..219e0bc
--- /dev/null
+++ b/config/pmd/final-modifiers.xml
@@ -0,0 +1,15 @@
+
+
+
+ Use final wherever a variable or class is never changed. The "could be final" rules only flag parameters and
+ locals that are never reassigned, so code that deliberately reassigns stays as it is.
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index fcbee54..88bbf7e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,8 @@
0.8.16
3.11.0
2.103.0
+ 3.28.0
+ 7.29.0
@@ -115,6 +117,37 @@
+
+ maven-pmd-plugin
+ ${maven-pmd-plugin.version}
+
+
+ config/pmd/final-modifiers.xml
+
+ true
+ true
+ false
+
+
+
+ net.sourceforge.pmd
+ pmd-core
+ ${pmd.version}
+
+
+ net.sourceforge.pmd
+ pmd-java
+ ${pmd.version}
+
+
+
+
+
+ check
+
+
+
+
maven-enforcer-plugin
${maven-enforcer-plugin.version}
diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/Element.java b/src/main/java/io/github/diegourban/algorithms/datastructure/Element.java
index bbd7fae..64d14f5 100644
--- a/src/main/java/io/github/diegourban/algorithms/datastructure/Element.java
+++ b/src/main/java/io/github/diegourban/algorithms/datastructure/Element.java
@@ -2,9 +2,9 @@
public class Element {
- private String name;
+ private final String name;
- public Element(String name) {
+ public Element(final String name) {
this.name = name;
}
@@ -13,11 +13,11 @@ public String getName() {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
- Element other = (Element) obj;
+ final Element other = (Element) obj;
return other.getName().equals(this.getName());
}
diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtils.java b/src/main/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtils.java
index 91f9738..3b69505 100644
--- a/src/main/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtils.java
+++ b/src/main/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtils.java
@@ -2,11 +2,11 @@
import java.util.Random;
-public class ArrayUtils {
+public final class ArrayUtils {
private ArrayUtils() {}
- private static Random rand = new Random();
+ private static final Random rand = new Random();
/**
* Function for doing an in-place ↴ shuffle of an array.
@@ -19,7 +19,7 @@ private ArrayUtils() {}
*
* @param theArray the array to shuffle
*/
- public static void shuffle(int[] theArray) {
+ public static void shuffle(final int[] theArray) {
// if it's 1 or 0 items, just return
if (theArray.length <= 1) {
return;
@@ -32,18 +32,18 @@ public static void shuffle(int[] theArray) {
// (could also be the item currently in that spot)
// must be an item AFTER the current item, because the stuff
// before has all already been placed
- int randomChoiceIndex = getRandom(indexWeAreChoosingFor, theArray.length - 1);
+ final int randomChoiceIndex = getRandom(indexWeAreChoosingFor, theArray.length - 1);
// place our random choice in the spot by swapping
if (randomChoiceIndex != indexWeAreChoosingFor) {
- int valueAtIndexWeChoseFor = theArray[indexWeAreChoosingFor];
+ final int valueAtIndexWeChoseFor = theArray[indexWeAreChoosingFor];
theArray[indexWeAreChoosingFor] = theArray[randomChoiceIndex];
theArray[randomChoiceIndex] = valueAtIndexWeChoseFor;
}
}
}
- private static int getRandom(int floor, int ceiling) {
+ private static int getRandom(final int floor, final int ceiling) {
return rand.nextInt((ceiling - floor) + 1) + floor;
}
}
diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/binarytree/BinaryTreeNode.java b/src/main/java/io/github/diegourban/algorithms/datastructure/binarytree/BinaryTreeNode.java
index 3e23fbb..cbda92c 100644
--- a/src/main/java/io/github/diegourban/algorithms/datastructure/binarytree/BinaryTreeNode.java
+++ b/src/main/java/io/github/diegourban/algorithms/datastructure/binarytree/BinaryTreeNode.java
@@ -6,16 +6,16 @@ public class BinaryTreeNode {
public BinaryTreeNode left;
public BinaryTreeNode right;
- public BinaryTreeNode(int value) {
+ public BinaryTreeNode(final int value) {
this.value = value;
}
- public BinaryTreeNode insertLeft(int leftValue) {
+ public BinaryTreeNode insertLeft(final int leftValue) {
this.left = new BinaryTreeNode(leftValue);
return this.left;
}
- public BinaryTreeNode insertRight(int rightValue) {
+ public BinaryTreeNode insertRight(final int rightValue) {
this.right = new BinaryTreeNode(rightValue);
return this.right;
}
diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedList.java b/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedList.java
index c90dd0e..3e62bb9 100644
--- a/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedList.java
+++ b/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedList.java
@@ -10,11 +10,11 @@ public class LinkedList {
public void addAtStart(final Element element) {
if (this.totalElements == 0) {
- LinkedListNode newNode = new LinkedListNode(element);
+ final LinkedListNode newNode = new LinkedListNode(element);
this.first = newNode;
this.last = newNode;
} else {
- LinkedListNode newNode = new LinkedListNode(element, this.first);
+ final LinkedListNode newNode = new LinkedListNode(element, this.first);
this.first.setPrevious(newNode);
this.first = newNode;
}
@@ -26,7 +26,7 @@ public void addAtEnd(final Element element) {
if (this.totalElements == 0) {
addAtStart(element);
} else {
- LinkedListNode newNode = new LinkedListNode(element);
+ final LinkedListNode newNode = new LinkedListNode(element);
this.last.setNext(newNode);
newNode.setPrevious(this.last);
this.last = newNode;
@@ -41,10 +41,10 @@ public void add(final int position, final Element element) {
} else if (position == this.totalElements) {
addAtEnd(element);
} else {
- LinkedListNode previous = this.getNode(position - 1);
- LinkedListNode next = previous.getNext();
+ final LinkedListNode previous = this.getNode(position - 1);
+ final LinkedListNode next = previous.getNext();
- LinkedListNode newNode = new LinkedListNode(element, previous.getNext());
+ final LinkedListNode newNode = new LinkedListNode(element, previous.getNext());
newNode.setPrevious(previous);
previous.setNext(newNode);
next.setPrevious(newNode);
@@ -93,7 +93,7 @@ public void removeFromEnd() {
if (this.totalElements == 1) {
this.removeFromStart();
} else {
- LinkedListNode previous = this.last.getPrevious();
+ final LinkedListNode previous = this.last.getPrevious();
previous.setNext(null);
this.last = previous;
this.totalElements--;
@@ -106,9 +106,9 @@ public void remove(final int position) {
} else if (position == totalElements - 1) {
this.removeFromEnd();
} else {
- LinkedListNode previous = this.getNode(position - 1);
- LinkedListNode current = previous.getNext();
- LinkedListNode next = current.getNext();
+ final LinkedListNode previous = this.getNode(position - 1);
+ final LinkedListNode current = previous.getNext();
+ final LinkedListNode next = current.getNext();
previous.setNext(next);
next.setPrevious(previous);
@@ -120,7 +120,7 @@ public int size() {
return this.totalElements;
}
- public boolean contains(Element element) {
+ public boolean contains(final Element element) {
LinkedListNode current = this.first;
while (current != null) {
if (current.getElement().equals(element)) {
@@ -138,7 +138,7 @@ public String toString() {
}
LinkedListNode current = this.first;
- StringBuilder sb = new StringBuilder("[");
+ final StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < this.totalElements; i++) {
sb.append(current.getElement().getName());
sb.append(",");
diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListNode.java b/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListNode.java
index 30e2623..32f9f0e 100644
--- a/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListNode.java
+++ b/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListNode.java
@@ -22,7 +22,7 @@ public Element getElement() {
return element;
}
- public void setElement(Element element) {
+ public void setElement(final Element element) {
this.element = element;
}
@@ -30,7 +30,7 @@ public LinkedListNode getNext() {
return next;
}
- public void setNext(LinkedListNode next) {
+ public void setNext(final LinkedListNode next) {
this.next = next;
}
@@ -38,7 +38,7 @@ public LinkedListNode getPrevious() {
return previous;
}
- public void setPrevious(LinkedListNode previous) {
+ public void setPrevious(final LinkedListNode previous) {
this.previous = previous;
}
}
diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/queue/Queue.java b/src/main/java/io/github/diegourban/algorithms/datastructure/queue/Queue.java
index 94adc62..dba0c9b 100644
--- a/src/main/java/io/github/diegourban/algorithms/datastructure/queue/Queue.java
+++ b/src/main/java/io/github/diegourban/algorithms/datastructure/queue/Queue.java
@@ -7,7 +7,7 @@ public class Queue {
private final LinkedList elements = new LinkedList<>();
- public void add(Element element) {
+ public void add(final Element element) {
this.elements.add(element);
}
diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/set/Set.java b/src/main/java/io/github/diegourban/algorithms/datastructure/set/Set.java
index 1aeb6f2..1a8d3aa 100644
--- a/src/main/java/io/github/diegourban/algorithms/datastructure/set/Set.java
+++ b/src/main/java/io/github/diegourban/algorithms/datastructure/set/Set.java
@@ -5,7 +5,7 @@
public class Set {
- private List> table = new LinkedList>();
+ private final List> table = new LinkedList>();
public Set() {
for (int i = 0; i < 26; i++) {
@@ -13,28 +13,28 @@ public Set() {
}
}
- public void add(String word) {
+ public void add(final String word) {
if (!contains(word)) {
- int index = calculateTableIndex(word);
- List list = this.table.get(index);
+ final int index = calculateTableIndex(word);
+ final List list = this.table.get(index);
list.add(word);
}
}
- public void remove(String word) {
+ public void remove(final String word) {
if (contains(word)) {
- int index = calculateTableIndex(word);
- List list = this.table.get(index);
+ final int index = calculateTableIndex(word);
+ final List list = this.table.get(index);
list.remove(word);
}
}
- private boolean contains(String word) {
- int index = calculateTableIndex(word);
+ private boolean contains(final String word) {
+ final int index = calculateTableIndex(word);
return this.table.get(index).contains(word);
}
- private int calculateTableIndex(String word) {
+ private int calculateTableIndex(final String word) {
return word.toLowerCase().charAt(0) % 26;
}
diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/stack/Stack.java b/src/main/java/io/github/diegourban/algorithms/datastructure/stack/Stack.java
index a55ee27..33deeea 100644
--- a/src/main/java/io/github/diegourban/algorithms/datastructure/stack/Stack.java
+++ b/src/main/java/io/github/diegourban/algorithms/datastructure/stack/Stack.java
@@ -8,7 +8,7 @@ public class Stack {
private final List elements = new LinkedList<>();
- public void push(Element element) {
+ public void push(final Element element) {
this.elements.add(element);
}
diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/vector/Vector.java b/src/main/java/io/github/diegourban/algorithms/datastructure/vector/Vector.java
index 5d7c6c2..e8fbb23 100644
--- a/src/main/java/io/github/diegourban/algorithms/datastructure/vector/Vector.java
+++ b/src/main/java/io/github/diegourban/algorithms/datastructure/vector/Vector.java
@@ -67,7 +67,7 @@ public int size() {
private void guaranteesSpace() {
if (this.totalElements == this.elements.length) {
- Element[] newElements = new Element[this.elements.length * 2];
+ final Element[] newElements = new Element[this.elements.length * 2];
for (int i = 0; i < this.elements.length; i++) {
newElements[i] = this.elements[i];
}
diff --git a/src/main/java/io/github/diegourban/algorithms/io/Reader.java b/src/main/java/io/github/diegourban/algorithms/io/Reader.java
index c9cc53d..c806c7d 100644
--- a/src/main/java/io/github/diegourban/algorithms/io/Reader.java
+++ b/src/main/java/io/github/diegourban/algorithms/io/Reader.java
@@ -16,14 +16,14 @@ public class Reader {
private final byte[] buffer;
private int bufferPointer, bytesRead;
- public Reader(InputStream input) {
+ public Reader(final InputStream input) {
din = new DataInputStream(input);
buffer = new byte[BUFFER_SIZE];
bufferPointer = bytesRead = 0;
}
public String readLine() throws IOException {
- byte[] buf = new byte[10000]; // line length
+ final byte[] buf = new byte[10000]; // line length
int cnt = 0;
int c = 0;
@@ -47,7 +47,7 @@ public int nextInt() throws IOException {
c = read();
}
- boolean neg = (c == '-');
+ final boolean neg = (c == '-');
if (neg) {
c = read();
}
@@ -81,7 +81,7 @@ public long nextLong() throws IOException {
c = read();
}
- boolean neg = (c == '-');
+ final boolean neg = (c == '-');
if (neg) {
c = read();
}
@@ -106,7 +106,7 @@ public double nextDouble() throws IOException {
c = read();
}
- boolean neg = (c == '-');
+ final boolean neg = (c == '-');
if (neg) {
c = read();
}
@@ -128,7 +128,7 @@ public double nextDouble() throws IOException {
return ret;
}
- public void skip(int n) throws IOException {
+ public void skip(final int n) throws IOException {
for (int i = 0; i < n; i++) {
read();
}
diff --git a/src/main/java/io/github/diegourban/algorithms/math/Combinatorics.java b/src/main/java/io/github/diegourban/algorithms/math/Combinatorics.java
index b037df1..19abf97 100644
--- a/src/main/java/io/github/diegourban/algorithms/math/Combinatorics.java
+++ b/src/main/java/io/github/diegourban/algorithms/math/Combinatorics.java
@@ -2,7 +2,7 @@
import java.math.BigInteger;
-public class Combinatorics {
+public final class Combinatorics {
private Combinatorics() {}
@@ -22,7 +22,7 @@ private Combinatorics() {}
* @param m the column number (0-indexed)
* @return
*/
- public static BigInteger binomialCoefficient(int n, int m) {
+ public static BigInteger binomialCoefficient(final int n, final int m) {
if (m < 0 || m > n) {
return new BigInteger("0");
}
@@ -35,7 +35,7 @@ public static BigInteger binomialCoefficient(int n, int m) {
return new BigInteger(String.valueOf(n));
}
- BigInteger[] binomials = new BigInteger[n + 1];
+ final BigInteger[] binomials = new BigInteger[n + 1];
binomials[0] = new BigInteger("1");
for (int i = 1; i <= n; i++) {
binomials[i] = new BigInteger("1");
diff --git a/src/main/java/io/github/diegourban/algorithms/math/Geometry.java b/src/main/java/io/github/diegourban/algorithms/math/Geometry.java
index bbe26d8..7d6ac5d 100644
--- a/src/main/java/io/github/diegourban/algorithms/math/Geometry.java
+++ b/src/main/java/io/github/diegourban/algorithms/math/Geometry.java
@@ -2,7 +2,7 @@
import java.util.Arrays;
-public class Geometry {
+public final class Geometry {
private Geometry() {}
@@ -17,7 +17,7 @@ private Geometry() {}
* @param y2 point 2 y coordinate
* @return the distance between the two points
*/
- public static double distance(int x1, int y1, int x2, int y2) {
+ public static double distance(final int x1, final int y1, final int x2, final int y2) {
// return Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
return Math.hypot(x1 - x2, y1 - y2);
}
@@ -28,7 +28,7 @@ public static double distance(int x1, int y1, int x2, int y2) {
* @param radius the radius of the circle
* @return the area of the circle
*/
- public static double areaOfCircleFromRadius(double radius) {
+ public static double areaOfCircleFromRadius(final double radius) {
return SIMPLE_PI * (radius * radius);
}
@@ -38,8 +38,8 @@ public static double areaOfCircleFromRadius(double radius) {
* @param diameter the diameter of the circle
* @return the area of the circle
*/
- public static double areaOfCircleFromDiameter(double diameter) {
- double radius = radiusOfCircleFromDiameter(diameter);
+ public static double areaOfCircleFromDiameter(final double diameter) {
+ final double radius = radiusOfCircleFromDiameter(diameter);
return areaOfCircleFromRadius(radius);
}
@@ -49,7 +49,7 @@ public static double areaOfCircleFromDiameter(double diameter) {
* @param diameter the diameter of the circle
* @return the radius of the circle
*/
- public static double radiusOfCircleFromDiameter(double diameter) {
+ public static double radiusOfCircleFromDiameter(final double diameter) {
return diameter / 2.0;
}
@@ -59,7 +59,7 @@ public static double radiusOfCircleFromDiameter(double diameter) {
* @param area the area of the circle
* @return the radius of the circle
*/
- public static double radiusOfCircleFromArea(double area) {
+ public static double radiusOfCircleFromArea(final double area) {
return Math.sqrt(area / SIMPLE_PI);
}
@@ -69,7 +69,7 @@ public static double radiusOfCircleFromArea(double area) {
* @param sides the number of sides of the polygon
* @return the amount of diagonals
*/
- public static long diagonalsOfPolygonWithSides(long sides) {
+ public static long diagonalsOfPolygonWithSides(final long sides) {
return (sides * (sides - 3)) / 2;
}
@@ -80,7 +80,7 @@ public static long diagonalsOfPolygonWithSides(long sides) {
* @param baseRadius the cylinder base radius
* @return the height of the cylinder
*/
- public static double heightOfCylinder(double volume, double baseRadius) {
+ public static double heightOfCylinder(final double volume, final double baseRadius) {
return volume / (SIMPLE_PI * baseRadius * baseRadius);
}
@@ -92,20 +92,20 @@ public static double heightOfCylinder(double volume, double baseRadius) {
* @param c side c
* @return true if the sides form a valid triangle, false otherwise
*/
- public static boolean isValidTriangle(double a, double b, double c) {
+ public static boolean isValidTriangle(final double a, final double b, final double c) {
return (a + b > c) && (b + c > a) && (a + c > b);
}
- public static TriangleType checkTriangleType(double a, double b, double c) {
- double[] array = new double[3];
+ public static TriangleType checkTriangleType(final double a, final double b, final double c) {
+ final double[] array = new double[3];
array[0] = a;
array[1] = b;
array[2] = c;
Arrays.sort(array);
- double min = array[0];
- double med = array[1];
- double max = array[2];
+ final double min = array[0];
+ final double med = array[1];
+ final double max = array[2];
if (max == med && med == min) {
return TriangleType.EQUILATERAL;
@@ -118,20 +118,20 @@ public static TriangleType checkTriangleType(double a, double b, double c) {
return TriangleType.ESCALENE;
}
- public static boolean isRectangleTriangle(double a, double b, double c) {
- double[] array = new double[3];
+ public static boolean isRectangleTriangle(final double a, final double b, final double c) {
+ final double[] array = new double[3];
array[0] = a;
array[1] = b;
array[2] = c;
Arrays.sort(array);
- double min = array[0];
- double med = array[1];
- double max = array[2];
+ final double min = array[0];
+ final double med = array[1];
+ final double max = array[2];
- double maxSquared = max * max;
- double medSquared = med * med;
- double minSquared = min * min;
+ final double maxSquared = max * max;
+ final double medSquared = med * med;
+ final double minSquared = min * min;
return maxSquared == medSquared + minSquared;
}
diff --git a/src/main/java/io/github/diegourban/algorithms/math/Measurement.java b/src/main/java/io/github/diegourban/algorithms/math/Measurement.java
index d1ded89..5a7be66 100644
--- a/src/main/java/io/github/diegourban/algorithms/math/Measurement.java
+++ b/src/main/java/io/github/diegourban/algorithms/math/Measurement.java
@@ -1,6 +1,6 @@
package io.github.diegourban.algorithms.math;
-public class Measurement {
+public final class Measurement {
private Measurement() {}
@@ -10,7 +10,7 @@ private Measurement() {}
* @param miles the amount of miles to convert
* @return the amount of miles converted to kilometers
*/
- public static double milesToKilometers(double miles) {
+ public static double milesToKilometers(final double miles) {
return miles * 1.609344;
}
@@ -20,7 +20,7 @@ public static double milesToKilometers(double miles) {
* @param kilometers the amount of kilometers to convert
* @return the amount of kilometers converted to miles
*/
- public static double kilometersToMiles(double kilometers) {
+ public static double kilometersToMiles(final double kilometers) {
return kilometers * 0.621371;
}
}
diff --git a/src/main/java/io/github/diegourban/algorithms/math/NumberTheory.java b/src/main/java/io/github/diegourban/algorithms/math/NumberTheory.java
index 2463374..fd1a5c1 100644
--- a/src/main/java/io/github/diegourban/algorithms/math/NumberTheory.java
+++ b/src/main/java/io/github/diegourban/algorithms/math/NumberTheory.java
@@ -5,7 +5,7 @@
/**
* Number theory: greatest common divisor, least common multiple, primality and prime factorisation.
*/
-public class NumberTheory {
+public final class NumberTheory {
private NumberTheory() {}
@@ -16,7 +16,7 @@ private NumberTheory() {}
* @param b
* @return The least common multiple of two numbers.
*/
- public static long lcm(long a, long b) {
+ public static long lcm(final long a, final long b) {
return a * (b / gcdLoop(a, b));
}
@@ -26,7 +26,7 @@ public static long lcm(long a, long b) {
* @param input array of numbers
* @return The least common multiple of an array of numbers.
*/
- public static long lcm(long[] input) {
+ public static long lcm(final long[] input) {
long result = input[0];
for (int i = 1; i < input.length; i++) result = lcm(result, input[i]);
return result;
@@ -46,7 +46,7 @@ public static long gcdLoop(final long a, final long b) {
long gcd = a;
long bNumber = b;
while (bNumber > 0) {
- long temp = bNumber;
+ final long temp = bNumber;
bNumber = gcd % bNumber; // % is remainder
gcd = temp;
}
@@ -63,7 +63,7 @@ public static long gcdLoop(final long a, final long b) {
* @param b
* @return The greatest common divisor of two numbers.
*/
- public static long gcdRecursive(long a, long b) {
+ public static long gcdRecursive(final long a, final long b) {
return b == 0 ? a : gcdRecursive(b, a % b);
}
@@ -75,7 +75,7 @@ public static long gcdRecursive(long a, long b) {
* @param n
* @return true if the number n is prime, false otherwise
*/
- public static boolean isPrime(int n) {
+ public static boolean isPrime(final int n) {
if (n <= 1) {
return false;
} else if (n <= 3) {
@@ -101,8 +101,8 @@ public static boolean isPrime(int n) {
* @param number
* @return The list of prime factors of a number.
*/
- public static List primeFactorsList(int number) {
- List factors = new ArrayList<>();
+ public static List primeFactorsList(final int number) {
+ final List factors = new ArrayList<>();
fillPrimeFactors(number, factors);
return factors;
}
@@ -113,8 +113,8 @@ public static List primeFactorsList(int number) {
* @param number
* @return The set of prime factors of a number.
*/
- public static Set primeFactorsSet(int number) {
- Set factors = new HashSet<>();
+ public static Set primeFactorsSet(final int number) {
+ final Set factors = new HashSet<>();
fillPrimeFactors(number, factors);
return factors;
}
@@ -125,7 +125,7 @@ public static Set primeFactorsSet(int number) {
* @param number the number to extract the prime factors
* @param factors the collection to fill with the prime factors
*/
- private static void fillPrimeFactors(int number, Collection factors) {
+ private static void fillPrimeFactors(final int number, final Collection factors) {
int n = number;
for (int i = 2; i <= n / i; i++) {
while (n % i == 0) {
diff --git a/src/main/java/io/github/diegourban/algorithms/math/Numbers.java b/src/main/java/io/github/diegourban/algorithms/math/Numbers.java
index e1f15a8..08323d5 100644
--- a/src/main/java/io/github/diegourban/algorithms/math/Numbers.java
+++ b/src/main/java/io/github/diegourban/algorithms/math/Numbers.java
@@ -1,6 +1,6 @@
package io.github.diegourban.algorithms.math;
-public class Numbers {
+public final class Numbers {
private Numbers() {}
@@ -11,7 +11,7 @@ private Numbers() {}
* @param digit the digit expected to find in the number
* @return true if the number contains the digit, false otherwise
*/
- public static boolean containsDigit(long number, long digit) {
+ public static boolean containsDigit(final long number, final long digit) {
long thisNumber = number >= 0 ? number : -number;
long thisDigit;
@@ -41,7 +41,7 @@ public static boolean containsRepeatingDigits(final long number, final int times
int reps = 0;
while (theNumber > 0) {
- Long n = theNumber % 10;
+ final Long n = theNumber % 10;
theNumber /= 10;
if (n.equals(old)) {
if (++reps == times) {
@@ -65,8 +65,8 @@ public static boolean containsRepeatingDigits(final long number, final int times
public static int[] toArray(final long number) {
long theNumber = number;
- int length = Long.toString(theNumber).length();
- int[] array = new int[length];
+ final int length = Long.toString(theNumber).length();
+ final int[] array = new int[length];
for (int index = 0; index < length; index++) {
array[index] = (int) theNumber % 10;
@@ -82,7 +82,7 @@ public static int[] toArray(final long number) {
* @param number some number
* @return the length of the number
*/
- public static int length(int number) {
+ public static int length(final int number) {
if (number < 100000) {
// 5 or less
if (number < 100) {
diff --git a/src/main/java/io/github/diegourban/algorithms/math/Sequences.java b/src/main/java/io/github/diegourban/algorithms/math/Sequences.java
index da67b4e..087dcf8 100644
--- a/src/main/java/io/github/diegourban/algorithms/math/Sequences.java
+++ b/src/main/java/io/github/diegourban/algorithms/math/Sequences.java
@@ -7,7 +7,7 @@
/**
* Number sequences.
*/
-public class Sequences {
+public final class Sequences {
private Sequences() {}
@@ -22,7 +22,7 @@ private Sequences() {}
* @param n the nth number in the Fibonacci sequence to calculate
* @return the nth Fibonacci number
*/
- public static int fibonacci(int n) {
+ public static int fibonacci(final int n) {
// edge cases:
if (n < 0) {
throw new IllegalArgumentException("Index was negative. No such thing as a negative index in a series.");
@@ -57,7 +57,7 @@ public static int fibonacci(int n) {
* @param n the nth number in the Fibonacci sequence to calculate
* @return the nth Fibonacci number
*/
- public static double fibonacciSimpleBinetFormula(int n) {
+ public static double fibonacciSimpleBinetFormula(final int n) {
if (n == 0) {
return 0;
}
@@ -73,7 +73,7 @@ public static double fibonacciSimpleBinetFormula(int n) {
* @param n the nth number in the Fibonacci sequence to calculate
* @return the nth Fibonacci number
*/
- public static BigInteger fibonacciBinetFormula(int n) {
+ public static BigInteger fibonacciBinetFormula(final int n) {
if (n == 0) {
return new BigInteger("0");
}
@@ -85,10 +85,10 @@ public static BigInteger fibonacciBinetFormula(int n) {
}
final double phi = (1 + Math.sqrt(5)) / 2;
- BigDecimal sqrt5 = BigDecimal.valueOf(Math.sqrt(5));
+ final BigDecimal sqrt5 = BigDecimal.valueOf(Math.sqrt(5));
- BigDecimal pow = BigDecimal.valueOf(Math.pow(phi, n));
- BigDecimal powInvrt = BigDecimal.valueOf(Math.pow(-phi, -n));
+ final BigDecimal pow = BigDecimal.valueOf(Math.pow(phi, n));
+ final BigDecimal powInvrt = BigDecimal.valueOf(Math.pow(-phi, -n));
return pow.subtract(powInvrt).divide(sqrt5, RoundingMode.HALF_UP).toBigInteger();
}
}
diff --git a/src/main/java/io/github/diegourban/algorithms/math/Statistics.java b/src/main/java/io/github/diegourban/algorithms/math/Statistics.java
index 69a6019..5098b6c 100644
--- a/src/main/java/io/github/diegourban/algorithms/math/Statistics.java
+++ b/src/main/java/io/github/diegourban/algorithms/math/Statistics.java
@@ -2,7 +2,7 @@
import java.util.Arrays;
-public class Statistics {
+public final class Statistics {
private Statistics() {}
@@ -13,13 +13,13 @@ private Statistics() {}
* @param data
* @return
*/
- public static double mean(double[] data) {
+ public static double mean(final double[] data) {
if (data.length == 0) {
return 0.0;
}
double sum = 0.0;
- for (double value : data) {
+ for (final double value : data) {
sum += value;
}
@@ -32,7 +32,7 @@ public static double mean(double[] data) {
* @param data
* @return
*/
- public static double median(double[] data) {
+ public static double median(final double[] data) {
Arrays.sort(data);
final int middle = data.length / 2;
@@ -50,7 +50,7 @@ public static double median(double[] data) {
* @param data
* @return
*/
- public static double mode(double[] data) {
+ public static double mode(final double[] data) {
double maxValue = 0;
int maxCount = 0;
@@ -75,11 +75,11 @@ public static double mode(double[] data) {
* @param data
* @return the Average Absolute Deviation from data
*/
- public static double meanAbsoluteDeviation(double[] data) {
- double mean = mean(data);
+ public static double meanAbsoluteDeviation(final double[] data) {
+ final double mean = mean(data);
double sum = 0;
- for (double value : data) {
+ for (final double value : data) {
sum += Math.abs(value - mean);
}
diff --git a/src/main/java/io/github/diegourban/algorithms/math/TriangleType.java b/src/main/java/io/github/diegourban/algorithms/math/TriangleType.java
index 3094bdb..41c7d91 100644
--- a/src/main/java/io/github/diegourban/algorithms/math/TriangleType.java
+++ b/src/main/java/io/github/diegourban/algorithms/math/TriangleType.java
@@ -5,9 +5,9 @@ public enum TriangleType {
ESCALENE("Escaleno"),
ISOSCELES("Isoceles");
- private String name;
+ private final String name;
- private TriangleType(String name) {
+ private TriangleType(final String name) {
this.name = name;
}
diff --git a/src/main/java/io/github/diegourban/algorithms/search/BinarySearch.java b/src/main/java/io/github/diegourban/algorithms/search/BinarySearch.java
index 6e608a0..7f4abe2 100644
--- a/src/main/java/io/github/diegourban/algorithms/search/BinarySearch.java
+++ b/src/main/java/io/github/diegourban/algorithms/search/BinarySearch.java
@@ -3,7 +3,7 @@
/**
* Binary Search algorithm
*/
-public class BinarySearch {
+public final class BinarySearch {
private BinarySearch() {}
diff --git a/src/main/java/io/github/diegourban/algorithms/sorting/InsertionSort.java b/src/main/java/io/github/diegourban/algorithms/sorting/InsertionSort.java
index 8260efd..3fa938c 100644
--- a/src/main/java/io/github/diegourban/algorithms/sorting/InsertionSort.java
+++ b/src/main/java/io/github/diegourban/algorithms/sorting/InsertionSort.java
@@ -21,8 +21,8 @@ private void sort(final int[] items, final int totalElements) {
int analysis = current;
while (analysis > 0 && items[analysis] < items[analysis - 1]) {
- Integer analysisItem = items[analysis];
- Integer previousItem = items[analysis - 1];
+ final Integer analysisItem = items[analysis];
+ final Integer previousItem = items[analysis - 1];
items[analysis] = previousItem;
items[analysis - 1] = analysisItem;
analysis--;
diff --git a/src/main/java/io/github/diegourban/algorithms/sorting/SelectionSort.java b/src/main/java/io/github/diegourban/algorithms/sorting/SelectionSort.java
index 03d924b..2cdde3a 100644
--- a/src/main/java/io/github/diegourban/algorithms/sorting/SelectionSort.java
+++ b/src/main/java/io/github/diegourban/algorithms/sorting/SelectionSort.java
@@ -19,8 +19,8 @@ public void sort(final int[] items) {
private void sort(final int[] items, final int totalElements) {
for (int current = 0; current < totalElements - 1; current++) {
final int smallerIndex = findSmallerIndex(items, current, totalElements);
- Integer currentItem = items[current];
- Integer smallerItem = items[smallerIndex];
+ final Integer currentItem = items[current];
+ final Integer smallerItem = items[smallerIndex];
items[current] = smallerItem;
items[smallerIndex] = currentItem;
}
diff --git a/src/main/java/io/github/diegourban/algorithms/string/StringUtils.java b/src/main/java/io/github/diegourban/algorithms/string/StringUtils.java
index b563570..b7c92ea 100644
--- a/src/main/java/io/github/diegourban/algorithms/string/StringUtils.java
+++ b/src/main/java/io/github/diegourban/algorithms/string/StringUtils.java
@@ -2,11 +2,11 @@
import java.util.*;
-public class StringUtils {
+public final class StringUtils {
private StringUtils() {}
- public static boolean isPalindrome(String theString) {
+ public static boolean isPalindrome(final String theString) {
if (theString == null || theString.isEmpty()) {
return false;
}
@@ -16,8 +16,8 @@ public static boolean isPalindrome(String theString) {
}
for (int i = 0; i < theString.length() / 2; i++) {
- char c1 = theString.charAt(i);
- char c2 = theString.charAt(theString.length() - i - 1);
+ final char c1 = theString.charAt(i);
+ final char c2 = theString.charAt(theString.length() - i - 1);
if (c1 != c2) {
return false;
}
@@ -25,18 +25,18 @@ public static boolean isPalindrome(String theString) {
return true;
}
- public static boolean isAnagram(String a, String b) {
+ public static boolean isAnagram(final String a, final String b) {
if (a.length() != b.length()) {
return false;
}
- char[] arrA = sort(a);
- char[] arrB = sort(b);
+ final char[] arrA = sort(a);
+ final char[] arrB = sort(b);
return Arrays.equals(arrA, arrB);
}
- private static char[] sort(String original) {
- char[] chars = original.toLowerCase().toCharArray();
+ private static char[] sort(final String original) {
+ final char[] chars = original.toLowerCase().toCharArray();
Arrays.sort(chars); // Dual-Pivot Quicksort, O(n log(n))
return chars;
}
diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtilsTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtilsTest.java
index 91a3e0a..45d4b1f 100644
--- a/src/test/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtilsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtilsTest.java
@@ -9,21 +9,21 @@ class ArrayUtilsTest {
@Test
void shouldNotShuffleSmallArray() {
- int[] array = new int[] {1};
+ final int[] array = new int[] {1};
ArrayUtils.shuffle(array);
assertThat(array).hasSize(1);
- Integer[] what = Arrays.stream(array).boxed().toArray(Integer[]::new);
+ final Integer[] what = Arrays.stream(array).boxed().toArray(Integer[]::new);
assertThat(what).containsExactlyInAnyOrder(1);
}
@Test
void shouldShuffle() {
- int[] array = new int[] {1, 2, 3, 4, 5};
+ final int[] array = new int[] {1, 2, 3, 4, 5};
ArrayUtils.shuffle(array);
assertThat(array).hasSize(5);
- Integer[] what = Arrays.stream(array).boxed().toArray(Integer[]::new);
+ final Integer[] what = Arrays.stream(array).boxed().toArray(Integer[]::new);
assertThat(what).containsExactlyInAnyOrder(1, 2, 3, 4, 5);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListTest.java
index 28ed1ae..e2a6192 100644
--- a/src/test/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListTest.java
@@ -11,7 +11,7 @@ class LinkedListTest {
@Test
void shouldAddAtStart() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtStart(new Element("diego"));
linkedList.addAtStart(new Element("paulo"));
linkedList.addAtStart(new Element("josé"));
@@ -23,7 +23,7 @@ void shouldAddAtStart() {
@Test
void shouldAddAtEnd() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.addAtEnd(new Element("josé"));
@@ -35,7 +35,7 @@ void shouldAddAtEnd() {
@Test
void shouldAddAtTheMiddle() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.add(1, new Element("josé"));
@@ -47,7 +47,7 @@ void shouldAddAtTheMiddle() {
@Test
void shouldShowSize() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.add(1, new Element("josé"));
@@ -57,7 +57,7 @@ void shouldShowSize() {
@Test
void shouldRemoveFromStart() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.addAtEnd(new Element("josé"));
@@ -70,7 +70,7 @@ void shouldRemoveFromStart() {
@Test
void shouldRemoveFromEnd() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.addAtEnd(new Element("josé"));
@@ -83,7 +83,7 @@ void shouldRemoveFromEnd() {
@Test
void shouldRemoveFromMiddle() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.addAtEnd(new Element("josé"));
@@ -96,7 +96,7 @@ void shouldRemoveFromMiddle() {
@Test
void shouldContainElement() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.addAtEnd(new Element("josé"));
@@ -106,7 +106,7 @@ void shouldContainElement() {
@Test
void shouldNotContainElement() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.addAtEnd(new Element("josé"));
@@ -116,7 +116,7 @@ void shouldNotContainElement() {
@Test
void shouldPrint() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.addAtEnd(new Element("josé"));
@@ -126,7 +126,7 @@ void shouldPrint() {
@Test
void shouldAddAtPositionOfEmptyList() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.add(0, new Element("diego"));
assertThat(linkedList.size()).isEqualTo(1);
@@ -135,7 +135,7 @@ void shouldAddAtPositionOfEmptyList() {
@Test
void shouldAddAtPositionEqualToSizeAsLast() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.add(1, new Element("paulo"));
@@ -144,7 +144,7 @@ void shouldAddAtPositionEqualToSizeAsLast() {
@Test
void shouldRejectGettingAMissingPosition() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
assertThatIllegalArgumentException().isThrownBy(() -> linkedList.get(1));
@@ -158,7 +158,7 @@ void shouldRejectRemovingFromStartOfEmptyList() {
@Test
void shouldBecomeEmptyAfterRemovingTheOnlyElementFromStart() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.removeFromStart();
@@ -168,7 +168,7 @@ void shouldBecomeEmptyAfterRemovingTheOnlyElementFromStart() {
@Test
void shouldBecomeEmptyAfterRemovingTheOnlyElementFromEnd() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.removeFromEnd();
@@ -178,7 +178,7 @@ void shouldBecomeEmptyAfterRemovingTheOnlyElementFromEnd() {
@Test
void shouldRemoveFirstAndLastByPosition() {
- LinkedList linkedList = new LinkedList();
+ final LinkedList linkedList = new LinkedList();
linkedList.addAtEnd(new Element("diego"));
linkedList.addAtEnd(new Element("paulo"));
linkedList.addAtEnd(new Element("josé"));
diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/queue/QueueTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/queue/QueueTest.java
index 3901b3b..7c38d37 100644
--- a/src/test/java/io/github/diegourban/algorithms/datastructure/queue/QueueTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/datastructure/queue/QueueTest.java
@@ -23,7 +23,7 @@ void shouldPoll() {
queue.add(new Element("diego"));
queue.add(new Element("leonardo"));
queue.add(new Element("urban"));
- Element removed = queue.poll();
+ final Element removed = queue.poll();
assertThat(removed.getName()).isEqualTo("diego");
assertThat(queue).hasToString("[leonardo, urban]");
diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/set/SetTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/set/SetTest.java
index f532aae..001dc4d 100644
--- a/src/test/java/io/github/diegourban/algorithms/datastructure/set/SetTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/datastructure/set/SetTest.java
@@ -8,7 +8,7 @@ class SetTest {
@Test
void shouldAdd() {
- Set set = new Set();
+ final Set set = new Set();
set.add("Diego");
set.add("André");
set.add("Zuleika");
@@ -19,7 +19,7 @@ void shouldAdd() {
@Test
void shouldRemove() {
- Set set = new Set();
+ final Set set = new Set();
set.add("Diego");
set.add("André");
set.add("Zuleika");
@@ -34,7 +34,7 @@ void shouldRemove() {
@Test
void shouldIgnoreDuplicates() {
- Set set = new Set();
+ final Set set = new Set();
set.add("Diego");
set.add("Diego");
@@ -45,7 +45,7 @@ void shouldIgnoreDuplicates() {
@Test
void shouldIgnoreRemovingAMissingWord() {
- Set set = new Set();
+ final Set set = new Set();
set.add("Diego");
set.remove("Daniel");
diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/stack/StackTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/stack/StackTest.java
index 50f739f..ef34605 100644
--- a/src/test/java/io/github/diegourban/algorithms/datastructure/stack/StackTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/datastructure/stack/StackTest.java
@@ -9,7 +9,7 @@ class StackTest {
@Test
void shouldPush() {
- Stack stack = new Stack();
+ final Stack stack = new Stack();
stack.push(new Element("diego"));
stack.push(new Element("leonardo"));
stack.push(new Element("urban"));
@@ -19,11 +19,11 @@ void shouldPush() {
@Test
void shouldRemove() {
- Stack stack = new Stack();
+ final Stack stack = new Stack();
stack.push(new Element("diego"));
stack.push(new Element("leonardo"));
stack.push(new Element("urban"));
- Element pop = stack.pop();
+ final Element pop = stack.pop();
assertThat(pop.getName()).isEqualTo("urban");
assertThat(stack).hasToString("[diego, leonardo]");
@@ -31,7 +31,7 @@ void shouldRemove() {
@Test
void shouldHandleIsEmpty() {
- Stack stack = new Stack();
+ final Stack stack = new Stack();
assertThat(stack.empty()).isTrue();
stack.push(new Element("diego"));
stack.push(new Element("leonardo"));
diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/vector/VectorTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/vector/VectorTest.java
index 6332813..e5a21e4 100644
--- a/src/test/java/io/github/diegourban/algorithms/datastructure/vector/VectorTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/datastructure/vector/VectorTest.java
@@ -10,17 +10,17 @@ class VectorTest {
@Test
void test() {
- Element e1 = new Element("Joao");
- Element e2 = new Element("Jose");
+ final Element e1 = new Element("Joao");
+ final Element e2 = new Element("Jose");
- Vector vector = new Vector();
+ final Vector vector = new Vector();
vector.add(e1);
vector.add(e2);
assertThat(vector.size()).isEqualTo(2);
assertThat(vector.contains(e1)).isEqualTo(true);
- Element e3 = new Element("Mario");
+ final Element e3 = new Element("Mario");
vector.add(1, e3);
assertThat(vector.contains(e3)).isEqualTo(true);
assertThat(vector.size()).isEqualTo(3);
@@ -28,7 +28,7 @@ void test() {
vector.remove(1);
for (int i = 0; i < 300; i++) {
- Element e = new Element("Element " + i);
+ final Element e = new Element("Element " + i);
vector.add(e);
}
System.out.println(vector);
@@ -36,7 +36,7 @@ void test() {
@Test
void shouldRejectAddingAtAnInvalidPosition() {
- Vector vector = new Vector();
+ final Vector vector = new Vector();
vector.add(new Element("Joao"));
assertThatIllegalArgumentException().isThrownBy(() -> vector.add(-1, new Element("Jose")));
@@ -45,7 +45,7 @@ void shouldRejectAddingAtAnInvalidPosition() {
@Test
void shouldRejectGettingAnInvalidPosition() {
- Vector vector = new Vector();
+ final Vector vector = new Vector();
vector.add(new Element("Joao"));
assertThat(vector.get(0)).isEqualTo(new Element("Joao"));
@@ -55,7 +55,7 @@ void shouldRejectGettingAnInvalidPosition() {
@Test
void shouldNotContainAMissingElement() {
- Vector vector = new Vector();
+ final Vector vector = new Vector();
vector.add(new Element("Joao"));
assertThat(vector.contains(new Element("Mario"))).isFalse();
@@ -63,7 +63,7 @@ void shouldNotContainAMissingElement() {
@Test
void shouldRemoveFromAFullVector() {
- Vector vector = new Vector();
+ final Vector vector = new Vector();
for (int i = 0; i < 100; i++) {
vector.add(new Element("Element " + i));
}
diff --git a/src/test/java/io/github/diegourban/algorithms/io/ReaderTest.java b/src/test/java/io/github/diegourban/algorithms/io/ReaderTest.java
index 5ae48b4..380ff49 100644
--- a/src/test/java/io/github/diegourban/algorithms/io/ReaderTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/io/ReaderTest.java
@@ -18,10 +18,10 @@ void shouldCreateInstance() {
@Test
void shouldHandleEmptyInput() throws Exception {
- InputStream input = new SampleBuilder().buildAsInputStream();
+ final InputStream input = new SampleBuilder().buildAsInputStream();
- Reader reader = new Reader(input);
- String empty = reader.readLine();
+ final Reader reader = new Reader(input);
+ final String empty = reader.readLine();
reader.close();
assertThat(empty).isEmpty();
@@ -29,8 +29,8 @@ void shouldHandleEmptyInput() throws Exception {
@Test
void shouldHandleEOF() throws Exception {
- InputStream input = new SampleBuilder().append(1).buildAsInputStream();
- Reader reader = new Reader(input);
+ final InputStream input = new SampleBuilder().append(1).buildAsInputStream();
+ final Reader reader = new Reader(input);
reader.nextInt();
assertThatExceptionOfType(EOFException.class).isThrownBy(reader::nextInt);
@@ -38,18 +38,18 @@ void shouldHandleEOF() throws Exception {
@Test
void shouldReadUntilEOF() throws Exception {
- String[] inputs = {"first line", "second line", "last line"};
- InputStream input = new SampleBuilder()
+ final String[] inputs = {"first line", "second line", "last line"};
+ final InputStream input = new SampleBuilder()
.appendln(inputs[0])
.appendln(inputs[1])
.append(inputs[2])
.buildAsInputStream();
- Reader reader = new Reader(input);
+ final Reader reader = new Reader(input);
int i = 0;
while (true) {
try {
- String line = reader.readLine();
+ final String line = reader.readLine();
assertThat(line).isEqualTo(inputs[i]);
i++;
} catch (EOFException ex) {
@@ -61,9 +61,9 @@ void shouldReadUntilEOF() throws Exception {
@Test
void shouldHandleCloseAlreadyClosedReader() throws Exception {
- InputStream input = new SampleBuilder().buildAsInputStream();
+ final InputStream input = new SampleBuilder().buildAsInputStream();
- Reader reader = new Reader(input);
+ final Reader reader = new Reader(input);
assertThat(reader.isClosed()).isFalse();
reader.close();
assertThat(reader.isClosed()).isTrue();
@@ -73,10 +73,10 @@ void shouldHandleCloseAlreadyClosedReader() throws Exception {
@Test
void shouldReadOneLine() throws Exception {
- InputStream input = new SampleBuilder().appendln("this is a line").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("this is a line").buildAsInputStream();
- Reader reader = new Reader(input);
- String line = reader.readLine();
+ final Reader reader = new Reader(input);
+ final String line = reader.readLine();
reader.close();
assertThat(line).isEqualTo("this is a line");
@@ -84,14 +84,14 @@ void shouldReadOneLine() throws Exception {
@Test
void shouldReadTwoLines() throws Exception {
- InputStream input = new SampleBuilder()
+ final InputStream input = new SampleBuilder()
.appendln("this is a line")
.appendln("this is another line")
.buildAsInputStream();
- Reader reader = new Reader(input);
- String firstLine = reader.readLine();
- String secondLine = reader.readLine();
+ final Reader reader = new Reader(input);
+ final String firstLine = reader.readLine();
+ final String secondLine = reader.readLine();
reader.close();
assertThat(firstLine).isEqualTo("this is a line");
@@ -100,11 +100,11 @@ void shouldReadTwoLines() throws Exception {
@Test
void shouldJumpEmptyLines() throws Exception {
- InputStream input =
+ final InputStream input =
new SampleBuilder().appendln("").appendln("this is a line").buildAsInputStream();
- Reader reader = new Reader(input);
- String line = reader.readLine();
+ final Reader reader = new Reader(input);
+ final String line = reader.readLine();
reader.close();
assertThat(line).isEqualTo("this is a line");
@@ -112,10 +112,10 @@ void shouldJumpEmptyLines() throws Exception {
@Test
void shouldReadPositiveIntegerUnit() throws Exception {
- InputStream input = new SampleBuilder().appendln("5").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("5").buildAsInputStream();
- Reader reader = new Reader(input);
- int nextInt = reader.nextInt();
+ final Reader reader = new Reader(input);
+ final int nextInt = reader.nextInt();
reader.close();
assertThat(nextInt).isEqualTo(5);
@@ -123,10 +123,10 @@ void shouldReadPositiveIntegerUnit() throws Exception {
@Test
void shouldReadIntegerAfterSpace() throws Exception {
- InputStream input = new SampleBuilder().appendln(" 2").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln(" 2").buildAsInputStream();
- Reader reader = new Reader(input);
- int nextInt = reader.nextInt();
+ final Reader reader = new Reader(input);
+ final int nextInt = reader.nextInt();
reader.close();
assertThat(nextInt).isEqualTo(2);
@@ -134,10 +134,10 @@ void shouldReadIntegerAfterSpace() throws Exception {
@Test
void shouldReadNegativeIntegerUnit() throws Exception {
- InputStream input = new SampleBuilder().appendln("-4").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("-4").buildAsInputStream();
- Reader reader = new Reader(input);
- int nextInt = reader.nextInt();
+ final Reader reader = new Reader(input);
+ final int nextInt = reader.nextInt();
reader.close();
assertThat(nextInt).isEqualTo(-4);
@@ -145,10 +145,10 @@ void shouldReadNegativeIntegerUnit() throws Exception {
@Test
void shouldReadPositiveIntegerDozen() throws Exception {
- InputStream input = new SampleBuilder().appendln("16").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("16").buildAsInputStream();
- Reader reader = new Reader(input);
- int nextInt = reader.nextInt();
+ final Reader reader = new Reader(input);
+ final int nextInt = reader.nextInt();
reader.close();
assertThat(nextInt).isEqualTo(16);
@@ -156,10 +156,10 @@ void shouldReadPositiveIntegerDozen() throws Exception {
@Test
void shouldReadNegativeIntegerDozen() throws Exception {
- InputStream input = new SampleBuilder().appendln("-20").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("-20").buildAsInputStream();
- Reader reader = new Reader(input);
- int nextInt = reader.nextInt();
+ final Reader reader = new Reader(input);
+ final int nextInt = reader.nextInt();
reader.close();
assertThat(nextInt).isEqualTo(-20);
@@ -167,10 +167,10 @@ void shouldReadNegativeIntegerDozen() throws Exception {
@Test
void shouldReadPositiveIntegerHundred() throws Exception {
- InputStream input = new SampleBuilder().appendln("123").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("123").buildAsInputStream();
- Reader reader = new Reader(input);
- int nextInt = reader.nextInt();
+ final Reader reader = new Reader(input);
+ final int nextInt = reader.nextInt();
reader.close();
assertThat(nextInt).isEqualTo(123);
@@ -178,10 +178,10 @@ void shouldReadPositiveIntegerHundred() throws Exception {
@Test
void shouldReadNegativeIntegerHundred() throws Exception {
- InputStream input = new SampleBuilder().appendln("-321").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("-321").buildAsInputStream();
- Reader reader = new Reader(input);
- int nextInt = reader.nextInt();
+ final Reader reader = new Reader(input);
+ final int nextInt = reader.nextInt();
reader.close();
assertThat(nextInt).isEqualTo(-321);
@@ -189,15 +189,16 @@ void shouldReadNegativeIntegerHundred() throws Exception {
@Test
void shouldReadChainOfPositiveAndNegativeIntegers() throws Exception {
- InputStream input = new SampleBuilder().appendln("-123 987 -88 74 -9 7").buildAsInputStream();
+ final InputStream input =
+ new SampleBuilder().appendln("-123 987 -88 74 -9 7").buildAsInputStream();
- Reader reader = new Reader(input);
- int first = reader.nextInt();
- int second = reader.nextInt();
- int third = reader.nextInt();
- int fourth = reader.nextInt();
- int fifth = reader.nextInt();
- int sixth = reader.nextInt();
+ final Reader reader = new Reader(input);
+ final int first = reader.nextInt();
+ final int second = reader.nextInt();
+ final int third = reader.nextInt();
+ final int fourth = reader.nextInt();
+ final int fifth = reader.nextInt();
+ final int sixth = reader.nextInt();
reader.close();
assertThat(first).isEqualTo(-123);
@@ -210,10 +211,10 @@ void shouldReadChainOfPositiveAndNegativeIntegers() throws Exception {
@Test
void shouldReadPositiveDoubleUnit() throws Exception {
- InputStream input = new SampleBuilder().appendln("1.1").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("1.1").buildAsInputStream();
- Reader reader = new Reader(input);
- double nextDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double nextDouble = reader.nextDouble();
reader.close();
assertThat(nextDouble).isCloseTo(1.1, within(0.1));
@@ -221,10 +222,10 @@ void shouldReadPositiveDoubleUnit() throws Exception {
@Test
void shouldReadDoubleAfterSpace() throws Exception {
- InputStream input = new SampleBuilder().appendln(" 5.6").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln(" 5.6").buildAsInputStream();
- Reader reader = new Reader(input);
- double d = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double d = reader.nextDouble();
reader.close();
assertThat(d).isCloseTo(5.6, within(0.1));
@@ -232,10 +233,10 @@ void shouldReadDoubleAfterSpace() throws Exception {
@Test
void shouldReadNegativeDoubleUnit() throws Exception {
- InputStream input = new SampleBuilder().appendln("-2.3").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("-2.3").buildAsInputStream();
- Reader reader = new Reader(input);
- double nextDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double nextDouble = reader.nextDouble();
reader.close();
assertThat(nextDouble).isCloseTo(-2.3, within(0.1));
@@ -243,10 +244,10 @@ void shouldReadNegativeDoubleUnit() throws Exception {
@Test
void shouldReadPositiveDoubleDozen() throws Exception {
- InputStream input = new SampleBuilder().appendln("12.7").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("12.7").buildAsInputStream();
- Reader reader = new Reader(input);
- double nextDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double nextDouble = reader.nextDouble();
reader.close();
assertThat(nextDouble).isCloseTo(12.7, within(0.1));
@@ -254,10 +255,10 @@ void shouldReadPositiveDoubleDozen() throws Exception {
@Test
void shouldReadNegativeDoubleDozen() throws Exception {
- InputStream input = new SampleBuilder().appendln("-99.9").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("-99.9").buildAsInputStream();
- Reader reader = new Reader(input);
- double nextDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double nextDouble = reader.nextDouble();
reader.close();
assertThat(nextDouble).isCloseTo(-99.9, within(0.1));
@@ -265,10 +266,10 @@ void shouldReadNegativeDoubleDozen() throws Exception {
@Test
void shouldReadPositiveDoubleHundred() throws Exception {
- InputStream input = new SampleBuilder().appendln("612.9").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("612.9").buildAsInputStream();
- Reader reader = new Reader(input);
- double nextDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double nextDouble = reader.nextDouble();
reader.close();
assertThat(nextDouble).isCloseTo(612.9, within(0.1));
@@ -276,10 +277,10 @@ void shouldReadPositiveDoubleHundred() throws Exception {
@Test
void shouldReadNegativeDoubleHundred() throws Exception {
- InputStream input = new SampleBuilder().appendln("-193.6").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("-193.6").buildAsInputStream();
- Reader reader = new Reader(input);
- double nextDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double nextDouble = reader.nextDouble();
reader.close();
assertThat(nextDouble).isCloseTo(-193.6, within(0.1));
@@ -287,10 +288,10 @@ void shouldReadNegativeDoubleHundred() throws Exception {
@Test
void shouldDoubleWithTwoDecimalPlaces() throws Exception {
- InputStream input = new SampleBuilder().appendln("5.68").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("5.68").buildAsInputStream();
- Reader reader = new Reader(input);
- double nextDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double nextDouble = reader.nextDouble();
reader.close();
assertThat(nextDouble).isCloseTo(5.68, within(0.1));
@@ -298,10 +299,10 @@ void shouldDoubleWithTwoDecimalPlaces() throws Exception {
@Test
void shouldDoubleWithThreeDecimalPlaces() throws Exception {
- InputStream input = new SampleBuilder().appendln("45.771").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("45.771").buildAsInputStream();
- Reader reader = new Reader(input);
- double nextDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double nextDouble = reader.nextDouble();
reader.close();
assertThat(nextDouble).isCloseTo(45.771, within(0.1));
@@ -309,10 +310,10 @@ void shouldDoubleWithThreeDecimalPlaces() throws Exception {
@Test
void shouldDoubleWithNineDecimalPlaces() throws Exception {
- InputStream input = new SampleBuilder().appendln("0.123456789").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("0.123456789").buildAsInputStream();
- Reader reader = new Reader(input);
- double nextDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double nextDouble = reader.nextDouble();
reader.close();
assertThat(nextDouble).isCloseTo(0.123456789, within(0.1));
@@ -320,16 +321,16 @@ void shouldDoubleWithNineDecimalPlaces() throws Exception {
@Test
void shouldReadChainOfPositiveAndNegativeDoubles() throws Exception {
- InputStream input =
+ final InputStream input =
new SampleBuilder().appendln("-1.23 98.7 -8.8 7.4 -9 7").buildAsInputStream();
- Reader reader = new Reader(input);
- double first = reader.nextDouble();
- double second = reader.nextDouble();
- double third = reader.nextDouble();
- double fourth = reader.nextDouble();
- double fifth = reader.nextDouble();
- double sixth = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double first = reader.nextDouble();
+ final double second = reader.nextDouble();
+ final double third = reader.nextDouble();
+ final double fourth = reader.nextDouble();
+ final double fifth = reader.nextDouble();
+ final double sixth = reader.nextDouble();
reader.close();
assertThat(first).isCloseTo(-1.23, within(0.1));
@@ -342,10 +343,10 @@ void shouldReadChainOfPositiveAndNegativeDoubles() throws Exception {
@Test
void shouldReadPositiveLong() throws Exception {
- InputStream input = new SampleBuilder().appendln("8172368367890").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("8172368367890").buildAsInputStream();
- Reader reader = new Reader(input);
- long nextLong = reader.nextLong();
+ final Reader reader = new Reader(input);
+ final long nextLong = reader.nextLong();
reader.close();
assertThat(nextLong).isEqualTo(8172368367890L);
@@ -353,10 +354,10 @@ void shouldReadPositiveLong() throws Exception {
@Test
void shouldReadNegativeLong() throws Exception {
- InputStream input = new SampleBuilder().appendln("-123578918902").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("-123578918902").buildAsInputStream();
- Reader reader = new Reader(input);
- long nextLong = reader.nextLong();
+ final Reader reader = new Reader(input);
+ final long nextLong = reader.nextLong();
reader.close();
assertThat(nextLong).isEqualTo(-123578918902L);
@@ -364,17 +365,17 @@ void shouldReadNegativeLong() throws Exception {
@Test
void shouldReadChainOfPositiveAndNegativeLongs() throws Exception {
- InputStream input = new SampleBuilder()
+ final InputStream input = new SampleBuilder()
.appendln("8172368367890 -1789236812893 891723689713 -31723581237 59787712587 -123123123123")
.buildAsInputStream();
- Reader reader = new Reader(input);
- long first = reader.nextLong();
- long second = reader.nextLong();
- long third = reader.nextLong();
- long fourth = reader.nextLong();
- long fifth = reader.nextLong();
- long sixth = reader.nextLong();
+ final Reader reader = new Reader(input);
+ final long first = reader.nextLong();
+ final long second = reader.nextLong();
+ final long third = reader.nextLong();
+ final long fourth = reader.nextLong();
+ final long fifth = reader.nextLong();
+ final long sixth = reader.nextLong();
reader.close();
assertThat(first).isEqualTo(8172368367890L);
@@ -387,15 +388,15 @@ void shouldReadChainOfPositiveAndNegativeLongs() throws Exception {
@Test
void shouldReadLongsWithSpacesAndLineBreaks() throws Exception {
- InputStream input = new SampleBuilder()
+ final InputStream input = new SampleBuilder()
.appendln("6546546565 -4326757896")
.appendln("786676767")
.buildAsInputStream();
- Reader reader = new Reader(input);
- long first = reader.nextLong();
- long second = reader.nextLong();
- long third = reader.nextLong();
+ final Reader reader = new Reader(input);
+ final long first = reader.nextLong();
+ final long second = reader.nextLong();
+ final long third = reader.nextLong();
reader.close();
assertThat(first).isEqualTo(6546546565L);
@@ -405,10 +406,10 @@ void shouldReadLongsWithSpacesAndLineBreaks() throws Exception {
@Test
void shouldReadChar() throws Exception {
- InputStream input = new SampleBuilder().appendln("a").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("a").buildAsInputStream();
- Reader reader = new Reader(input);
- char nextChar = reader.nextChar();
+ final Reader reader = new Reader(input);
+ final char nextChar = reader.nextChar();
reader.close();
assertThat(nextChar).isEqualTo('a');
@@ -416,12 +417,12 @@ void shouldReadChar() throws Exception {
@Test
void shouldReadMultipleChars() throws Exception {
- InputStream input = new SampleBuilder().appendln("a 1 /").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("a 1 /").buildAsInputStream();
- Reader reader = new Reader(input);
- char a = reader.nextChar();
- char one = reader.nextChar();
- char slash = reader.nextChar();
+ final Reader reader = new Reader(input);
+ final char a = reader.nextChar();
+ final char one = reader.nextChar();
+ final char slash = reader.nextChar();
reader.close();
assertThat(a).isEqualTo('a');
@@ -431,14 +432,14 @@ void shouldReadMultipleChars() throws Exception {
@Test
void shouldReadIntegersWithOtherCharactersInBetween() throws Exception {
- InputStream input = new SampleBuilder().appendln("12a34Z56&78/9").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("12a34Z56&78/9").buildAsInputStream();
- Reader reader = new Reader(input);
- int firstInt = reader.nextInt();
- int secondInt = reader.nextInt();
- int thirdInt = reader.nextInt();
- int fourthInt = reader.nextInt();
- int fifthInt = reader.nextInt();
+ final Reader reader = new Reader(input);
+ final int firstInt = reader.nextInt();
+ final int secondInt = reader.nextInt();
+ final int thirdInt = reader.nextInt();
+ final int fourthInt = reader.nextInt();
+ final int fifthInt = reader.nextInt();
reader.close();
assertThat(firstInt).isEqualTo(12);
@@ -450,14 +451,14 @@ void shouldReadIntegersWithOtherCharactersInBetween() throws Exception {
@Test
void shouldReadLongsWithOtherCharactersInBetween() throws Exception {
- InputStream input = new SampleBuilder().appendln("12a34Z56&78/9").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("12a34Z56&78/9").buildAsInputStream();
- Reader reader = new Reader(input);
- long firstLong = reader.nextLong();
- long secondLong = reader.nextLong();
- long thirdLong = reader.nextLong();
- long fourthLong = reader.nextLong();
- long fifthLong = reader.nextLong();
+ final Reader reader = new Reader(input);
+ final long firstLong = reader.nextLong();
+ final long secondLong = reader.nextLong();
+ final long thirdLong = reader.nextLong();
+ final long fourthLong = reader.nextLong();
+ final long fifthLong = reader.nextLong();
reader.close();
assertThat(firstLong).isEqualTo(12);
@@ -469,14 +470,15 @@ void shouldReadLongsWithOtherCharactersInBetween() throws Exception {
@Test
void shouldReadDoublesWithOtherCharactersInBetween() throws Exception {
- InputStream input = new SampleBuilder().appendln("12a3.4Z56&7.88/9").buildAsInputStream();
+ final InputStream input =
+ new SampleBuilder().appendln("12a3.4Z56&7.88/9").buildAsInputStream();
- Reader reader = new Reader(input);
- double firstDouble = reader.nextDouble();
- double secondDouble = reader.nextDouble();
- double thirdDouble = reader.nextDouble();
- double fourthDouble = reader.nextDouble();
- double fifthDouble = reader.nextDouble();
+ final Reader reader = new Reader(input);
+ final double firstDouble = reader.nextDouble();
+ final double secondDouble = reader.nextDouble();
+ final double thirdDouble = reader.nextDouble();
+ final double fourthDouble = reader.nextDouble();
+ final double fifthDouble = reader.nextDouble();
reader.close();
assertThat(firstDouble).isCloseTo(12, within(0.1));
@@ -488,11 +490,11 @@ void shouldReadDoublesWithOtherCharactersInBetween() throws Exception {
@Test
void shouldSkipNChars() throws Exception {
- InputStream input = new SampleBuilder().appendln("Dia 5").buildAsInputStream();
+ final InputStream input = new SampleBuilder().appendln("Dia 5").buildAsInputStream();
- Reader reader = new Reader(input);
+ final Reader reader = new Reader(input);
reader.skip(4);
- int day = reader.nextInt();
+ final int day = reader.nextInt();
reader.close();
assertThat(day).isEqualTo(5);
diff --git a/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryPropertyTest.java
index c2bdc4b..0e65f2d 100644
--- a/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryPropertyTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryPropertyTest.java
@@ -13,13 +13,13 @@
class NumberTheoryPropertyTest {
@Property
- void bothGcdStrategiesAgree(@ForAll @LongRange(min = 0) long a, @ForAll @LongRange(min = 0) long b) {
+ void bothGcdStrategiesAgree(@ForAll @LongRange(min = 0) final long a, @ForAll @LongRange(min = 0) final long b) {
assertThat(NumberTheory.gcdLoop(a, b)).isEqualTo(NumberTheory.gcdRecursive(a, b));
}
@Property
- void gcdDividesBothNumbers(@ForAll @LongRange(min = 1) long a, @ForAll @LongRange(min = 1) long b) {
- var gcd = NumberTheory.gcdLoop(a, b);
+ void gcdDividesBothNumbers(@ForAll @LongRange(min = 1) final long a, @ForAll @LongRange(min = 1) final long b) {
+ final var gcd = NumberTheory.gcdLoop(a, b);
assertThat(a % gcd).isZero();
assertThat(b % gcd).isZero();
@@ -27,26 +27,28 @@ void gcdDividesBothNumbers(@ForAll @LongRange(min = 1) long a, @ForAll @LongRang
@Property
void lcmTimesGcdIsTheProduct(
- @ForAll @LongRange(min = 1, max = 1_000_000) long a, @ForAll @LongRange(min = 1, max = 1_000_000) long b) {
+ @ForAll @LongRange(min = 1, max = 1_000_000) final long a,
+ @ForAll @LongRange(min = 1, max = 1_000_000) final long b) {
assertThat(NumberTheory.lcm(a, b) * NumberTheory.gcdLoop(a, b)).isEqualTo(a * b);
}
@Property
void lcmOfAListIsAMultipleOfEveryElement(
- @ForAll @Size(min = 1, max = 6) List<@LongRange(min = 1, max = 1_000) Long> numbers) {
- var lcm = NumberTheory.lcm(numbers.stream().mapToLong(Long::longValue).toArray());
+ @ForAll @Size(min = 1, max = 6) final List<@LongRange(min = 1, max = 1_000) Long> numbers) {
+ final var lcm =
+ NumberTheory.lcm(numbers.stream().mapToLong(Long::longValue).toArray());
assertThat(numbers).allSatisfy(n -> assertThat(lcm % n).isZero());
}
@Property
- void isPrimeAgreesWithTrialDivision(@ForAll @IntRange(min = -10, max = 200_000) int n) {
+ void isPrimeAgreesWithTrialDivision(@ForAll @IntRange(min = -10, max = 200_000) final int n) {
assertThat(NumberTheory.isPrime(n)).isEqualTo(isPrimeByTrialDivision(n));
}
@Property
- void primeFactorsMultiplyBackToTheNumber(@ForAll @IntRange(min = 2, max = 10_000_000) int n) {
- var factors = NumberTheory.primeFactorsList(n);
+ void primeFactorsMultiplyBackToTheNumber(@ForAll @IntRange(min = 2, max = 10_000_000) final int n) {
+ final var factors = NumberTheory.primeFactorsList(n);
assertThat(factors.stream().mapToLong(Integer::longValue).reduce(1, (x, y) -> x * y))
.isEqualTo(n);
@@ -56,11 +58,11 @@ void primeFactorsMultiplyBackToTheNumber(@ForAll @IntRange(min = 2, max = 10_000
}
@Property
- void primeFactorsSetHoldsTheDistinctFactors(@ForAll @IntRange(min = 2, max = 10_000_000) int n) {
+ void primeFactorsSetHoldsTheDistinctFactors(@ForAll @IntRange(min = 2, max = 10_000_000) final int n) {
assertThat(NumberTheory.primeFactorsSet(n)).isEqualTo(new HashSet<>(NumberTheory.primeFactorsList(n)));
}
- private static boolean isPrimeByTrialDivision(int n) {
+ private static boolean isPrimeByTrialDivision(final int n) {
if (n < 2) {
return false;
}
diff --git a/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryTest.java b/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryTest.java
index 028a536..6bb46af 100644
--- a/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryTest.java
@@ -124,7 +124,7 @@ void shouldHandleNotPrimeNumbers() {
@Test
void shouldListPrimeFactorsOfEvenNumber() {
- List primeFactors = NumberTheory.primeFactorsList(10);
+ final List primeFactors = NumberTheory.primeFactorsList(10);
assertThat(primeFactors).hasSize(2);
assertThat(primeFactors.get(0).intValue()).isEqualTo(2);
assertThat(primeFactors.get(1).intValue()).isEqualTo(5);
@@ -132,7 +132,7 @@ void shouldListPrimeFactorsOfEvenNumber() {
@Test
void shouldListPrimeFactorsOfOddNumber() {
- List primeFactors = NumberTheory.primeFactorsList(49);
+ final List primeFactors = NumberTheory.primeFactorsList(49);
assertThat(primeFactors).hasSize(2);
assertThat(primeFactors.get(0).intValue()).isEqualTo(7);
assertThat(primeFactors.get(1).intValue()).isEqualTo(7);
@@ -140,26 +140,26 @@ void shouldListPrimeFactorsOfOddNumber() {
@Test
void shouldListPrimeFactorsOfPrimeNumber() {
- List primeFactors = NumberTheory.primeFactorsList(13);
+ final List primeFactors = NumberTheory.primeFactorsList(13);
assertThat(primeFactors).hasSize(1);
assertThat(primeFactors.get(0).intValue()).isEqualTo(13);
}
@Test
void shouldCreateSetOfPrimeFactorsOfEvenNumber() {
- Set primeFactors = NumberTheory.primeFactorsSet(12);
+ final Set primeFactors = NumberTheory.primeFactorsSet(12);
assertThat(primeFactors).hasSize(2).contains(2).contains(3);
}
@Test
void shouldCreateSetOfPrimeFactorsOfOddNumber() {
- Set primeFactors = NumberTheory.primeFactorsSet(49);
+ final Set primeFactors = NumberTheory.primeFactorsSet(49);
assertThat(primeFactors).hasSize(1).contains(7);
}
@Test
void shouldCreateSetOfPrimeFactorsOfPrimeNumber() {
- Set primeFactors = NumberTheory.primeFactorsSet(7);
+ final Set primeFactors = NumberTheory.primeFactorsSet(7);
assertThat(primeFactors).hasSize(1).contains(7);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/math/SequencesPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/math/SequencesPropertyTest.java
index d7b2ff8..9cb25d3 100644
--- a/src/test/java/io/github/diegourban/algorithms/math/SequencesPropertyTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/math/SequencesPropertyTest.java
@@ -14,26 +14,26 @@
class SequencesPropertyTest {
@Property(generation = GenerationMode.EXHAUSTIVE)
- void fibonacciIsExactUpTo46(@ForAll @IntRange(min = 0, max = 46) int n) {
+ void fibonacciIsExactUpTo46(@ForAll @IntRange(min = 0, max = 46) final int n) {
assertThat(BigInteger.valueOf(Sequences.fibonacci(n))).isEqualTo(exactFibonacci(n));
}
@Property(generation = GenerationMode.EXHAUSTIVE)
- void simpleBinetFormulaRoundsToTheExactValueUpTo67(@ForAll @IntRange(min = 0, max = 67) int n) {
+ void simpleBinetFormulaRoundsToTheExactValueUpTo67(@ForAll @IntRange(min = 0, max = 67) final int n) {
assertThat(BigInteger.valueOf(Math.round(Sequences.fibonacciSimpleBinetFormula(n))))
.isEqualTo(exactFibonacci(n));
}
@Property(generation = GenerationMode.EXHAUSTIVE)
- void binetFormulaIsExactUpTo71(@ForAll @IntRange(min = 0, max = 71) int n) {
+ void binetFormulaIsExactUpTo71(@ForAll @IntRange(min = 0, max = 71) final int n) {
assertThat(Sequences.fibonacciBinetFormula(n)).isEqualTo(exactFibonacci(n));
}
- private static BigInteger exactFibonacci(int n) {
+ private static BigInteger exactFibonacci(final int n) {
var previous = BigInteger.ZERO;
var current = BigInteger.ONE;
for (var i = 0; i < n; i++) {
- var next = previous.add(current);
+ final var next = previous.add(current);
previous = current;
current = next;
}
diff --git a/src/test/java/io/github/diegourban/algorithms/math/StatisticsPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/math/StatisticsPropertyTest.java
index de59fb2..3cbc692 100644
--- a/src/test/java/io/github/diegourban/algorithms/math/StatisticsPropertyTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/math/StatisticsPropertyTest.java
@@ -14,30 +14,31 @@ class StatisticsPropertyTest {
@Property
void meanLiesBetweenMinAndMax(
- @ForAll @Size(min = 1, max = 50) List<@DoubleRange(min = -1e6, max = 1e6) Double> values) {
- var data = values.stream().mapToDouble(Double::doubleValue).toArray();
- var min = Arrays.stream(data).min().orElseThrow();
- var max = Arrays.stream(data).max().orElseThrow();
+ @ForAll @Size(min = 1, max = 50) final List<@DoubleRange(min = -1e6, max = 1e6) Double> values) {
+ final var data = values.stream().mapToDouble(Double::doubleValue).toArray();
+ final var min = Arrays.stream(data).min().orElseThrow();
+ final var max = Arrays.stream(data).max().orElseThrow();
assertThat(Statistics.mean(data)).isBetween(min - 1e-6, max + 1e-6);
}
@Property
void medianIsTheMiddleOfTheSortedData(
- @ForAll @Size(min = 1, max = 50) List<@DoubleRange(min = -1e6, max = 1e6) Double> values) {
- var data = values.stream().mapToDouble(Double::doubleValue).toArray();
- var sorted = data.clone();
+ @ForAll @Size(min = 1, max = 50) final List<@DoubleRange(min = -1e6, max = 1e6) Double> values) {
+ final var data = values.stream().mapToDouble(Double::doubleValue).toArray();
+ final var sorted = data.clone();
Arrays.sort(sorted);
- var middle = sorted.length / 2;
- var expected = sorted.length % 2 == 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2.0;
+ final var middle = sorted.length / 2;
+ final var expected = sorted.length % 2 == 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2.0;
assertThat(Statistics.median(data.clone())).isCloseTo(expected, within(1e-9));
}
@Property
- void modeIsOneOfTheValues(@ForAll @Size(min = 1, max = 50) List<@DoubleRange(min = -5, max = 5) Double> values) {
- var data = values.stream().mapToDouble(Double::doubleValue).toArray();
- var rounded = Arrays.stream(data).map(Math::rint).toArray(); // few distinct values, so repeats are likely
+ void modeIsOneOfTheValues(
+ @ForAll @Size(min = 1, max = 50) final List<@DoubleRange(min = -5, max = 5) Double> values) {
+ final var data = values.stream().mapToDouble(Double::doubleValue).toArray();
+ final var rounded = Arrays.stream(data).map(Math::rint).toArray(); // few distinct values, so repeats are likely
assertThat(rounded).contains(Statistics.mode(rounded));
}
diff --git a/src/test/java/io/github/diegourban/algorithms/math/TriangleTypeTest.java b/src/test/java/io/github/diegourban/algorithms/math/TriangleTypeTest.java
index b1f8a00..078a567 100644
--- a/src/test/java/io/github/diegourban/algorithms/math/TriangleTypeTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/math/TriangleTypeTest.java
@@ -9,7 +9,7 @@ class TriangleTypeTest {
@ParameterizedTest
@CsvSource({"EQUILATERAL, Equilatero", "ISOSCELES, Isoceles", "ESCALENE, Escaleno"})
- void exposesDisplayName(TriangleType type, String expectedName) {
+ void exposesDisplayName(final TriangleType type, final String expectedName) {
assertThat(type.getName()).isEqualTo(expectedName);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/bit/DeltaBitsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/bit/DeltaBitsTest.java
index 8fa214f..cf5fe3b 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/bit/DeltaBitsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/bit/DeltaBitsTest.java
@@ -12,7 +12,7 @@
*/
class DeltaBitsTest {
- static int solve(int a, int b) {
+ static int solve(final int a, final int b) {
return Integer.bitCount(a ^ b);
}
@@ -28,7 +28,7 @@ static int solve(int a, int b) {
"7, 17, 3",
"330274332, 199260599, 19",
})
- void countsDifferingBits(int a, int b, int expected) {
+ void countsDifferingBits(final int a, final int b, final int expected) {
assertThat(solve(a, b)).isEqualTo(expected);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/bit/FindUniqueIdTest.java b/src/test/java/io/github/diegourban/algorithms/problems/bit/FindUniqueIdTest.java
index 5835edc..fb6d993 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/bit/FindUniqueIdTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/bit/FindUniqueIdTest.java
@@ -13,9 +13,9 @@
*/
class FindUniqueIdTest {
- static int solve(int[] ids) {
+ static int solve(final int[] ids) {
var unique = 0;
- for (var id : ids) {
+ for (final var id : ids) {
unique ^= id;
}
return unique;
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/bit/ParityTest.java b/src/test/java/io/github/diegourban/algorithms/problems/bit/ParityTest.java
index f090e11..8fe6b20 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/bit/ParityTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/bit/ParityTest.java
@@ -14,8 +14,8 @@
*/
class ParityTest {
- static String solve(String bits) {
- var ones = bits.chars().filter(c -> c == '1').count();
+ static String solve(final String bits) {
+ final var ones = bits.chars().filter(c -> c == '1').count();
return bits + (ones % 2 == 0 ? '0' : '1');
}
@@ -41,7 +41,7 @@ void oddCountOfOnesAppendsOne() {
@Test
void handlesHundredBits() {
- var bits =
+ final var bits =
"0101011001101010011001010101001010101010101010101011010010101010101011010110101010000101010101010101";
assertThat(solve(bits)).isEqualTo(bits + "1");
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/bit/ToCarryOrNotToCarryTest.java b/src/test/java/io/github/diegourban/algorithms/problems/bit/ToCarryOrNotToCarryTest.java
index 7720389..5860e00 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/bit/ToCarryOrNotToCarryTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/bit/ToCarryOrNotToCarryTest.java
@@ -22,16 +22,16 @@ class ToCarryOrNotToCarryTest {
private static final SampleLoader SAMPLES = new SampleLoader("problems/bit/to-carry-or-not-to-carry");
- static long solve(long a, long b) {
+ static long solve(final long a, final long b) {
return a ^ b;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var out = new StringBuilder();
while (true) {
- long a;
- long b;
+ final long a;
+ final long b;
try {
a = reader.nextLong();
b = reader.nextLong();
@@ -62,7 +62,7 @@ void handlesUnsigned32BitValues() {
@ParameterizedTest
@ValueSource(strings = {"udebug"})
- void matchesSample(String name) throws IOException {
+ void matchesSample(final String name) throws IOException {
assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/EqualSidesOfAnArrayTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/EqualSidesOfAnArrayTest.java
index d47f364..754b82b 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/EqualSidesOfAnArrayTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/EqualSidesOfAnArrayTest.java
@@ -14,10 +14,10 @@
*/
class EqualSidesOfAnArrayTest {
- static int solve(int[] arr) {
+ static int solve(final int[] arr) {
for (var i = 0; i < arr.length; i++) {
- var leftSum = Arrays.stream(arr, 0, i).sum();
- var rightSum = Arrays.stream(arr, i + 1, arr.length).sum();
+ final var leftSum = Arrays.stream(arr, 0, i).sum();
+ final var rightSum = Arrays.stream(arr, i + 1, arr.length).sum();
if (leftSum == rightSum) {
return i;
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/LargestDifferenceTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/LargestDifferenceTest.java
index 41b44c5..0c53d4b 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/LargestDifferenceTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/LargestDifferenceTest.java
@@ -15,7 +15,7 @@
*/
class LargestDifferenceTest {
- static int solve(int[] data) {
+ static int solve(final int[] data) {
var largest = 0;
for (var i = 0; i < data.length; i++) {
for (var j = data.length - 1; j > i; j--) {
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/SingleRiffleCheckTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/SingleRiffleCheckTest.java
index 6eea47e..6417ddb 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/SingleRiffleCheckTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/SingleRiffleCheckTest.java
@@ -14,10 +14,10 @@
*/
class SingleRiffleCheckTest {
- static boolean solve(int[] half1, int[] half2, int[] deck) {
+ static boolean solve(final int[] half1, final int[] half2, final int[] deck) {
var i1 = 0;
var i2 = 0;
- for (var card : deck) {
+ for (final var card : deck) {
if (i1 < half1.length && card == half1[i1]) {
i1++;
} else if (i2 < half2.length && card == half2[i2]) {
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/TheForceAwakensTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/TheForceAwakensTest.java
index 81287cd..b497588 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/TheForceAwakensTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/TheForceAwakensTest.java
@@ -27,7 +27,7 @@ class TheForceAwakensTest {
/** A 1-based terrain position. */
record Position(int row, int column) {}
- static Optional solve(int[][] terrain) {
+ static Optional solve(final int[][] terrain) {
for (var i = 1; i < terrain.length - 1; i++) {
for (var j = 1; j < terrain[i].length - 1; j++) {
if (terrain[i][j] == LIGHTSABER && isSurroundedByGuards(terrain, i, j)) {
@@ -38,7 +38,7 @@ static Optional solve(int[][] terrain) {
return Optional.empty();
}
- private static boolean isSurroundedByGuards(int[][] terrain, int row, int column) {
+ private static boolean isSurroundedByGuards(final int[][] terrain, final int row, final int column) {
for (var di = -1; di <= 1; di++) {
for (var dj = -1; dj <= 1; dj++) {
if ((di != 0 || dj != 0) && terrain[row + di][column + dj] != GUARD) {
@@ -49,23 +49,23 @@ private static boolean isSurroundedByGuards(int[][] terrain, int row, int column
return true;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var n = reader.nextInt();
- var m = reader.nextInt();
- var terrain = new int[n][m];
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var n = reader.nextInt();
+ final var m = reader.nextInt();
+ final var terrain = new int[n][m];
for (var i = 0; i < n; i++) {
for (var j = 0; j < m; j++) {
terrain[i][j] = reader.nextInt();
}
}
- var position = solve(terrain).orElse(new Position(0, 0));
+ final var position = solve(terrain).orElse(new Position(0, 0));
return position.row() + " " + position.column() + "\n";
}
@Test
void findsTheGuardedLightsaber() {
- int[][] terrain = {
+ final int[][] terrain = {
{7, 7, 7, 1},
{7, 42, 7, 1},
{7, 7, 7, 1},
@@ -75,7 +75,7 @@ void findsTheGuardedLightsaber() {
@Test
void ignoresLightsaberMissingAGuard() {
- int[][] terrain = {
+ final int[][] terrain = {
{7, 7, 7},
{7, 42, 7},
{7, 7, 0},
@@ -85,7 +85,7 @@ void ignoresLightsaberMissingAGuard() {
@Test
void ignoresLightsaberOnTheBorder() {
- int[][] terrain = {
+ final int[][] terrain = {
{42, 7, 7},
{7, 7, 7},
{7, 7, 7},
@@ -95,7 +95,7 @@ void ignoresLightsaberOnTheBorder() {
@Test
void skipsUnguardedCandidateAndFindsTheNextOne() {
- int[][] terrain = {
+ final int[][] terrain = {
{7, 7, 7, 7, 7},
{0, 42, 7, 42, 7},
{7, 7, 7, 7, 7},
@@ -105,8 +105,8 @@ void skipsUnguardedCandidateAndFindsTheNextOne() {
@ParameterizedTest
@ValueSource(strings = {"uri1", "uri2", "uri3", "udebug"})
- void matchesSample(String name) throws IOException {
- var samples = new SampleLoader("problems/datastructure/array/the-force-awakens");
+ void matchesSample(final String name) throws IOException {
+ final var samples = new SampleLoader("problems/datastructure/array/the-force-awakens");
assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/GraphColoringTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/GraphColoringTest.java
index 4f265dc..ec44039 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/GraphColoringTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/GraphColoringTest.java
@@ -23,28 +23,28 @@ private static final class GraphNode {
private final Set neighbors = new HashSet<>();
private String color;
- private GraphNode(String label) {
+ private GraphNode(final String label) {
this.label = label;
}
- private void connect(GraphNode other) {
+ private void connect(final GraphNode other) {
neighbors.add(other);
other.neighbors.add(this);
}
}
- static void solve(List graph, List colors) {
- for (var node : graph) {
+ static void solve(final List graph, final List colors) {
+ for (final var node : graph) {
if (node.neighbors.contains(node)) {
throw new IllegalArgumentException("Legal coloring impossible for node with loop: " + node.label);
}
- var illegalColors = new HashSet();
- for (var neighbor : node.neighbors) {
+ final var illegalColors = new HashSet();
+ for (final var neighbor : node.neighbors) {
if (neighbor.color != null) {
illegalColors.add(neighbor.color);
}
}
- for (var color : colors) {
+ for (final var color : colors) {
if (!illegalColors.contains(color)) {
node.color = color;
break;
@@ -55,26 +55,27 @@ static void solve(List graph, List colors) {
@Test
void colorsAPathWithoutNeighborClashes() {
- var a = new GraphNode("a");
- var b = new GraphNode("b");
- var c = new GraphNode("c");
+ final var a = new GraphNode("a");
+ final var b = new GraphNode("b");
+ final var c = new GraphNode("c");
a.connect(b);
b.connect(c);
- var colors = List.of("red", "green", "blue");
+ final var colors = List.of("red", "green", "blue");
solve(List.of(a, b, c), colors);
assertThat(b.color).isIn(colors);
- var remaining = colors.stream().filter(color -> !color.equals(b.color)).toList();
+ final var remaining =
+ colors.stream().filter(color -> !color.equals(b.color)).toList();
assertThat(a.color).isIn(remaining);
assertThat(c.color).isIn(remaining);
}
@Test
void colorsATriangleWithThreeDistinctColors() {
- var a = new GraphNode("a");
- var b = new GraphNode("b");
- var c = new GraphNode("c");
+ final var a = new GraphNode("a");
+ final var b = new GraphNode("b");
+ final var c = new GraphNode("c");
a.connect(b);
b.connect(c);
c.connect(a);
@@ -86,7 +87,7 @@ void colorsATriangleWithThreeDistinctColors() {
@Test
void nodeWithLoopCannotBeColored() {
- var a = new GraphNode("a");
+ final var a = new GraphNode("a");
a.neighbors.add(a);
assertThatIllegalArgumentException().isThrownBy(() -> solve(List.of(a), List.of("red", "green")));
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/MeshMessageTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/MeshMessageTest.java
index e692e1a..f91da46 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/MeshMessageTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/MeshMessageTest.java
@@ -20,24 +20,24 @@
*/
class MeshMessageTest {
- static String[] solve(Map graph, String start, String end) {
+ static String[] solve(final Map graph, final String start, final String end) {
if (!graph.containsKey(start)) {
throw new IllegalArgumentException("Start node not in graph");
}
if (!graph.containsKey(end)) {
throw new IllegalArgumentException("End node not in graph");
}
- var toVisit = new ArrayDeque();
+ final var toVisit = new ArrayDeque();
toVisit.add(start);
- var reachedFrom = new HashMap();
+ final var reachedFrom = new HashMap();
reachedFrom.put(start, null);
while (!toVisit.isEmpty()) {
- var current = toVisit.remove();
+ final var current = toVisit.remove();
if (current.equals(end)) {
return path(reachedFrom, end);
}
- for (var neighbor : graph.get(current)) {
+ for (final var neighbor : graph.get(current)) {
if (!reachedFrom.containsKey(neighbor)) {
toVisit.add(neighbor);
reachedFrom.put(neighbor, current);
@@ -47,8 +47,8 @@ static String[] solve(Map graph, String start, String end) {
return null;
}
- private static String[] path(Map reachedFrom, String end) {
- var path = new ArrayList();
+ private static String[] path(final Map reachedFrom, final String end) {
+ final var path = new ArrayList();
for (var node = end; node != null; node = reachedFrom.get(node)) {
path.add(node);
}
@@ -58,21 +58,21 @@ private static String[] path(Map reachedFrom, String end) {
@Test
void unknownSenderIsRejected() {
- var graph = Map.of("Foo", new String[] {"A", "B"});
+ final var graph = Map.of("Foo", new String[] {"A", "B"});
assertThatIllegalArgumentException().isThrownBy(() -> solve(graph, "Bar", "Baz"));
}
@Test
void unknownRecipientIsRejected() {
- var graph = Map.of("Foo", new String[] {"A", "B"});
+ final var graph = Map.of("Foo", new String[] {"A", "B"});
assertThatIllegalArgumentException().isThrownBy(() -> solve(graph, "Foo", "Baz"));
}
@Test
void disconnectedRecipientHasNoPath() {
- var graph = Map.of(
+ final var graph = Map.of(
"Foo", new String[] {"Bar"},
"Bar", new String[] {"Foo"},
"Baz", new String[] {"Asdf"},
@@ -83,7 +83,7 @@ void disconnectedRecipientHasNoPath() {
@Test
void loopsDoNotPreventTermination() {
- var graph = Map.of(
+ final var graph = Map.of(
"Foo", new String[] {"Asdf", "Bar"},
"Asdf", new String[] {"Foo", "Bar"},
"Bar", new String[] {"Foo", "Asdf", "Baz"},
@@ -94,7 +94,7 @@ void loopsDoNotPreventTermination() {
@Test
void findsShortestRoute() {
- var graph = Map.of(
+ final var graph = Map.of(
"Min", new String[] {"William", "Jayden"},
"William", new String[] {"Min"},
"Jayden", new String[] {"Min", "Amelia", "Ren"},
@@ -108,7 +108,7 @@ void findsShortestRoute() {
@Test
void senderIsRecipient() {
- var graph = Map.of("Foo", new String[] {});
+ final var graph = Map.of("Foo", new String[] {});
assertThat(solve(graph, "Foo", "Foo")).containsExactly("Foo");
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/DeleteNodeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/DeleteNodeTest.java
index 3689828..f24a10d 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/DeleteNodeTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/DeleteNodeTest.java
@@ -17,8 +17,8 @@
*/
class DeleteNodeTest {
- static void solve(LinkedListNode nodeToDelete) {
- var next = nodeToDelete.getNext();
+ static void solve(final LinkedListNode nodeToDelete) {
+ final var next = nodeToDelete.getNext();
if (next == null) {
throw new IllegalArgumentException("Can't delete the last node with this method!");
}
@@ -28,9 +28,9 @@ static void solve(LinkedListNode nodeToDelete) {
@Test
void deletesAMiddleNode() {
- var a = new LinkedListNode(new Element("A"));
- var b = new LinkedListNode(new Element("B"));
- var c = new LinkedListNode(new Element("C"));
+ final var a = new LinkedListNode(new Element("A"));
+ final var b = new LinkedListNode(new Element("B"));
+ final var c = new LinkedListNode(new Element("C"));
a.setNext(b);
b.setNext(c);
@@ -42,7 +42,7 @@ void deletesAMiddleNode() {
@Test
void lastNodeCannotBeDeleted() {
- var a = new LinkedListNode(new Element("A"));
+ final var a = new LinkedListNode(new Element("A"));
assertThatIllegalArgumentException().isThrownBy(() -> solve(a));
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/FindRepeatBeastModeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/FindRepeatBeastModeTest.java
index f10ceec..d7ec90d 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/FindRepeatBeastModeTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/FindRepeatBeastModeTest.java
@@ -15,8 +15,8 @@
*/
class FindRepeatBeastModeTest {
- static int solve(int[] numbers) {
- var head = numbers.length;
+ static int solve(final int[] numbers) {
+ final var head = numbers.length;
var positionInCycle = head;
for (var step = 0; step < numbers.length - 1; step++) {
@@ -42,7 +42,7 @@ static int solve(int[] numbers) {
return behind;
}
- private static int next(int[] numbers, int position) {
+ private static int next(final int[] numbers, final int position) {
return numbers[position - 1];
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/LinkedListCycleTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/LinkedListCycleTest.java
index ec88c5c..15b707e 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/LinkedListCycleTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/LinkedListCycleTest.java
@@ -16,7 +16,7 @@
*/
class LinkedListCycleTest {
- static boolean solve(LinkedListNode first) {
+ static boolean solve(final LinkedListNode first) {
var slow = first;
var fast = first;
while (fast != null && fast.getNext() != null) {
@@ -29,8 +29,8 @@ static boolean solve(LinkedListNode first) {
return false;
}
- private static LinkedListNode[] chain(String... names) {
- var nodes = new LinkedListNode[names.length];
+ private static LinkedListNode[] chain(final String... names) {
+ final var nodes = new LinkedListNode[names.length];
for (var i = 0; i < names.length; i++) {
nodes[i] = new LinkedListNode(new Element(names[i]));
if (i > 0) {
@@ -42,14 +42,14 @@ private static LinkedListNode[] chain(String... names) {
@Test
void acyclicListHasNoCycle() {
- var nodes = chain("A", "B", "C");
+ final var nodes = chain("A", "B", "C");
assertThat(solve(nodes[0])).isFalse();
}
@Test
void tailPointingAtHeadIsACycle() {
- var nodes = chain("A", "B", "C");
+ final var nodes = chain("A", "B", "C");
nodes[2].setNext(nodes[0]);
assertThat(solve(nodes[0])).isTrue();
@@ -57,7 +57,7 @@ void tailPointingAtHeadIsACycle() {
@Test
void tailPointingInsideIsACycle() {
- var nodes = chain("A", "B", "C");
+ final var nodes = chain("A", "B", "C");
nodes[2].setNext(nodes[1]);
assertThat(solve(nodes[0])).isTrue();
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/MergeSortedLinkedListsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/MergeSortedLinkedListsTest.java
index 354d948..68adbc0 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/MergeSortedLinkedListsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/MergeSortedLinkedListsTest.java
@@ -20,13 +20,13 @@ private static final class Node {
private final int data;
private Node next;
- private Node(int data) {
+ private Node(final int data) {
this.data = data;
}
}
- static Node solve(Node headA, Node headB) {
- var sentinel = new Node(0);
+ static Node solve(final Node headA, final Node headB) {
+ final var sentinel = new Node(0);
var tail = sentinel;
var a = headA;
var b = headB;
@@ -44,18 +44,18 @@ static Node solve(Node headA, Node headB) {
return sentinel.next;
}
- private static Node list(int... values) {
- var sentinel = new Node(0);
+ private static Node list(final int... values) {
+ final var sentinel = new Node(0);
var tail = sentinel;
- for (var value : values) {
+ for (final var value : values) {
tail.next = new Node(value);
tail = tail.next;
}
return sentinel.next;
}
- private static List values(Node head) {
- var values = new ArrayList();
+ private static List values(final Node head) {
+ final var values = new ArrayList();
for (var node = head; node != null; node = node.next) {
values.add(node.data);
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/ReverseLinkedListTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/ReverseLinkedListTest.java
index 9823b50..36a71c0 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/ReverseLinkedListTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/ReverseLinkedListTest.java
@@ -17,11 +17,11 @@
*/
class ReverseLinkedListTest {
- static LinkedListNode solve(LinkedList list) {
+ static LinkedListNode solve(final LinkedList list) {
LinkedListNode previous = null;
var current = list.getFirst();
while (current != null) {
- var next = current.getNext();
+ final var next = current.getNext();
current.setNext(previous);
previous = current;
current = next;
@@ -31,12 +31,12 @@ static LinkedListNode solve(LinkedList list) {
@Test
void reversesTheList() {
- var list = new LinkedList();
+ final var list = new LinkedList();
list.addAtEnd(new Element("a"));
list.addAtEnd(new Element("b"));
list.addAtEnd(new Element("c"));
- var head = solve(list);
+ final var head = solve(list);
assertThat(head.getElement().getName()).isEqualTo("c");
assertThat(head.getNext().getElement().getName()).isEqualTo("b");
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/DroughtTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/DroughtTest.java
index c881edf..499681e 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/DroughtTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/DroughtTest.java
@@ -37,31 +37,31 @@ record Property(int residents, int consumption) {}
*/
record City(SortedMap residentsByConsumption, BigDecimal averageConsumption) {}
- static City solve(List properties) {
- var residentsByConsumption = new TreeMap();
+ static City solve(final List properties) {
+ final var residentsByConsumption = new TreeMap();
var totalResidents = 0L;
var totalConsumption = 0L;
- for (var property : properties) {
+ for (final var property : properties) {
totalResidents += property.residents();
totalConsumption += property.consumption();
residentsByConsumption.merge(
property.consumption() / property.residents(), property.residents(), Integer::sum);
}
- var average =
+ final var average =
BigDecimal.valueOf(totalConsumption).divide(BigDecimal.valueOf(totalResidents), 2, RoundingMode.DOWN);
return new City(residentsByConsumption, average);
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var cities = new ArrayList();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var cities = new ArrayList();
for (var n = reader.nextInt(); n != 0; n = reader.nextInt()) {
- var properties = new ArrayList(n);
+ final var properties = new ArrayList(n);
for (var i = 0; i < n; i++) {
properties.add(new Property(reader.nextInt(), reader.nextInt()));
}
- var city = solve(properties);
- var groups = city.residentsByConsumption().entrySet().stream()
+ final var city = solve(properties);
+ final var groups = city.residentsByConsumption().entrySet().stream()
.map(e -> e.getValue() + "-" + e.getKey())
.collect(Collectors.joining(" "));
cities.add("""
@@ -76,7 +76,7 @@ static String run(InputStream in) throws IOException {
@Test
void groupsResidentsByPerCapitaConsumption() {
- var city = solve(List.of(new Property(3, 22), new Property(2, 11), new Property(3, 39)));
+ final var city = solve(List.of(new Property(3, 22), new Property(2, 11), new Property(3, 39)));
assertThat(city.residentsByConsumption()).containsExactly(entry(5, 2), entry(7, 3), entry(13, 3));
assertThat(city.averageConsumption()).isEqualByComparingTo("9.00");
@@ -84,14 +84,14 @@ void groupsResidentsByPerCapitaConsumption() {
@Test
void mergesPropertiesWithSamePerCapitaConsumption() {
- var city = solve(List.of(new Property(1, 10), new Property(2, 20), new Property(3, 30)));
+ final var city = solve(List.of(new Property(1, 10), new Property(2, 20), new Property(3, 30)));
assertThat(city.residentsByConsumption()).containsExactly(entry(10, 6));
}
@Test
void truncatesAverageInsteadOfRounding() {
- var city = solve(List.of(
+ final var city = solve(List.of(
new Property(1, 25),
new Property(2, 20),
new Property(3, 31),
@@ -104,7 +104,7 @@ void truncatesAverageInsteadOfRounding() {
@Test
void keepsTrailingZeroOfExactAverage() {
- var city = solve(List.of(new Property(10, 156)));
+ final var city = solve(List.of(new Property(10, 156)));
assertThat(city.averageConsumption().toPlainString()).isEqualTo("15.60");
assertThat(city.residentsByConsumption()).containsExactly(Map.entry(15, 10));
@@ -112,8 +112,8 @@ void keepsTrailingZeroOfExactAverage() {
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
- var samples = new SampleLoader("problems/datastructure/map/drought");
+ void matchesSample(final String name) throws IOException {
+ final var samples = new SampleLoader("problems/datastructure/map/drought");
assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/NumberFrequencyTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/NumberFrequencyTest.java
index 8ef5617..08c5583 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/NumberFrequencyTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/NumberFrequencyTest.java
@@ -22,21 +22,21 @@
*/
class NumberFrequencyTest {
- static SortedMap solve(int[] numbers) {
- var frequency = new TreeMap();
- for (var x : numbers) {
+ static SortedMap solve(final int[] numbers) {
+ final var frequency = new TreeMap();
+ for (final var x : numbers) {
frequency.merge(x, 1, Integer::sum);
}
return frequency;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var numbers = new int[reader.nextInt()];
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var numbers = new int[reader.nextInt()];
for (var i = 0; i < numbers.length; i++) {
numbers[i] = reader.nextInt();
}
- var out = new StringBuilder();
+ final var out = new StringBuilder();
solve(numbers)
.forEach((x, count) ->
out.append(x).append(" aparece ").append(count).append(" vez(es)\n"));
@@ -61,8 +61,8 @@ void emptyInputHasNoFrequencies() {
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
- var samples = new SampleLoader("problems/datastructure/map/number-frequency");
+ void matchesSample(final String name) throws IOException {
+ final var samples = new SampleLoader("problems/datastructure/map/number-frequency");
assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/queue/QueueTwoStacksTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/queue/QueueTwoStacksTest.java
index 407fa14..1b50c16 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/queue/QueueTwoStacksTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/queue/QueueTwoStacksTest.java
@@ -23,7 +23,7 @@ static class QueueTwoStacks {
private final Deque inStack = new ArrayDeque<>();
private final Deque outStack = new ArrayDeque<>();
- void enqueue(int item) {
+ void enqueue(final int item) {
inStack.push(item);
}
@@ -42,14 +42,14 @@ int dequeue() {
@Test
void dequeueOnEmptyQueueFails() {
- var queue = new QueueTwoStacks();
+ final var queue = new QueueTwoStacks();
assertThatExceptionOfType(NoSuchElementException.class).isThrownBy(queue::dequeue);
}
@Test
void dequeuesWhatWasEnqueued() {
- var queue = new QueueTwoStacks();
+ final var queue = new QueueTwoStacks();
queue.enqueue(1);
assertThat(queue.dequeue()).isEqualTo(1);
@@ -57,7 +57,7 @@ void dequeuesWhatWasEnqueued() {
@Test
void dequeuesInFirstInFirstOutOrder() {
- var queue = new QueueTwoStacks();
+ final var queue = new QueueTwoStacks();
queue.enqueue(3);
queue.enqueue(1);
queue.enqueue(4);
@@ -69,7 +69,7 @@ void dequeuesInFirstInFirstOutOrder() {
@Test
void keepsOrderWhenEnqueuesAndDequeuesInterleave() {
- var queue = new QueueTwoStacks();
+ final var queue = new QueueTwoStacks();
queue.enqueue(1);
queue.enqueue(2);
assertThat(queue.dequeue()).isEqualTo(1);
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/InflightEntertainmentTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/InflightEntertainmentTest.java
index a15ae82..004ea59 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/InflightEntertainmentTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/InflightEntertainmentTest.java
@@ -15,9 +15,9 @@
*/
class InflightEntertainmentTest {
- static boolean solve(int[] movieLengths, int flightLength) {
- var lengthsSeen = new HashSet();
- for (var firstLength : movieLengths) {
+ static boolean solve(final int[] movieLengths, final int flightLength) {
+ final var lengthsSeen = new HashSet();
+ for (final var firstLength : movieLengths) {
if (lengthsSeen.contains(flightLength - firstLength)) {
return true;
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/PermutationPalindromeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/PermutationPalindromeTest.java
index 807522e..e0e1689 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/PermutationPalindromeTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/PermutationPalindromeTest.java
@@ -15,9 +15,9 @@
*/
class PermutationPalindromeTest {
- static boolean solve(String text) {
- var unpaired = new HashSet();
- for (var c : text.toCharArray()) {
+ static boolean solve(final String text) {
+ final var unpaired = new HashSet();
+ for (final var c : text.toCharArray()) {
if (!unpaired.remove(c)) {
unpaired.add(c);
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/TwiceLinearTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/TwiceLinearTest.java
index 5c3b4c7..779cee9 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/TwiceLinearTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/TwiceLinearTest.java
@@ -16,11 +16,11 @@
*/
class TwiceLinearTest {
- static int solve(int n) {
- var pending = new TreeSet();
+ static int solve(final int n) {
+ final var pending = new TreeSet();
pending.add(1);
for (var i = 0; i < n; i++) {
- var x = pending.pollFirst();
+ final var x = pending.pollFirst();
pending.add(2 * x + 1);
pending.add(3 * x + 1);
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/BracketValidatorTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/BracketValidatorTest.java
index 8e3ec8c..a478d6c 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/BracketValidatorTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/BracketValidatorTest.java
@@ -15,9 +15,9 @@
*/
class BracketValidatorTest {
- static boolean solve(String code) {
- var openers = new ArrayDeque();
- for (var c : code.toCharArray()) {
+ static boolean solve(final String code) {
+ final var openers = new ArrayDeque();
+ for (final var c : code.toCharArray()) {
switch (c) {
case '(', '[', '{' -> openers.push(c);
case ')', ']', '}' -> {
@@ -31,7 +31,7 @@ static boolean solve(String code) {
return openers.isEmpty();
}
- private static char closerFor(char opener) {
+ private static char closerFor(final char opener) {
return switch (opener) {
case '(' -> ')';
case '[' -> ']';
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/DiamondsAndSandTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/DiamondsAndSandTest.java
index f96021d..e3ab398 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/DiamondsAndSandTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/DiamondsAndSandTest.java
@@ -20,10 +20,10 @@
*/
class DiamondsAndSandTest {
- static int solve(String mine) {
+ static int solve(final String mine) {
var open = 0;
var diamonds = 0;
- for (var c : mine.toCharArray()) {
+ for (final var c : mine.toCharArray()) {
if (c == '<') {
open++;
} else if (c == '>' && open > 0) {
@@ -34,10 +34,10 @@ static int solve(String mine) {
return diamonds;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var n = reader.nextInt();
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var n = reader.nextInt();
+ final var out = new StringBuilder();
for (var i = 0; i < n; i++) {
out.append(solve(reader.readLine())).append('\n');
}
@@ -64,8 +64,8 @@ void closingWithoutOpeningIsIgnored() {
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
- var samples = new SampleLoader("problems/datastructure/stack/diamonds-and-sand");
+ void matchesSample(final String name) throws IOException {
+ final var samples = new SampleLoader("problems/datastructure/stack/diamonds-and-sand");
assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/LargestStackTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/LargestStackTest.java
index 8865c4d..987a9bd 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/LargestStackTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/LargestStackTest.java
@@ -21,7 +21,7 @@ static class MaxStack {
private final Deque stack = new ArrayDeque<>();
private final Deque maxesStack = new ArrayDeque<>();
- void push(int item) {
+ void push(final int item) {
stack.push(item);
if (maxesStack.isEmpty() || item >= maxesStack.peek()) {
maxesStack.push(item);
@@ -29,7 +29,7 @@ void push(int item) {
}
int pop() {
- int item = stack.pop();
+ final int item = stack.pop();
if (item == maxesStack.peek()) {
maxesStack.pop();
}
@@ -43,7 +43,7 @@ int getMax() {
@Test
void popsWhatWasPushed() {
- var stack = new MaxStack();
+ final var stack = new MaxStack();
stack.push(1);
assertThat(stack.pop()).isEqualTo(1);
@@ -51,7 +51,7 @@ void popsWhatWasPushed() {
@Test
void popsInLastInFirstOutOrder() {
- var stack = new MaxStack();
+ final var stack = new MaxStack();
stack.push(3);
stack.push(1);
stack.push(2);
@@ -63,7 +63,7 @@ void popsInLastInFirstOutOrder() {
@Test
void getMaxReturnsTheLargestItem() {
- var stack = new MaxStack();
+ final var stack = new MaxStack();
stack.push(1);
stack.push(10);
stack.push(3);
@@ -73,7 +73,7 @@ void getMaxReturnsTheLargestItem() {
@Test
void getMaxTracksPopsIncludingDuplicateMaxima() {
- var stack = new MaxStack();
+ final var stack = new MaxStack();
stack.push(5);
stack.push(7);
stack.push(7);
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/ParenthesisBalanceTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/ParenthesisBalanceTest.java
index 7a335a8..cc805c0 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/ParenthesisBalanceTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/ParenthesisBalanceTest.java
@@ -21,9 +21,9 @@
*/
class ParenthesisBalanceTest {
- static boolean solve(String expression) {
+ static boolean solve(final String expression) {
var depth = 0;
- for (var c : expression.toCharArray()) {
+ for (final var c : expression.toCharArray()) {
switch (c) {
case '(' -> depth++;
case ')' -> {
@@ -37,9 +37,9 @@ static boolean solve(String expression) {
return depth == 0;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var out = new StringBuilder();
try {
for (var line = reader.readLine(); !line.isEmpty(); line = reader.readLine()) {
out.append(solve(line) ? "correct" : "incorrect").append('\n');
@@ -77,8 +77,8 @@ void closingBeforeOpeningIsIncorrect() {
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
- var samples = new SampleLoader("problems/datastructure/stack/parenthesis-balance");
+ void matchesSample(final String name) throws IOException {
+ final var samples = new SampleLoader("problems/datastructure/stack/parenthesis-balance");
assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BalancedBinaryTreeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BalancedBinaryTreeTest.java
index b8be54c..98fb731 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BalancedBinaryTreeTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BalancedBinaryTreeTest.java
@@ -19,18 +19,18 @@ class BalancedBinaryTreeTest {
private record NodeDepth(BinaryTreeNode node, int depth) {}
- static boolean solve(BinaryTreeNode root) {
+ static boolean solve(final BinaryTreeNode root) {
if (root == null) {
return true;
}
- var depths = new ArrayList(3);
- var nodes = new ArrayDeque();
+ final var depths = new ArrayList(3);
+ final var nodes = new ArrayDeque();
nodes.push(new NodeDepth(root, 0));
while (!nodes.isEmpty()) {
- var current = nodes.pop();
- var node = current.node();
- var depth = current.depth();
+ final var current = nodes.pop();
+ final var node = current.node();
+ final var depth = current.depth();
if (node.left == null && node.right == null) {
if (!depths.contains(depth)) {
@@ -63,8 +63,8 @@ void singleNodeIsSuperBalanced() {
@Test
void leavesTwoLevelsApartAreNotSuperBalanced() {
- var root = new BinaryTreeNode(5);
- var three = root.insertLeft(3);
+ final var root = new BinaryTreeNode(5);
+ final var three = root.insertLeft(3);
three.insertLeft(1);
three.insertRight(4).insertLeft(2);
root.insertRight(8);
@@ -74,8 +74,8 @@ void leavesTwoLevelsApartAreNotSuperBalanced() {
@Test
void leavesAtMostOneLevelApartAreSuperBalanced() {
- var root = new BinaryTreeNode(5);
- var three = root.insertLeft(3);
+ final var root = new BinaryTreeNode(5);
+ final var three = root.insertLeft(3);
three.insertLeft(1);
three.insertRight(4).insertLeft(2);
root.insertRight(8).insertLeft(6);
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BinarySearchTreeCheckerTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BinarySearchTreeCheckerTest.java
index 7f3cdbe..edfa9b1 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BinarySearchTreeCheckerTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BinarySearchTreeCheckerTest.java
@@ -18,16 +18,16 @@ class BinarySearchTreeCheckerTest {
private record NodeBounds(BinaryTreeNode node, long lower, long upper) {}
- static boolean solve(BinaryTreeNode root) {
+ static boolean solve(final BinaryTreeNode root) {
if (root == null) {
return true;
}
- var stack = new ArrayDeque();
+ final var stack = new ArrayDeque();
stack.push(new NodeBounds(root, Long.MIN_VALUE, Long.MAX_VALUE));
while (!stack.isEmpty()) {
- var current = stack.pop();
- var node = current.node();
+ final var current = stack.pop();
+ final var node = current.node();
if (node.value <= current.lower() || node.value >= current.upper()) {
return false;
}
@@ -43,11 +43,11 @@ static boolean solve(BinaryTreeNode root) {
@Test
void descendantViolatingAncestorBoundIsNotABst() {
- var root = new BinaryTreeNode(50);
- var eighty = root.insertRight(80);
+ final var root = new BinaryTreeNode(50);
+ final var eighty = root.insertRight(80);
eighty.insertRight(90);
eighty.insertLeft(70);
- var thirty = root.insertLeft(30);
+ final var thirty = root.insertLeft(30);
thirty.insertRight(60);
thirty.insertLeft(20);
@@ -56,11 +56,11 @@ void descendantViolatingAncestorBoundIsNotABst() {
@Test
void validTreeIsABst() {
- var root = new BinaryTreeNode(50);
- var eighty = root.insertRight(80);
+ final var root = new BinaryTreeNode(50);
+ final var eighty = root.insertRight(80);
eighty.insertRight(90);
eighty.insertLeft(70);
- var thirty = root.insertLeft(30);
+ final var thirty = root.insertLeft(30);
thirty.insertRight(40);
thirty.insertLeft(20);
@@ -69,7 +69,7 @@ void validTreeIsABst() {
@Test
void duplicateValueIsNotABst() {
- var root = new BinaryTreeNode(5);
+ final var root = new BinaryTreeNode(5);
root.insertLeft(5);
assertThat(solve(root)).isFalse();
@@ -77,7 +77,7 @@ void duplicateValueIsNotABst() {
@Test
void extremeIntValuesAreAllowed() {
- var root = new BinaryTreeNode(0);
+ final var root = new BinaryTreeNode(0);
root.insertLeft(Integer.MIN_VALUE);
root.insertRight(Integer.MAX_VALUE);
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/SecondLargestItemInBstTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/SecondLargestItemInBstTest.java
index f202912..1e02434 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/SecondLargestItemInBstTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/SecondLargestItemInBstTest.java
@@ -16,7 +16,7 @@
*/
class SecondLargestItemInBstTest {
- static int solve(BinaryTreeNode root) {
+ static int solve(final BinaryTreeNode root) {
if (root == null || (root.left == null && root.right == null)) {
throw new IllegalArgumentException("Tree must have at least 2 nodes");
}
@@ -32,7 +32,7 @@ static int solve(BinaryTreeNode root) {
}
}
- private static int largest(BinaryTreeNode node) {
+ private static int largest(final BinaryTreeNode node) {
var current = node;
while (current.right != null) {
current = current.right;
@@ -42,13 +42,13 @@ private static int largest(BinaryTreeNode node) {
@Test
void largestHasALeftSubtree() {
- var root = new BinaryTreeNode(5);
- var three = root.insertLeft(3);
+ final var root = new BinaryTreeNode(5);
+ final var three = root.insertLeft(3);
three.insertLeft(1);
three.insertRight(4);
- var eight = root.insertRight(8);
+ final var eight = root.insertRight(8);
eight.insertLeft(7);
- var ten = eight.insertRight(12).insertLeft(10);
+ final var ten = eight.insertRight(12).insertLeft(10);
ten.insertLeft(9);
ten.insertRight(11);
@@ -57,7 +57,7 @@ void largestHasALeftSubtree() {
@Test
void parentOfChildlessLargest() {
- var root = new BinaryTreeNode(5);
+ final var root = new BinaryTreeNode(5);
root.insertLeft(3);
root.insertRight(8);
@@ -66,7 +66,7 @@ void parentOfChildlessLargest() {
@Test
void rootIsLargestWithOnlyLeftSubtree() {
- var root = new BinaryTreeNode(5);
+ final var root = new BinaryTreeNode(5);
root.insertLeft(3).insertRight(4);
assertThat(solve(root)).isEqualTo(4);
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/trie/MillionGazillionTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/trie/MillionGazillionTest.java
index f631e2b..5a7140d 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/trie/MillionGazillionTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/trie/MillionGazillionTest.java
@@ -23,10 +23,10 @@ static class Trie {
private final Node root = new Node();
/** Adds {@code word} and returns {@code true} if it was not already present. */
- boolean checkPresentAndAdd(String word) {
+ boolean checkPresentAndAdd(final String word) {
var current = root;
var isNewWord = false;
- for (var character : word.toCharArray()) {
+ for (final var character : word.toCharArray()) {
if (!current.children.containsKey(character)) {
isNewWord = true;
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/dp/CakeThiefTest.java b/src/test/java/io/github/diegourban/algorithms/problems/dp/CakeThiefTest.java
index c76c087..110d9ad 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/dp/CakeThiefTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/dp/CakeThiefTest.java
@@ -24,16 +24,16 @@ static class InfinityException extends RuntimeException {
}
}
- static long solve(Box[] boxes, int capacity) {
- var maxValuesAtCapacities = new long[capacity + 1];
+ static long solve(final Box[] boxes, final int capacity) {
+ final var maxValuesAtCapacities = new long[capacity + 1];
for (var currentCapacity = 0; currentCapacity <= capacity; currentCapacity++) {
var currentMaxValue = 0L;
- for (var box : boxes) {
+ for (final var box : boxes) {
if (box.weight() == 0 && box.value() != 0) {
throw new InfinityException();
}
if (box.weight() <= currentCapacity) {
- var maxValueUsingBox = box.value() + maxValuesAtCapacities[currentCapacity - box.weight()];
+ final var maxValueUsingBox = box.value() + maxValuesAtCapacities[currentCapacity - box.weight()];
currentMaxValue = Math.max(maxValueUsingBox, currentMaxValue);
}
}
@@ -44,14 +44,14 @@ static long solve(Box[] boxes, int capacity) {
@Test
void takesAsManyOfTheBestBoxesAsFit() {
- var boxes = new Box[] {new Box(1, 3), new Box(2, 2), new Box(4, 5)};
+ final var boxes = new Box[] {new Box(1, 3), new Box(2, 2), new Box(4, 5)};
assertThat(solve(boxes, 15)).isEqualTo(45L);
}
@Test
void weightlessValuableBoxIsInfinite() {
- var boxes = new Box[] {new Box(0, 1), new Box(2, 2)};
+ final var boxes = new Box[] {new Box(0, 1), new Box(2, 2)};
assertThatExceptionOfType(InfinityException.class).isThrownBy(() -> solve(boxes, 5));
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/greedy/BanknotesAndCoinsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/greedy/BanknotesAndCoinsTest.java
index c5a5236..852b15c 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/greedy/BanknotesAndCoinsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/greedy/BanknotesAndCoinsTest.java
@@ -24,20 +24,21 @@ class BanknotesAndCoinsTest {
/** Counts per denomination, aligned with {@link #BANKNOTE_CENTS} and {@link #COIN_CENTS}. */
record Breakdown(List banknotes, List coins) {}
- static int toCents(String amount) {
+ static int toCents(final String amount) {
return new BigDecimal(amount).movePointRight(2).intValueExact();
}
- static Breakdown solve(int cents) {
- var remaining = new int[] {cents};
- var banknotes =
+ static Breakdown solve(final int cents) {
+ final var remaining = new int[] {cents};
+ final var banknotes =
BANKNOTE_CENTS.stream().map(value -> take(remaining, value)).toList();
- var coins = COIN_CENTS.stream().map(value -> take(remaining, value)).toList();
+ final var coins =
+ COIN_CENTS.stream().map(value -> take(remaining, value)).toList();
return new Breakdown(banknotes, coins);
}
- private static int take(int[] remaining, int value) {
- var count = remaining[0] / value;
+ private static int take(final int[] remaining, final int value) {
+ final var count = remaining[0] / value;
remaining[0] %= value;
return count;
}
@@ -50,7 +51,7 @@ private static int take(int[] remaining, int value) {
"0.01, 1",
"1000000.00, 100000000",
})
- void parsesAmountToCentsExactly(String amount, int cents) {
+ void parsesAmountToCentsExactly(final String amount, final int cents) {
assertThat(toCents(amount)).isEqualTo(cents);
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/CollectableCardsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/CollectableCardsTest.java
index 1ec7fc2..3e9db4b 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/CollectableCardsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/CollectableCardsTest.java
@@ -23,14 +23,14 @@ class CollectableCardsTest {
private static final SampleLoader SAMPLES = new SampleLoader("problems/math/collectable-cards");
- static long solve(int f1, int f2) {
+ static long solve(final int f1, final int f2) {
return NumberTheory.gcdLoop(f1, f2);
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var tests = reader.nextInt();
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var tests = reader.nextInt();
+ final var out = new StringBuilder();
for (var i = 0; i < tests; i++) {
out.append(solve(reader.nextInt(), reader.nextInt())).append('\n');
}
@@ -46,13 +46,13 @@ static String run(InputStream in) throws IOException {
"7, 13, 1",
"1000, 1000, 1000",
})
- void largestPileSizeIsTheGcd(int f1, int f2, long expected) {
+ void largestPileSizeIsTheGcd(final int f1, final int f2, final long expected) {
assertThat(solve(f1, f2)).isEqualTo(expected);
}
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
+ void matchesSample(final String name) throws IOException {
assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/CommonDenominatorsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/CommonDenominatorsTest.java
index 0935916..1ad906a 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/CommonDenominatorsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/CommonDenominatorsTest.java
@@ -16,13 +16,14 @@
*/
class CommonDenominatorsTest {
- static String solve(long[][] fractions) {
+ static String solve(final long[][] fractions) {
if (fractions.length == 0) {
return "";
}
- var lcm = NumberTheory.lcm(Arrays.stream(fractions).mapToLong(f -> f[1]).toArray());
- var result = new StringBuilder();
- for (var f : fractions) {
+ final var lcm =
+ NumberTheory.lcm(Arrays.stream(fractions).mapToLong(f -> f[1]).toArray());
+ final var result = new StringBuilder();
+ for (final var f : fractions) {
result.append('(')
.append(f[0] * (lcm / f[1]))
.append(',')
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/DivisorsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/DivisorsTest.java
index 5bf783c..0ccde24 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/DivisorsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/DivisorsTest.java
@@ -16,9 +16,9 @@
*/
class DivisorsTest {
- static List solve(int n) {
- var small = new ArrayList();
- var large = new ArrayList();
+ static List solve(final int n) {
+ final var small = new ArrayList();
+ final var large = new ArrayList();
for (var d = 1; (long) d * d <= n; d++) {
if (n % d == 0) {
small.add(d);
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/EasyLineTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/EasyLineTest.java
index 0d4fb8f..aef09f7 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/EasyLineTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/EasyLineTest.java
@@ -15,7 +15,7 @@
*/
class EasyLineTest {
- static BigInteger solve(int n) {
+ static BigInteger solve(final int n) {
return Combinatorics.binomialCoefficient(2 * n, n);
}
@@ -34,7 +34,7 @@ static BigInteger solve(int n) {
"19, 35345263800",
"50, 100891344545564193334812497256",
})
- void sumsSquaresOfPascalRow(int n, BigInteger expected) {
+ void sumsSquaresOfPascalRow(final int n, final BigInteger expected) {
assertThat(solve(n)).isEqualTo(expected);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/FactorialSumTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/FactorialSumTest.java
index 3c328ed..bbbfdcf 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/FactorialSumTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/FactorialSumTest.java
@@ -23,11 +23,11 @@ class FactorialSumTest {
private static final SampleLoader SAMPLES = new SampleLoader("problems/math/factorial-sum");
- static long solve(int m, int n) {
+ static long solve(final int m, final int n) {
return factorial(m) + factorial(n);
}
- private static long factorial(int n) {
+ private static long factorial(final int n) {
var result = 1L;
for (var i = 2; i <= n; i++) {
result *= i;
@@ -35,9 +35,9 @@ private static long factorial(int n) {
return result;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var out = new StringBuilder();
while (true) {
try {
out.append(solve(reader.nextInt(), reader.nextInt())).append('\n');
@@ -56,13 +56,13 @@ static String run(InputStream in) throws IOException {
"5, 0, 121",
"20, 20, 4865804016353280000",
})
- void sumsBothFactorials(int m, int n, long expected) {
+ void sumsBothFactorials(final int m, final int n, final long expected) {
assertThat(solve(m, n)).isEqualTo(expected);
}
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
+ void matchesSample(final String name) throws IOException {
assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/FibonacciArrayTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/FibonacciArrayTest.java
index 7fd14da..9004c44 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/FibonacciArrayTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/FibonacciArrayTest.java
@@ -15,11 +15,11 @@
*/
class FibonacciArrayTest {
- static long solve(int n) {
+ static long solve(final int n) {
var previous = 0L;
var current = 1L;
for (var i = 0; i < n; i++) {
- var next = previous + current;
+ final var next = previous + current;
previous = current;
current = next;
}
@@ -37,7 +37,7 @@ static long solve(int n) {
"47, 2971215073",
"60, 1548008755920",
})
- void nthFibonacci(int n, long expected) {
+ void nthFibonacci(final int n, final long expected) {
assertThat(solve(n)).isEqualTo(expected);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PascalsTriangleTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PascalsTriangleTest.java
index 18cf34c..2042b51 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/PascalsTriangleTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PascalsTriangleTest.java
@@ -18,7 +18,7 @@
*/
class PascalsTriangleTest {
- static long solve(int n) {
+ static long solve(final int n) {
return (1L << n) - 1;
}
@@ -30,14 +30,14 @@ static long solve(int n) {
"31, 2147483647",
"50, 1125899906842623",
})
- void sumOfFirstRows(int n, long expected) {
+ void sumOfFirstRows(final int n, final long expected) {
assertThat(solve(n)).isEqualTo(expected);
}
@Test
void closedFormMatchesSummingTheBinomialCoefficients() {
for (var n = 1; n <= 20; n++) {
- var sum = IntStream.range(0, n)
+ final var sum = IntStream.range(0, n)
.boxed()
.flatMap(row ->
IntStream.rangeClosed(0, row).mapToObj(k -> Combinatorics.binomialCoefficient(row, k)))
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PerfectNumberTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PerfectNumberTest.java
index a592201..fac54af 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/PerfectNumberTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PerfectNumberTest.java
@@ -15,7 +15,7 @@
*/
class PerfectNumberTest {
- static boolean solve(int x) {
+ static boolean solve(final int x) {
if (x < 2) {
return false;
}
@@ -33,13 +33,13 @@ static boolean solve(int x) {
@ParameterizedTest
@ValueSource(ints = {6, 28, 496, 8128, 33550336})
- void perfectNumbers(int x) {
+ void perfectNumbers(final int x) {
assertThat(solve(x)).isTrue();
}
@ParameterizedTest
@ValueSource(ints = {1, 2, 29, 50, 91, 100000000})
- void nonPerfectNumbers(int x) {
+ void nonPerfectNumbers(final int x) {
assertThat(solve(x)).isFalse();
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PrefaceTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PrefaceTest.java
index 67cdda0..d5d2a70 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/PrefaceTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PrefaceTest.java
@@ -19,11 +19,11 @@ class PrefaceTest {
record Division(int quotient, int remainder) {}
- static Division solve(int a, int b) {
+ static Division solve(final int a, final int b) {
if (b == 0) {
throw new IllegalArgumentException("division by zero");
}
- var remainder = Math.floorMod(a, Math.abs(b));
+ final var remainder = Math.floorMod(a, Math.abs(b));
return new Division((a - remainder) / b, remainder);
}
@@ -38,7 +38,7 @@ static Division solve(int a, int b) {
"-6, 3, -2, 0",
"0, -5, 0, 0",
})
- void remainderIsNeverNegative(int a, int b, int quotient, int remainder) {
+ void remainderIsNeverNegative(final int a, final int b, final int quotient, final int remainder) {
assertThat(solve(a, b)).isEqualTo(new Division(quotient, remainder));
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeGeneratorTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeGeneratorTest.java
index 198d9d6..2d2c049 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeGeneratorTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeGeneratorTest.java
@@ -22,15 +22,15 @@
*/
class PrimeGeneratorTest {
- static List solve(int m, int n) {
- var low = Math.max(m, 2);
- var primes = new ArrayList();
+ static List solve(final int m, final int n) {
+ final var low = Math.max(m, 2);
+ final var primes = new ArrayList();
if (low > n) {
return primes;
}
- var limit = (int) Math.sqrt(n);
- var composite = new boolean[limit + 1];
- var segment = new boolean[n - low + 1];
+ final var limit = (int) Math.sqrt(n);
+ final var composite = new boolean[limit + 1];
+ final var segment = new boolean[n - low + 1];
for (var p = 2; p <= limit; p++) {
if (composite[p]) {
continue;
@@ -38,7 +38,7 @@ static List solve(int m, int n) {
for (var multiple = (long) p * p; multiple <= limit; multiple += p) {
composite[(int) multiple] = true;
}
- var first = Math.max((long) p * p, (low + p - 1L) / p * p);
+ final var first = Math.max((long) p * p, (low + p - 1L) / p * p);
for (var multiple = first; multiple <= n; multiple += p) {
segment[(int) (multiple - low)] = true;
}
@@ -51,15 +51,15 @@ static List solve(int m, int n) {
return primes;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var t = reader.nextInt();
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var t = reader.nextInt();
+ final var out = new StringBuilder();
for (var i = 0; i < t; i++) {
if (i > 0) {
out.append('\n');
}
- for (var prime : solve(reader.nextInt(), reader.nextInt())) {
+ for (final var prime : solve(reader.nextInt(), reader.nextInt())) {
out.append(prime).append('\n');
}
}
@@ -68,7 +68,7 @@ static String run(InputStream in) throws IOException {
private final SampleLoader samples = new SampleLoader("problems/math/prime-generator");
- private static InputStream input(String text) {
+ private static InputStream input(final String text) {
return new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8));
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeNumberTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeNumberTest.java
index f56cdce..90610c0 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeNumberTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeNumberTest.java
@@ -15,19 +15,19 @@
*/
class PrimeNumberTest {
- static boolean solve(int x) {
+ static boolean solve(final int x) {
return NumberTheory.isPrime(x);
}
@ParameterizedTest
@ValueSource(ints = {2, 3, 5, 7, 11, 13, 97, 7919, 9999991})
- void primes(int x) {
+ void primes(final int x) {
assertThat(solve(x)).isTrue();
}
@ParameterizedTest
@ValueSource(ints = {1, 4, 8, 9, 25, 49, 51, 7917, 10000000})
- void nonPrimes(int x) {
+ void nonPrimes(final int x) {
assertThat(solve(x)).isFalse();
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimesInNumbersTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimesInNumbersTest.java
index af543b0..b46086a 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimesInNumbersTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimesInNumbersTest.java
@@ -17,10 +17,10 @@
*/
class PrimesInNumbersTest {
- static String solve(int n) {
- var counts = NumberTheory.primeFactorsList(n).stream()
+ static String solve(final int n) {
+ final var counts = NumberTheory.primeFactorsList(n).stream()
.collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting()));
- var result = new StringBuilder();
+ final var result = new StringBuilder();
counts.forEach((prime, k) -> {
result.append('(').append(prime);
if (k > 1) {
@@ -48,7 +48,7 @@ static String solve(int n) {
"86240, (2**5)(5)(7**2)(11)",
"7775460, (2**2)(3**3)(5)(7)(11**2)(17)",
})
- void decomposesIntoPrimePowers(int n, String expected) {
+ void decomposesIntoPrimePowers(final int n, final String expected) {
assertThat(solve(n)).isEqualTo(expected);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/QueenTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/QueenTest.java
index 3b1d553..221af8c 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/QueenTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/QueenTest.java
@@ -22,7 +22,7 @@ class QueenTest {
private static final SampleLoader SAMPLES = new SampleLoader("problems/math/queen");
- static int solve(int x1, int y1, int x2, int y2) {
+ static int solve(final int x1, final int y1, final int x2, final int y2) {
if (x1 == x2 && y1 == y2) {
return 0;
}
@@ -32,14 +32,14 @@ static int solve(int x1, int y1, int x2, int y2) {
return 2;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var out = new StringBuilder();
while (true) {
- var x1 = reader.nextInt();
- var y1 = reader.nextInt();
- var x2 = reader.nextInt();
- var y2 = reader.nextInt();
+ final var x1 = reader.nextInt();
+ final var y1 = reader.nextInt();
+ final var x2 = reader.nextInt();
+ final var y2 = reader.nextInt();
if (x1 == 0 && y1 == 0 && x2 == 0 && y2 == 0) {
return out.toString();
}
@@ -58,13 +58,13 @@ static String run(InputStream in) throws IOException {
"1, 8, 8, 1, 1",
"1, 1, 2, 3, 2",
})
- void minimumMoves(int x1, int y1, int x2, int y2, int expected) {
+ void minimumMoves(final int x1, final int y1, final int x2, final int y2, final int expected) {
assertThat(solve(x1, y1, x2, y2)).isEqualTo(expected);
}
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
+ void matchesSample(final String name) throws IOException {
assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/RainfallTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/RainfallTest.java
index 5564bd5..423b847 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/RainfallTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/RainfallTest.java
@@ -19,16 +19,17 @@ record Rainfall(double mean, double variance) {}
static final Rainfall UNKNOWN = new Rainfall(-1, -1);
- static Rainfall solve(String town, String data) {
+ static Rainfall solve(final String town, final String data) {
return data.lines()
.filter(line -> line.startsWith(town + ":"))
.findFirst()
.map(line -> {
- var values = Arrays.stream(line.substring(town.length() + 1).split(","))
+ final var values = Arrays.stream(
+ line.substring(town.length() + 1).split(","))
.mapToDouble(month -> Double.parseDouble(month.split(" ")[1]))
.toArray();
- var mean = Statistics.mean(values);
- var variance = Arrays.stream(values)
+ final var mean = Statistics.mean(values);
+ final var variance = Arrays.stream(values)
.map(v -> (v - mean) * (v - mean))
.average()
.orElseThrow();
@@ -51,14 +52,14 @@ static Rainfall solve(String town, String data) {
@Test
void london() {
- var result = solve("London", DATA);
+ final var result = solve("London", DATA);
assertThat(result.mean()).isCloseTo(51.199999999999996, within(1e-2));
assertThat(result.variance()).isCloseTo(57.42833333333374, within(1e-2));
}
@Test
void beijing() {
- var result = solve("Beijing", DATA);
+ final var result = solve("Beijing", DATA);
assertThat(result.mean()).isCloseTo(52.416666666666664, within(1e-2));
assertThat(result.variance()).isCloseTo(4808.37138888889, within(1e-2));
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/RectangularLoveTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/RectangularLoveTest.java
index d32445a..4909dd5 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/RectangularLoveTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/RectangularLoveTest.java
@@ -21,18 +21,19 @@ private record RangeOverlap(int startPoint, int length) {}
private static final Rectangle NO_OVERLAP = new Rectangle(0, 0, 0, 0);
- static Rectangle solve(Rectangle rect1, Rectangle rect2) {
- var xOverlap = findRangeOverlap(rect1.leftX(), rect1.width(), rect2.leftX(), rect2.width());
- var yOverlap = findRangeOverlap(rect1.bottomY(), rect1.height(), rect2.bottomY(), rect2.height());
+ static Rectangle solve(final Rectangle rect1, final Rectangle rect2) {
+ final var xOverlap = findRangeOverlap(rect1.leftX(), rect1.width(), rect2.leftX(), rect2.width());
+ final var yOverlap = findRangeOverlap(rect1.bottomY(), rect1.height(), rect2.bottomY(), rect2.height());
if (xOverlap.length() == 0 || yOverlap.length() == 0) {
return NO_OVERLAP;
}
return new Rectangle(xOverlap.startPoint(), yOverlap.startPoint(), xOverlap.length(), yOverlap.length());
}
- private static RangeOverlap findRangeOverlap(int point1, int length1, int point2, int length2) {
- var highestStartPoint = Math.max(point1, point2);
- var lowestEndPoint = Math.min(point1 + length1, point2 + length2);
+ private static RangeOverlap findRangeOverlap(
+ final int point1, final int length1, final int point2, final int length2) {
+ final var highestStartPoint = Math.max(point1, point2);
+ final var lowestEndPoint = Math.min(point1 + length1, point2 + length2);
if (highestStartPoint >= lowestEndPoint) {
return new RangeOverlap(0, 0);
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/RomanNumeralsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/RomanNumeralsTest.java
index 1ede0f1..78cc72c 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/RomanNumeralsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/RomanNumeralsTest.java
@@ -18,8 +18,8 @@ class RomanNumeralsTest {
private static final int[] VALUES = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
private static final String[] SYMBOLS = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
- static String solve(int n) {
- var roman = new StringBuilder();
+ static String solve(final int n) {
+ final var roman = new StringBuilder();
var remaining = n;
for (var i = 0; i < VALUES.length; i++) {
while (remaining >= VALUES[i]) {
@@ -45,7 +45,7 @@ static String solve(int n) {
"444, CDXLIV",
"999, CMXCIX",
})
- void convertsToRoman(int n, String expected) {
+ void convertsToRoman(final int n, final String expected) {
assertThat(solve(n)).isEqualTo(expected);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/SumByFactorsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/SumByFactorsTest.java
index 55906b2..b0af258 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/SumByFactorsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/SumByFactorsTest.java
@@ -16,14 +16,14 @@
*/
class SumByFactorsTest {
- static String solve(int[] numbers) {
- var sums = new TreeMap();
- for (var number : numbers) {
- for (var prime : NumberTheory.primeFactorsSet(Math.abs(number))) {
+ static String solve(final int[] numbers) {
+ final var sums = new TreeMap();
+ for (final var number : numbers) {
+ for (final var prime : NumberTheory.primeFactorsSet(Math.abs(number))) {
sums.merge(prime, number, Integer::sum);
}
}
- var result = new StringBuilder();
+ final var result = new StringBuilder();
sums.forEach((prime, sum) ->
result.append('(').append(prime).append(' ').append(sum).append(')'));
return result.toString();
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/TdaRationalTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/TdaRationalTest.java
index 659f2ab..834a491 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/TdaRationalTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/TdaRationalTest.java
@@ -20,8 +20,8 @@ record Fraction(int numerator, int denominator) {}
record Result(Fraction raw, Fraction simplified) {}
- static Result solve(Fraction a, char operator, Fraction b) {
- var raw = switch (operator) {
+ static Result solve(final Fraction a, final char operator, final Fraction b) {
+ final var raw = switch (operator) {
case '+' ->
new Fraction(
a.numerator() * b.denominator() + b.numerator() * a.denominator(),
@@ -34,11 +34,12 @@ static Result solve(Fraction a, char operator, Fraction b) {
case '/' -> new Fraction(a.numerator() * b.denominator(), b.numerator() * a.denominator());
default -> throw new IllegalArgumentException("Invalid operator: " + operator);
};
- var gcd = (int) NumberTheory.gcdLoop(Math.abs(raw.numerator()), Math.abs(raw.denominator()));
+ final var gcd = (int) NumberTheory.gcdLoop(Math.abs(raw.numerator()), Math.abs(raw.denominator()));
return new Result(raw, new Fraction(raw.numerator() / gcd, raw.denominator() / gcd));
}
- private static Result result(int rawNumerator, int rawDenominator, int numerator, int denominator) {
+ private static Result result(
+ final int rawNumerator, final int rawDenominator, final int numerator, final int denominator) {
return new Result(new Fraction(rawNumerator, rawDenominator), new Fraction(numerator, denominator));
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/TripleDoubleTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/TripleDoubleTest.java
index dbe8e47..6dcdb19 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/math/TripleDoubleTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/math/TripleDoubleTest.java
@@ -17,9 +17,9 @@
*/
class TripleDoubleTest {
- static int solve(long num1, long num2) {
- var a = Long.toString(num1);
- var b = Long.toString(num2);
+ static int solve(final long num1, final long num2) {
+ final var a = Long.toString(num1);
+ final var b = Long.toString(num2);
return IntStream.rangeClosed(0, 9)
.mapToObj(Integer::toString)
.anyMatch(d -> a.contains(d.repeat(3)) && b.contains(d.repeat(2)))
@@ -37,7 +37,7 @@ static int solve(long num1, long num2) {
"111, 22, 0",
"1112, 122, 0",
})
- void requiresTripleAndDoubleOfTheSameDigit(long num1, long num2, int expected) {
+ void requiresTripleAndDoubleOfTheSameDigit(final long num1, final long num2, final int expected) {
assertThat(solve(num1, num2)).isEqualTo(expected);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/recursion/CollatzConjectureTest.java b/src/test/java/io/github/diegourban/algorithms/problems/recursion/CollatzConjectureTest.java
index 42df6b3..d9d0daa 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/recursion/CollatzConjectureTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/recursion/CollatzConjectureTest.java
@@ -13,7 +13,7 @@
*/
class CollatzConjectureTest {
- static long solve(long x) {
+ static long solve(final long x) {
if (x == 1) {
return 1;
}
@@ -24,7 +24,7 @@ static long solve(long x) {
@CsvSource({
"1, 1", "2, 2", "3, 8", "30, 19", "27, 112", "100, 26", "103, 88",
})
- void countsSequenceLength(long x, long expected) {
+ void countsSequenceLength(final long x, final long expected) {
assertThat(solve(x)).isEqualTo(expected);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/recursion/RecursiveStringPermutationsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/recursion/RecursiveStringPermutationsTest.java
index 887303e..1a661a2 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/recursion/RecursiveStringPermutationsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/recursion/RecursiveStringPermutationsTest.java
@@ -16,14 +16,14 @@
*/
class RecursiveStringPermutationsTest {
- static Set solve(String input) {
+ static Set solve(final String input) {
if (input.length() <= 1) {
return Set.of(input);
}
- var allButLast = input.substring(0, input.length() - 1);
- var last = input.charAt(input.length() - 1);
- var permutations = new HashSet();
- for (var partial : solve(allButLast)) {
+ final var allButLast = input.substring(0, input.length() - 1);
+ final var last = input.charAt(input.length() - 1);
+ final var permutations = new HashSet();
+ for (final var partial : solve(allButLast)) {
for (var position = 0; position <= allButLast.length(); position++) {
permutations.add(partial.substring(0, position) + last + partial.substring(position));
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/recursion/SquareRootOfTwoTest.java b/src/test/java/io/github/diegourban/algorithms/problems/recursion/SquareRootOfTwoTest.java
index 156c50d..16dca37 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/recursion/SquareRootOfTwoTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/recursion/SquareRootOfTwoTest.java
@@ -18,11 +18,11 @@
*/
class SquareRootOfTwoTest {
- static double solve(int n) {
+ static double solve(final int n) {
return 1 + tail(n);
}
- private static double tail(int n) {
+ private static double tail(final int n) {
return n == 0 ? 0 : 1 / (2 + tail(n - 1));
}
@@ -33,13 +33,13 @@ private static double tail(int n) {
"5, 1.4142857143",
"100, 1.4142135624",
})
- void approximatesSquareRootOfTwoToTenDecimals(int n, String expected) {
+ void approximatesSquareRootOfTwoToTenDecimals(final int n, final String expected) {
assertThat(String.format(Locale.ROOT, "%.10f", solve(n))).isEqualTo(expected);
}
@ParameterizedTest
@ValueSource(ints = {20, 100})
- void convergesToSquareRootOfTwo(int n) {
+ void convergesToSquareRootOfTwo(final int n) {
assertThat(solve(n)).isCloseTo(Math.sqrt(2), offset(1e-12));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/search/FindRepeatTest.java b/src/test/java/io/github/diegourban/algorithms/problems/search/FindRepeatTest.java
index 08eb636..c9d57bb 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/search/FindRepeatTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/search/FindRepeatTest.java
@@ -14,18 +14,18 @@
*/
class FindRepeatTest {
- static int solve(int[] numbers) {
+ static int solve(final int[] numbers) {
var floor = 1;
var ceiling = numbers.length - 1;
while (floor < ceiling) {
- var midpoint = floor + (ceiling - floor) / 2;
+ final var midpoint = floor + (ceiling - floor) / 2;
var itemsInLowerRange = 0;
- for (var item : numbers) {
+ for (final var item : numbers) {
if (item >= floor && item <= midpoint) {
itemsInLowerRange++;
}
}
- var distinctInLowerRange = midpoint - floor + 1;
+ final var distinctInLowerRange = midpoint - floor + 1;
if (itemsInLowerRange > distinctInLowerRange) {
ceiling = midpoint;
} else {
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/search/FindRotationPointTest.java b/src/test/java/io/github/diegourban/algorithms/problems/search/FindRotationPointTest.java
index 803c12f..c1f945d 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/search/FindRotationPointTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/search/FindRotationPointTest.java
@@ -14,15 +14,15 @@
*/
class FindRotationPointTest {
- static int solve(String[] words) {
- var firstWord = words[0];
+ static int solve(final String[] words) {
+ final var firstWord = words[0];
if (firstWord.compareTo(words[words.length - 1]) <= 0) {
return 0; // not rotated (or a single word): the first word is already the earliest
}
var floorIndex = 0;
var ceilingIndex = words.length - 1;
while (floorIndex + 1 < ceilingIndex) {
- var guessIndex = floorIndex + (ceilingIndex - floorIndex) / 2;
+ final var guessIndex = floorIndex + (ceilingIndex - floorIndex) / 2;
if (words[guessIndex].compareTo(firstWord) >= 0) {
floorIndex = guessIndex;
} else {
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/search/TwoBillsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/search/TwoBillsTest.java
index a600847..a21e61b 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/search/TwoBillsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/search/TwoBillsTest.java
@@ -27,8 +27,8 @@ class TwoBillsTest {
private final SampleLoader samples = new SampleLoader("problems/search/two-bills");
- static boolean solve(int price, int paid) {
- var change = paid - price;
+ static boolean solve(final int price, final int paid) {
+ final var change = paid - price;
for (var i = 0; i < BILLS.length; i++) {
for (var j = i; j < BILLS.length; j++) {
if (BILLS[i] + BILLS[j] == change) {
@@ -39,9 +39,9 @@ static boolean solve(int price, int paid) {
return false;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var out = new StringBuilder();
for (int price = reader.nextInt(), paid = reader.nextInt();
price != 0 || paid != 0;
price = reader.nextInt(), paid = reader.nextInt()) {
@@ -58,7 +58,7 @@ static String run(InputStream in) throws IOException {
"1, 5",
"0, 200",
})
- void changeMadeOfTwoBillsIsPossible(int price, int paid) {
+ void changeMadeOfTwoBillsIsPossible(final int price, final int paid) {
assertThat(solve(price, paid)).isTrue();
}
@@ -71,7 +71,7 @@ void changeMadeOfTwoBillsIsPossible(int price, int paid) {
"5, 5",
"0, 201",
})
- void otherChangeIsImpossible(int price, int paid) {
+ void otherChangeIsImpossible(final int price, final int paid) {
assertThat(solve(price, paid)).isFalse();
}
@@ -83,7 +83,7 @@ void zeroZeroEndsTheInput() throws IOException {
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void samples(String name) throws IOException {
+ void samples(final String name) throws IOException {
assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/simulation/MaestersMapTest.java b/src/test/java/io/github/diegourban/algorithms/problems/simulation/MaestersMapTest.java
index d510a9a..a4d0523 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/simulation/MaestersMapTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/simulation/MaestersMapTest.java
@@ -25,16 +25,16 @@ class MaestersMapTest {
private final SampleLoader samples = new SampleLoader("problems/simulation/maesters-map");
- static boolean solve(List rows) {
- var height = rows.size();
- var width = height == 0 ? 0 : rows.getFirst().length();
- var usedArrows = new boolean[height][width];
+ static boolean solve(final List rows) {
+ final var height = rows.size();
+ final var width = height == 0 ? 0 : rows.getFirst().length();
+ final var usedArrows = new boolean[height][width];
var row = 0;
var col = 0;
var dRow = 0;
var dCol = 0;
while (row >= 0 && row < height && col >= 0 && col < width) {
- var cell = rows.get(row).charAt(col);
+ final var cell = rows.get(row).charAt(col);
if (cell == '*') {
return true;
}
@@ -63,11 +63,11 @@ static boolean solve(List rows) {
return false;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var width = reader.nextInt();
- var height = reader.nextInt();
- var rows = new ArrayList(height);
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var width = reader.nextInt();
+ final var height = reader.nextInt();
+ final var rows = new ArrayList(height);
for (var i = 0; i < height; i++) {
rows.add(reader.readLine().substring(0, width));
}
@@ -101,7 +101,7 @@ void walkingOffTheMapIsAFailure() {
"sampleFindChest1", "sampleFindChest2", "sampleFindChest3",
"sampleFindChest4", "sampleFindChest5", "sampleFindChest6",
})
- void samplesThatReachTheChest(String name) throws IOException {
+ void samplesThatReachTheChest(final String name) throws IOException {
assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo("*\n");
}
@@ -111,7 +111,7 @@ void samplesThatReachTheChest(String name) throws IOException {
"sampleLoop1", "sampleLoop2", "sampleLoop3", "sampleLoop4",
"sampleOutOfBounds1", "sampleOutOfBounds2", "sampleOutOfBounds3", "sampleOutOfBounds4",
})
- void samplesThatLoopOrLeaveTheMap(String name) throws IOException {
+ void samplesThatLoopOrLeaveTheMap(final String name) throws IOException {
assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo("!\n");
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/simulation/StarTrekTest.java b/src/test/java/io/github/diegourban/algorithms/problems/simulation/StarTrekTest.java
index c85ab5c..711514b 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/simulation/StarTrekTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/simulation/StarTrekTest.java
@@ -26,20 +26,20 @@ class StarTrekTest {
record Raid(int starsAttacked, long sheepLeft) {}
- static Raid solve(int[] sheep) {
- var left = sheep.clone();
- var attacked = new boolean[left.length];
+ static Raid solve(final int[] sheep) {
+ final var left = sheep.clone();
+ final var attacked = new boolean[left.length];
var star = 0;
while (star >= 0 && star < left.length) {
attacked[star] = true;
- var odd = left[star] % 2 == 1;
+ final var odd = left[star] % 2 == 1;
if (left[star] > 0) {
left[star]--;
}
star += odd ? 1 : -1;
}
var starsAttacked = 0;
- for (var a : attacked) {
+ for (final var a : attacked) {
if (a) {
starsAttacked++;
}
@@ -47,13 +47,13 @@ static Raid solve(int[] sheep) {
return new Raid(starsAttacked, Arrays.stream(left).asLongStream().sum());
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var sheep = new int[reader.nextInt()];
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var sheep = new int[reader.nextInt()];
for (var i = 0; i < sheep.length; i++) {
sheep[i] = reader.nextInt();
}
- var raid = solve(sheep);
+ final var raid = solve(sheep);
return raid.starsAttacked() + " " + raid.sheepLeft() + "\n";
}
@@ -97,7 +97,7 @@ void judgeSamples() {
"max2, 16000 15999968000",
"max3, 8000 15999968002",
})
- void maxSamples(String name, String expected) throws IOException {
+ void maxSamples(final String name, final String expected) throws IOException {
assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(expected + "\n");
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/sorting/FindTheOddIntTest.java b/src/test/java/io/github/diegourban/algorithms/problems/sorting/FindTheOddIntTest.java
index 0158c7d..4cccbc1 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/sorting/FindTheOddIntTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/sorting/FindTheOddIntTest.java
@@ -17,8 +17,8 @@
*/
class FindTheOddIntTest {
- static int solve(int[] numbers) {
- var sorted = numbers.clone();
+ static int solve(final int[] numbers) {
+ final var sorted = numbers.clone();
new MergeSort().sort(sorted);
var runStart = 0;
for (var i = 1; i <= sorted.length; i++) {
@@ -61,7 +61,7 @@ void answerIsTheSmallestValue() {
@Test
void doesNotMutateInput() {
- var numbers = new int[] {3, 1, 3};
+ final var numbers = new int[] {3, 1, 3};
solve(numbers);
assertThat(numbers).containsExactly(3, 1, 3);
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/ContractRevisionTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/ContractRevisionTest.java
index 65735d0..69ff3b2 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/string/ContractRevisionTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/string/ContractRevisionTest.java
@@ -22,9 +22,9 @@ class ContractRevisionTest {
private static final SampleLoader SAMPLES = new SampleLoader("problems/string/contract-revision");
- static String solve(char faultyDigit, String number) {
- var kept = new StringBuilder(number.length());
- for (var c : number.toCharArray()) {
+ static String solve(final char faultyDigit, final String number) {
+ final var kept = new StringBuilder(number.length());
+ for (final var c : number.toCharArray()) {
if (c != faultyDigit && !(c == '0' && kept.isEmpty())) {
kept.append(c);
}
@@ -32,11 +32,11 @@ static String solve(char faultyDigit, String number) {
return kept.isEmpty() ? "0" : kept.toString();
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var out = new StringBuilder();
for (var line = reader.readLine(); !line.equals("0 0"); line = reader.readLine()) {
- var parts = line.trim().split("\\s+");
+ final var parts = line.trim().split("\\s+");
out.append(solve(parts[0].charAt(0), parts[1])).append('\n');
}
return out.toString();
@@ -70,7 +70,7 @@ void handlesNumbersBeyondLongRange() {
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
+ void matchesSample(final String name) throws IOException {
assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/EncryptionTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/EncryptionTest.java
index e3b2c1a..115354f 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/string/EncryptionTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/string/EncryptionTest.java
@@ -22,22 +22,22 @@ class EncryptionTest {
private static final SampleLoader SAMPLES = new SampleLoader("problems/string/encryption");
- static String solve(String message) {
- var shifted = new StringBuilder(message.length());
- for (var c : message.toCharArray()) {
+ static String solve(final String message) {
+ final var shifted = new StringBuilder(message.length());
+ for (final var c : message.toCharArray()) {
shifted.append(Character.isLetter(c) ? (char) (c + 3) : c);
}
- var chars = shifted.reverse().toString().toCharArray();
+ final var chars = shifted.reverse().toString().toCharArray();
for (var i = chars.length / 2; i < chars.length; i++) {
chars[i]--;
}
return new String(chars);
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var n = reader.nextInt();
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var n = reader.nextInt();
+ final var out = new StringBuilder();
for (var i = 0; i < n; i++) {
out.append(solve(reader.readLine())).append('\n');
}
@@ -67,7 +67,7 @@ void oddLengthPutsMiddleCharacterInSecondHalf() {
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
+ void matchesSample(final String name) throws IOException {
assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/MorseTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/MorseTest.java
index 2d859fd..90685fe 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/string/MorseTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/string/MorseTest.java
@@ -21,7 +21,7 @@ class MorseTest {
"-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."
};
- static String solve(String code) {
+ static String solve(final String code) {
return Arrays.stream(code.split("\\.{7}"))
.map(word -> Arrays.stream(word.split("\\.{3}"))
.map(letter -> String.valueOf(decode(letter)))
@@ -29,8 +29,8 @@ static String solve(String code) {
.collect(Collectors.joining(" "));
}
- private static char decode(String letter) {
- var morse = Arrays.stream(letter.split("\\."))
+ private static char decode(final String letter) {
+ final var morse = Arrays.stream(letter.split("\\."))
.map(signal -> signal.equals("=") ? "." : "-")
.collect(Collectors.joining());
return (char) ('a' + Arrays.asList(MORSE).indexOf(morse));
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/OneTwoThreeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/OneTwoThreeTest.java
index 3baf9df..9e5f776 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/string/OneTwoThreeTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/string/OneTwoThreeTest.java
@@ -22,7 +22,7 @@ class OneTwoThreeTest {
private static final SampleLoader SAMPLES = new SampleLoader("problems/string/one-two-three");
- static int solve(String word) {
+ static int solve(final String word) {
if (hammingDistance(word, "one") <= 1) {
return 1;
}
@@ -32,7 +32,7 @@ static int solve(String word) {
return 3;
}
- private static int hammingDistance(String a, String b) {
+ private static int hammingDistance(final String a, final String b) {
if (a.length() != b.length()) {
return Integer.MAX_VALUE;
}
@@ -45,10 +45,10 @@ private static int hammingDistance(String a, String b) {
return distance;
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var n = reader.nextInt();
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var n = reader.nextInt();
+ final var out = new StringBuilder();
for (var i = 0; i < n; i++) {
out.append(solve(reader.readLine().trim())).append('\n');
}
@@ -75,7 +75,7 @@ void toleratesOneWrongLetterInAnyPosition() {
@ParameterizedTest
@ValueSource(strings = {"uri", "udebug"})
- void matchesSample(String name) throws IOException {
+ void matchesSample(final String name) throws IOException {
assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/ParenthesisMatchingTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/ParenthesisMatchingTest.java
index c04f74f..9450b32 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/string/ParenthesisMatchingTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/string/ParenthesisMatchingTest.java
@@ -15,7 +15,7 @@
*/
class ParenthesisMatchingTest {
- static int solve(String sentence, int openingParenthesisIndex) {
+ static int solve(final String sentence, final int openingParenthesisIndex) {
var openNested = 0;
for (var position = openingParenthesisIndex + 1; position < sentence.length(); position++) {
switch (sentence.charAt(position)) {
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/PlayingWithPassphrasesTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/PlayingWithPassphrasesTest.java
index fbc2caf..480490a 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/string/PlayingWithPassphrasesTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/string/PlayingWithPassphrasesTest.java
@@ -13,13 +13,13 @@
*/
class PlayingWithPassphrasesTest {
- static String solve(String text, int shift) {
- var out = new StringBuilder(text.length());
+ static String solve(final String text, final int shift) {
+ final var out = new StringBuilder(text.length());
for (var i = 0; i < text.length(); i++) {
- var c = text.charAt(i);
+ final var c = text.charAt(i);
if (Character.isLetter(c)) {
- var base = Character.isUpperCase(c) ? 'A' : 'a';
- var shifted = (char) (base + (c - base + shift) % 26);
+ final var base = Character.isUpperCase(c) ? 'A' : 'a';
+ final var shifted = (char) (base + (c - base + shift) % 26);
out.append(i % 2 == 0 ? Character.toUpperCase(shifted) : Character.toLowerCase(shifted));
} else if (Character.isDigit(c)) {
out.append((char) ('9' - c + '0'));
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/ReverseWordsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/ReverseWordsTest.java
index 909562d..b372bcf 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/string/ReverseWordsTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/string/ReverseWordsTest.java
@@ -14,8 +14,8 @@
*/
class ReverseWordsTest {
- static String solve(String message) {
- var chars = message.toCharArray();
+ static String solve(final String message) {
+ final var chars = message.toCharArray();
reverse(chars, 0, chars.length - 1);
var wordStart = 0;
for (var i = 0; i <= chars.length; i++) {
@@ -27,9 +27,9 @@ static String solve(String message) {
return new String(chars);
}
- private static void reverse(char[] chars, int start, int end) {
+ private static void reverse(final char[] chars, final int start, final int end) {
for (int front = start, back = end; front < back; front++, back--) {
- var tmp = chars[front];
+ final var tmp = chars[front];
chars[front] = chars[back];
chars[back] = tmp;
}
diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/SearchingSubsequencesTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/SearchingSubsequencesTest.java
index 8fe8e83..c6e22af 100644
--- a/src/test/java/io/github/diegourban/algorithms/problems/string/SearchingSubsequencesTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/problems/string/SearchingSubsequencesTest.java
@@ -26,7 +26,7 @@ class SearchingSubsequencesTest {
/** {@code count} occurrences, the last one starting at 1-based {@code lastPosition} (0 when none). */
record Occurrences(int count, int lastPosition) {}
- static Occurrences solve(String pattern, String text) {
+ static Occurrences solve(final String pattern, final String text) {
var count = 0;
var last = -1;
for (var i = text.indexOf(pattern); i != -1; i = text.indexOf(pattern, i + 1)) {
@@ -36,13 +36,13 @@ static Occurrences solve(String pattern, String text) {
return new Occurrences(count, last + 1);
}
- static String run(InputStream in) throws IOException {
- var reader = new Reader(in);
- var out = new StringBuilder();
+ static String run(final InputStream in) throws IOException {
+ final var reader = new Reader(in);
+ final var out = new StringBuilder();
var caseNumber = 0;
while (true) {
- String pattern;
- String text;
+ final String pattern;
+ final String text;
try {
pattern = reader.readLine();
text = reader.readLine();
@@ -52,7 +52,7 @@ static String run(InputStream in) throws IOException {
if (pattern.isEmpty() || text.isEmpty()) {
break;
}
- var result = solve(pattern, text);
+ final var result = solve(pattern, text);
out.append("Caso #").append(++caseNumber).append(":\n");
if (result.count() == 0) {
out.append("Nao existe subsequencia\n");
@@ -79,7 +79,7 @@ void singleOccurrenceReportsItsPosition() {
@Test
void patternEqualToText() {
- var number = "1" + "0".repeat(32);
+ final var number = "1" + "0".repeat(32);
assertThat(solve(number, number)).isEqualTo(new Occurrences(1, 1));
}
@@ -91,7 +91,7 @@ void overlappingOccurrencesAreCounted() {
@ParameterizedTest
@ValueSource(strings = {"uri"})
- void matchesSample(String name) throws IOException {
+ void matchesSample(final String name) throws IOException {
assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out"));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/search/BinarySearchPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/search/BinarySearchPropertyTest.java
index f27ce51..d2c70e8 100644
--- a/src/test/java/io/github/diegourban/algorithms/search/BinarySearchPropertyTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/search/BinarySearchPropertyTest.java
@@ -13,10 +13,10 @@
class BinarySearchPropertyTest {
@Property
- void agreesWithTheJdk(@ForAll int[] items, @ForAll int key) {
+ void agreesWithTheJdk(@ForAll final int[] items, @ForAll final int key) {
Arrays.sort(items);
- var index = BinarySearch.indexOf(items, key);
+ final var index = BinarySearch.indexOf(items, key);
if (Arrays.binarySearch(items, key) >= 0) {
assertThat(items[index]).isEqualTo(key);
@@ -26,10 +26,10 @@ void agreesWithTheJdk(@ForAll int[] items, @ForAll int key) {
}
@Property
- void findsEveryElementThatIsPresent(@ForAll int[] items) {
+ void findsEveryElementThatIsPresent(@ForAll final int[] items) {
Arrays.sort(items);
- for (var item : items) {
+ for (final var item : items) {
assertThat(items[BinarySearch.indexOf(items, item)]).isEqualTo(item);
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/sorting/SorterPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/sorting/SorterPropertyTest.java
index e70a9b1..6cbc02a 100644
--- a/src/test/java/io/github/diegourban/algorithms/sorting/SorterPropertyTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/sorting/SorterPropertyTest.java
@@ -20,8 +20,8 @@ Arbitrary sorters() {
}
@Property
- void agreesWithTheJdk(@ForAll("sorters") Sorter sorter, @ForAll int[] items) {
- var expected = items.clone();
+ void agreesWithTheJdk(@ForAll("sorters") final Sorter sorter, @ForAll final int[] items) {
+ final var expected = items.clone();
Arrays.sort(expected);
sorter.sort(items);
diff --git a/src/test/java/io/github/diegourban/algorithms/sorting/SorterTest.java b/src/test/java/io/github/diegourban/algorithms/sorting/SorterTest.java
index e5ec128..9486d22 100644
--- a/src/test/java/io/github/diegourban/algorithms/sorting/SorterTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/sorting/SorterTest.java
@@ -15,34 +15,34 @@ static Stream sorters() {
return Stream.of(new InsertionSort(), new SelectionSort(), new MergeSort(), new QuickSort());
}
- private static int[] sorted(Sorter sorter, int... items) {
+ private static int[] sorted(final Sorter sorter, final int... items) {
sorter.sort(items);
return items;
}
@ParameterizedTest
@MethodSource("sorters")
- void sortsEvenLengthInput(Sorter sorter) {
+ void sortsEvenLengthInput(final Sorter sorter) {
assertThat(sorted(sorter, 4, 5, 1, 9, 2, 3, 6, 7)).containsExactly(1, 2, 3, 4, 5, 6, 7, 9);
}
@ParameterizedTest
@MethodSource("sorters")
- void sortsOddLengthInput(Sorter sorter) {
+ void sortsOddLengthInput(final Sorter sorter) {
assertThat(sorted(sorter, 4, 1, 8, 9, 10, 2, 3, 7, 6)).containsExactly(1, 2, 3, 4, 6, 7, 8, 9, 10);
assertThat(sorted(sorter, 4, 5, 2, 9, 1, 7, 6, 3, 10)).containsExactly(1, 2, 3, 4, 5, 6, 7, 9, 10);
}
@ParameterizedTest
@MethodSource("sorters")
- void keepsDuplicatesAndNegatives(Sorter sorter) {
+ void keepsDuplicatesAndNegatives(final Sorter sorter) {
assertThat(sorted(sorter, 3, -1, 3, 0, -1, Integer.MIN_VALUE, Integer.MAX_VALUE))
.containsExactly(Integer.MIN_VALUE, -1, -1, 0, 3, 3, Integer.MAX_VALUE);
}
@ParameterizedTest
@MethodSource("sorters")
- void handlesTrivialInputs(Sorter sorter) {
+ void handlesTrivialInputs(final Sorter sorter) {
assertThat(sorted(sorter)).isEmpty();
assertThat(sorted(sorter, 42)).containsExactly(42);
assertThat(sorted(sorter, 1, 2, 3)).containsExactly(1, 2, 3);
diff --git a/src/test/java/io/github/diegourban/algorithms/string/StringUtilsPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/string/StringUtilsPropertyTest.java
index 09e7b28..0835b5d 100644
--- a/src/test/java/io/github/diegourban/algorithms/string/StringUtilsPropertyTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/string/StringUtilsPropertyTest.java
@@ -19,26 +19,27 @@
class StringUtilsPropertyTest {
@Property
- void isPalindromeAgreesWithReversing(@ForAll @AlphaChars @NotEmpty @StringLength(max = 20) String s) {
- var reversed = new StringBuilder(s).reverse().toString();
+ void isPalindromeAgreesWithReversing(@ForAll @AlphaChars @NotEmpty @StringLength(max = 20) final String s) {
+ final var reversed = new StringBuilder(s).reverse().toString();
assertThat(StringUtils.isPalindrome(s)).isEqualTo(s.equals(reversed));
}
@Property
void mirroredStringsArePalindromes(
- @ForAll @AlphaChars @NotEmpty @StringLength(max = 20) String s, @ForAll @AlphaChars char middle) {
- var reversed = new StringBuilder(s).reverse().toString();
+ @ForAll @AlphaChars @NotEmpty @StringLength(max = 20) final String s,
+ @ForAll @AlphaChars final char middle) {
+ final var reversed = new StringBuilder(s).reverse().toString();
assertThat(StringUtils.isPalindrome(s + reversed)).isTrue();
assertThat(StringUtils.isPalindrome(s + middle + reversed)).isTrue();
}
@Property
- void aShuffleIsAnAnagram(@ForAll @AlphaChars String s, @ForAll long seed) {
- var chars = s.chars().mapToObj(c -> (char) c).collect(Collectors.toCollection(ArrayList::new));
+ void aShuffleIsAnAnagram(@ForAll @AlphaChars final String s, @ForAll final long seed) {
+ final var chars = s.chars().mapToObj(c -> (char) c).collect(Collectors.toCollection(ArrayList::new));
Collections.shuffle(chars, new Random(seed));
- var shuffled = chars.stream().map(String::valueOf).collect(Collectors.joining());
+ final var shuffled = chars.stream().map(String::valueOf).collect(Collectors.joining());
assertThat(StringUtils.isAnagram(s, shuffled)).isTrue();
assertThat(StringUtils.isAnagram(s.toUpperCase(), shuffled.toLowerCase()))
@@ -47,11 +48,12 @@ void aShuffleIsAnAnagram(@ForAll @AlphaChars String s, @ForAll long seed) {
@Property
void isAnagramAgreesWithLetterCounts(
- @ForAll @AlphaChars @StringLength(max = 6) String a, @ForAll @AlphaChars @StringLength(max = 6) String b) {
+ @ForAll @AlphaChars @StringLength(max = 6) final String a,
+ @ForAll @AlphaChars @StringLength(max = 6) final String b) {
assertThat(StringUtils.isAnagram(a, b)).isEqualTo(letterCounts(a).equals(letterCounts(b)));
}
- private static java.util.Map letterCounts(String s) {
+ private static java.util.Map letterCounts(final String s) {
return s.toLowerCase().chars().boxed().collect(Collectors.groupingBy(c -> c, Collectors.counting()));
}
}
diff --git a/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilder.java b/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilder.java
index d86d5d6..f58bb93 100644
--- a/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilder.java
+++ b/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilder.java
@@ -14,42 +14,42 @@ public SampleBuilder() {
this.stringBuilder = new StringBuilder();
}
- public SampleBuilder append(int i) {
+ public SampleBuilder append(final int i) {
this.stringBuilder.append(i).append(SPACE_SEPARATOR);
return this;
}
- public SampleBuilder appendln(int i) {
+ public SampleBuilder appendln(final int i) {
this.stringBuilder.append(i).append(LINE_SEPARATOR);
return this;
}
- public SampleBuilder append(double d) {
+ public SampleBuilder append(final double d) {
this.stringBuilder.append(d).append(SPACE_SEPARATOR);
return this;
}
- public SampleBuilder appendln(double d) {
+ public SampleBuilder appendln(final double d) {
this.stringBuilder.append(d).append(LINE_SEPARATOR);
return this;
}
- public SampleBuilder append(long l) {
+ public SampleBuilder append(final long l) {
this.stringBuilder.append(l).append(SPACE_SEPARATOR);
return this;
}
- public SampleBuilder appendln(long l) {
+ public SampleBuilder appendln(final long l) {
this.stringBuilder.append(l).append(LINE_SEPARATOR);
return this;
}
- public SampleBuilder append(String str) {
+ public SampleBuilder append(final String str) {
this.stringBuilder.append(str).append(SPACE_SEPARATOR);
return this;
}
- public SampleBuilder appendln(String str) {
+ public SampleBuilder appendln(final String str) {
this.stringBuilder.append(str).append(LINE_SEPARATOR);
return this;
}
diff --git a/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilderTest.java b/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilderTest.java
index d4c5f78..e56d7e3 100644
--- a/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilderTest.java
+++ b/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilderTest.java
@@ -27,37 +27,37 @@ void shouldCreateInstance() {
@Test
void shouldBuildEmptyString() {
- String sample = this.sampleBuilder.build();
+ final String sample = this.sampleBuilder.build();
assertThat(sample).isEmpty();
}
@Test
void shouldAppendInteger() {
- String sample = this.sampleBuilder.append(7).build();
+ final String sample = this.sampleBuilder.append(7).build();
assertThat(sample).isEqualTo("7");
}
@Test
void shouldAppendDouble() {
- String sample = this.sampleBuilder.append(1.2).build();
+ final String sample = this.sampleBuilder.append(1.2).build();
assertThat(sample).isEqualTo("1.2");
}
@Test
void shouldAppendLong() {
- String sample = this.sampleBuilder.append(123456789L).build();
+ final String sample = this.sampleBuilder.append(123456789L).build();
assertThat(sample).isEqualTo("123456789");
}
@Test
void shouldAppendString() {
- String sample = this.sampleBuilder.append("uyag s67a sdt1").build();
+ final String sample = this.sampleBuilder.append("uyag s67a sdt1").build();
assertThat(sample).isEqualTo("uyag s67a sdt1");
}
@Test
void shouldAppendAllTypes() {
- String sample = this.sampleBuilder
+ final String sample = this.sampleBuilder
.append(123)
.append(9.9)
.append(9876543210L)
@@ -68,63 +68,65 @@ void shouldAppendAllTypes() {
@Test
void shouldAppendTwoIntegerLines() {
- String sample = this.sampleBuilder.appendln(786).append(1).build();
+ final String sample = this.sampleBuilder.appendln(786).append(1).build();
- String expected = "786" + System.lineSeparator() + "1";
+ final String expected = "786" + System.lineSeparator() + "1";
assertThat(sample).isEqualTo(expected);
}
@Test
void shouldAppendTwoDoubleLines() {
- String sample = this.sampleBuilder.appendln(2.34).append(.1).build();
+ final String sample = this.sampleBuilder.appendln(2.34).append(.1).build();
- String expected = "2.34" + System.lineSeparator() + "0.1";
+ final String expected = "2.34" + System.lineSeparator() + "0.1";
assertThat(sample).isEqualTo(expected);
}
@Test
void shouldAppendTwoLongLines() {
- String sample =
+ final String sample =
this.sampleBuilder.appendln(123987123987L).append(1122334455L).build();
- String expected = "123987123987" + System.lineSeparator() + "1122334455";
+ final String expected = "123987123987" + System.lineSeparator() + "1122334455";
assertThat(sample).isEqualTo(expected);
}
@Test
void shouldAppendTwoStringLines() {
- String sample = this.sampleBuilder.appendln("abc").append("zz1").build();
+ final String sample = this.sampleBuilder.appendln("abc").append("zz1").build();
- String expected = "abc" + System.lineSeparator() + "zz1";
+ final String expected = "abc" + System.lineSeparator() + "zz1";
assertThat(sample).isEqualTo(expected);
}
@Test
void shouldAppendTwoLines() {
- String sample = this.sampleBuilder.appendln(786).append("chihuahua").build();
+ final String sample =
+ this.sampleBuilder.appendln(786).append("chihuahua").build();
- String expected = "786" + System.lineSeparator() + "chihuahua";
+ final String expected = "786" + System.lineSeparator() + "chihuahua";
assertThat(sample).isEqualTo(expected);
}
@Test
void shouldAppendTwoLinesWithNewLineAtTheEnd() {
- String sample = this.sampleBuilder.appendln(1.2).appendln("muchacho").build();
+ final String sample =
+ this.sampleBuilder.appendln(1.2).appendln("muchacho").build();
- String expected = "1.2" + System.lineSeparator() + "muchacho" + System.lineSeparator();
+ final String expected = "1.2" + System.lineSeparator() + "muchacho" + System.lineSeparator();
assertThat(sample).isEqualTo(expected);
}
@Test
void shouldAppendFourLinesOneTypeEach() {
- String sample = this.sampleBuilder
+ final String sample = this.sampleBuilder
.appendln(123)
.appendln(987654321L)
.appendln(99.99)
.appendln("end")
.build();
- String expected = "123" + System.lineSeparator() + "987654321" + System.lineSeparator() + "99.99"
+ final String expected = "123" + System.lineSeparator() + "987654321" + System.lineSeparator() + "99.99"
+ System.lineSeparator() + "end" + System.lineSeparator();
assertThat(sample).isEqualTo(expected);
}
diff --git a/src/test/java/io/github/diegourban/algorithms/testing/SampleLoader.java b/src/test/java/io/github/diegourban/algorithms/testing/SampleLoader.java
index c43d640..45e0188 100644
--- a/src/test/java/io/github/diegourban/algorithms/testing/SampleLoader.java
+++ b/src/test/java/io/github/diegourban/algorithms/testing/SampleLoader.java
@@ -15,12 +15,12 @@ public final class SampleLoader {
private final String resourceDir;
- public SampleLoader(String resourceDir) {
+ public SampleLoader(final String resourceDir) {
this.resourceDir = resourceDir.endsWith("/") ? resourceDir : resourceDir + "/";
}
- public String loadAsString(String fileName) {
- var path = resourceDir + fileName;
+ public String loadAsString(final String fileName) {
+ final var path = resourceDir + fileName;
try (var in = SampleLoader.class.getClassLoader().getResourceAsStream(path)) {
if (in == null) {
throw new IllegalArgumentException("Sample not found on classpath: " + path);
@@ -31,7 +31,7 @@ public String loadAsString(String fileName) {
}
}
- public InputStream loadAsInputStream(String fileName) {
+ public InputStream loadAsInputStream(final String fileName) {
return new ByteArrayInputStream(loadAsString(fileName).getBytes(StandardCharsets.UTF_8));
}
}