diff --git a/src/main/java/koz01/java2/lab05/Point.java b/src/main/java/koz01/java2/lab05/Point.java index 978b02e053e63dda831deb09942f45919bcf7a51..7860b4754e8636dfe8ec4b3c0fbd8bfb53d1629b 100644 --- a/src/main/java/koz01/java2/lab05/Point.java +++ b/src/main/java/koz01/java2/lab05/Point.java @@ -6,22 +6,51 @@ public class Point { private double y; + public static Point getRandomPointWithDistanceFromOrigin(double distance) { + if (distance < 0.) { + // vyhod vyjimku IllegalArgumentException + throw new IllegalArgumentException("Distance " + distance + + " is negative"); + } + // x = dist*cos(alpha) + // y = dist*sin(alpha) + double alfa = Math.random() * 2 * Math.PI; + return new Point(distance * Math.cos(alfa), distance * Math.sin(alfa)); + } + public Point(double x, double y) { this.x = x; this.y = y; } + + public double distance(Point p) { + double dX = this.x - p.x; + double dY = this.y - p.y; + return Math.sqrt(dX * dX + dY * dY); + } + + /** + * resultHashCode := resultHashCode*31 + hashCode(attribute) + */ + @Override + public int hashCode() { + int resultHashCode = 1; + resultHashCode = resultHashCode * 31 + Double.hashCode(x); + resultHashCode = resultHashCode * 31 + Double.hashCode(y); + return resultHashCode; + } - @Override - public boolean equals(Object obj) { - if (obj instanceof Point) { - Point point = (Point) obj; - return point.canEqual(this) && point.x == x && point.y == y; + @Override + public boolean equals(Object obj) { + if (obj instanceof Point) { + Point point = (Point) obj; + return point.canEqual(this) && point.x == x && point.y == y; + } + return false; } - return false; - } - protected boolean canEqual(Point point) { - return true; - } + protected boolean canEqual(Point point) { + return true; + } } diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 9679efa707ab4d6729ca36e0c2bd8171b6c410ae..f60b5e8a3b8fe8d302a18878029de0474d4a990d 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,8 +1,9 @@ -module koz01.java2.lab04 { +module koz01.java2.lab05 { requires transitive javafx.controls; requires javafx.fxml; opens koz01.java2.lab05 to javafx.fxml; exports koz01.java2.lab05; requires lombok; + } \ No newline at end of file diff --git a/src/test/java/koz01/java2/lab05/TestPoint.java b/src/test/java/koz01/java2/lab05/TestPoint.java new file mode 100644 index 0000000000000000000000000000000000000000..a9fd733f4bfb927e9f6693e2488e658a0de1884a --- /dev/null +++ b/src/test/java/koz01/java2/lab05/TestPoint.java @@ -0,0 +1,61 @@ +package koz01.java2.lab05; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.jupiter.api.Test; + +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class TestPoint { + + @Test + public void testHashCode() { + Point p1 = new Point(2, 3); + Set<Point> points = new HashSet<>(); + points.add(p1); + assertTrue(points.contains(p1)); + + Point p2 = new Point(2, 3); + assertEquals(p1, p2); + + assertTrue(points.contains(p2)); + + assertFalse(points.contains(new Point(0, 0))); + } + + @Test + public void testPerf() { + Set<Point> points = new HashSet<>(); + + long startTime = System.currentTimeMillis(); + for (int i = 0; i < 10000; i++) { + points.add(new Point(i, i)); + } + assertTrue(points.contains(new Point(10, 10))); + long endTime = System.currentTimeMillis(); + log.info("duration = {} ms", endTime - startTime); + } + + @Test + public void testDistance() { + Point p1 = new Point(5, 6); + Point p2 = new Point(-7, 11); + assertEquals(13., p1.distance(p2)); + } + + @Test + public void testGenPoint() { + assertThrows(IllegalArgumentException.class, () -> Point + .getRandomPointWithDistanceFromOrigin(-1)); + + assertEquals(10, Point.getRandomPointWithDistanceFromOrigin(10).distance( + new Point(0, 0))); + } +}