Добрый день. Решил я тут отправить резюме в компанию N и выполнить их тестовое задание. Само задание
Есть интерфейс:
public interface Rtriangle {
int getApexX1();
int getApexY1();
int getApexX2();
int getApexY2();
int getApexX3();
int getApexY3();
}
Методы возвращают 6 чисел — координаты трех вершин прямоугольного треугольника в декартовой системе координат.
Есть метод, возвращающий прямоугольный треугольник:
public final class RtriangleProvider {
public static Rtriangle getRtriangle() {
...
}
}
Напишите код junit теста, который будет проверять, действительно ли метод
getRtriangle возвращает прямоугольный треугольник.
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mariarti.Rtriangle;
import org.mariarti.RtriangleProvider;
import java.util.*;
public class T_Rtriangle {
private Rtriangle rtriangle = RtriangleProvider.getRtriangle();
private int
x1 = rtriangle.getApexX1(),
y1 = rtriangle.getApexY1(),
x2 = rtriangle.getApexX2(),
y2 = rtriangle.getApexY2(),
x3 = rtriangle.getApexX3(),
y3 = rtriangle.getApexY3();
private double
sideTriangleA,
sideTriangleB,
sideTriangleC;
private final static double delta = 0.0000000001;
private List<Double> legs = new ArrayList<>();
@Before
public void initTest(){
legs.add(getLength(x1, y1, x2, y2));
legs.add(getLength(x2, y2, x3, y3));
legs.add(getLength(x3, y3, x1, y1));
Collections.sort(legs);
sideTriangleA = legs.get(0);
sideTriangleB = legs.get(1);
sideTriangleC = legs.get(2);
}
public double getLength(int x1, int y1, int x2, int y2){
return Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2));
}
@Test
public void ACosTest(){
double angleA = Math.acos(
(Math.pow(sideTriangleB, 2) + Math.pow(sideTriangleC, 2) - Math.pow(sideTriangleA, 2))
/ (2 * sideTriangleB * sideTriangleC));
double angleB = Math.acos(
(Math.pow(sideTriangleA, 2) + Math.pow(sideTriangleC, 2) - Math.pow(sideTriangleB, 2))
/ (2 * sideTriangleA * sideTriangleC));
double angleC = Math.acos(-1) - (angleA + angleB);
Assert.assertEquals(Math.acos(0), angleC, delta);
}
}