diff --git a/src/main/java/koz01/java2/lab05/Point.java b/src/main/java/koz01/java2/lab05/Point.java
index 978b02e053e63dda831deb09942f45919bcf7a51..fc59966613e9ea8e6118c1683955b2770b447422 100644
--- a/src/main/java/koz01/java2/lab05/Point.java
+++ b/src/main/java/koz01/java2/lab05/Point.java
@@ -1,27 +1,63 @@
 package koz01.java2.lab05;
 
+import lombok.EqualsAndHashCode;
+
+
+
+@EqualsAndHashCode
 public class Point {
 
+	public static Point getPointWithDistanceFromOrigin(double distance) {
+		if (distance < 0) {
+			// IllegalArgumentException
+			throw new IllegalArgumentException("distance = " + distance +
+				" is negative");
+		}
+		// x = distance*cos(alfa)
+		// y = distance*sin(alfa)
+		double alfa = Math.random() * 2 * Math.PI;
+		return new Point(distance * Math.cos(alfa), distance * Math.sin(alfa));
+	}
+
 	private double x;
-	
 	private double y;
 
 	public Point(double x, double y) {
 		this.x = x;
 		this.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;
-	}
 
-	protected boolean canEqual(Point point) {
-		return true;
+	public double distance(Point p) {
+		double dx = p.x - x;
+		double dy = p.y - y;
+		return Math.sqrt(dx * dx + dy * dy);
 	}
 	
+	/*	
+		@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;
+		}
+	
+	
+		@Override
+		public int hashCode() {
+			int result = 1;
+			result = result * 31 + Double.hashCode(x);
+			result = result * 31 + Double.hashCode(y);
+			// TODO
+			// result = result * 31 + hash for attribute_n;
+	
+			return result;
+		}
+	
+		protected boolean canEqual(Point point) {
+			return true;
+		}
+		*/
+
 }
diff --git a/src/test/java/koz01/java2/lab05/Sample.java b/src/test/java/koz01/java2/lab05/Sample.java
new file mode 100644
index 0000000000000000000000000000000000000000..c6868c9468e3ab9a64165efeccbbea0379d2106d
--- /dev/null
+++ b/src/test/java/koz01/java2/lab05/Sample.java
@@ -0,0 +1,13 @@
+package koz01.java2.lab05;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+public class Sample {
+
+	@Test
+	public void testFoo() {
+		assertEquals(2, 1 + 1);
+	}
+}
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..fd11f7d1243ebe9cde6c6a7b6985131c9fa09b4e
--- /dev/null
+++ b/src/test/java/koz01/java2/lab05/TestPoint.java
@@ -0,0 +1,51 @@
+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(1, 2);
+		Set<Point> setOfPoint = new HashSet<>();
+		assertFalse(setOfPoint.contains(p1));
+		setOfPoint.add(p1);
+		assertTrue(setOfPoint.contains(p1));
+
+		Point p2 = new Point(1, 2);
+		log.info("p1.equals(p2) = {}", p1.equals(p2));
+		assertTrue(setOfPoint.contains(p2));
+	}
+
+	@Test
+	public void testPerf() {
+		long t_0 = System.currentTimeMillis();
+		Set<Point> setOfPoint = new HashSet<>();
+		for (int i = 0; i < 10000; i++) {
+			setOfPoint.add(new Point(i, i));
+		}
+		assertTrue(setOfPoint.contains(new Point(10, 10)));
+		long t_1 = System.currentTimeMillis();
+		log.info("duration = {} ms", t_1 - t_0);
+	}
+
+	@Test
+	public void testGenerate() {
+		assertThrows(IllegalArgumentException.class, () -> Point
+			.getPointWithDistanceFromOrigin(-1));
+
+		assertEquals(200, Point.getPointWithDistanceFromOrigin(200).distance(
+			new Point(0, 0)));
+	}
+}