Procházet zdrojové kódy

Added triangle exercise (see #3)

Piet van Dongen před 11 roky
rodič
revize
803348704a

+ 2
- 1
config.json Zobrazit soubor

@@ -15,7 +15,8 @@
15 15
     "phone-number",
16 16
     "grade-school",
17 17
     "space-age",
18
-    "gigasecond"
18
+    "gigasecond",
19
+    "triangle"
19 20
   ],
20 21
   "deprecated": [
21 22
   ],

+ 11
- 0
triangle/build.gradle Zobrazit soubor

@@ -0,0 +1,11 @@
1
+apply plugin: "java"
2
+apply plugin: "eclipse"
3
+apply plugin: "idea"
4
+
5
+repositories {
6
+  mavenCentral()
7
+}
8
+
9
+dependencies {
10
+  testCompile "junit:junit:4.10"
11
+}

+ 53
- 0
triangle/example.java Zobrazit soubor

@@ -0,0 +1,53 @@
1
+public class Triangle {
2
+
3
+    private double side1;
4
+    private double side2;
5
+    private double side3;
6
+
7
+    public Triangle(double side1, double side2, double side3) throws TriangleException {
8
+        this.side1 = side1;
9
+        this.side2 = side2;
10
+        this.side3 = side3;
11
+
12
+        if (allSidesAreZero() || hasImpossibleSides() || violatesTriangleInequality()) {
13
+            throw new TriangleException();
14
+        }
15
+    }
16
+
17
+    public TriangleKind getKind() {
18
+        int uniqueSides = getNumberOfUniqueSides();
19
+
20
+        if (uniqueSides == 1) {
21
+            return TriangleKind.EQUILATERAL;
22
+        }
23
+
24
+        if (uniqueSides == 2) {
25
+            return TriangleKind.ISOSCELES;
26
+        }
27
+
28
+        return TriangleKind.SCALENE;
29
+    }
30
+
31
+    private boolean allSidesAreZero() {
32
+        return side1 == 0 && side2 == 0 && side3 == 0;
33
+    }
34
+
35
+    private boolean hasImpossibleSides() {
36
+        return side1 < 0 || side2 < 0 || side3 < 0;
37
+    }
38
+
39
+    private boolean violatesTriangleInequality() {
40
+        return side1 + side2 <= side3 || side1 + side3 <= side2 || side2 + side3 <= side1;
41
+    }
42
+
43
+
44
+    public int getNumberOfUniqueSides() {
45
+        Set<Double> sides = new HashSet<>();
46
+
47
+        sides.add(side1);
48
+        sides.add(side2);
49
+        sides.add(side3);
50
+
51
+        return sides.size();
52
+    }
53
+}

+ 0
- 0
triangle/src/main/java/.keep Zobrazit soubor


+ 2
- 0
triangle/src/main/java/Triangle.java Zobrazit soubor

@@ -0,0 +1,2 @@
1
+public class Triangle {
2
+}

+ 5
- 0
triangle/src/main/java/TriangleException.java Zobrazit soubor

@@ -0,0 +1,5 @@
1
+public class TriangleException extends Exception {
2
+
3
+    public TriangleException() {
4
+    }
5
+}

+ 5
- 0
triangle/src/main/java/TriangleKind.java Zobrazit soubor

@@ -0,0 +1,5 @@
1
+public enum TriangleKind {
2
+    EQUILATERAL,
3
+    ISOSCELES,
4
+    SCALENE
5
+}

+ 101
- 0
triangle/src/test/java/TriangleTest.java Zobrazit soubor

@@ -0,0 +1,101 @@
1
+import org.junit.Test;
2
+
3
+import static org.junit.Assert.assertEquals;
4
+
5
+public class TriangleTest {
6
+
7
+    @Test
8
+    public void equilateralTriangleHaveEqualSides() throws Exception {
9
+        Triangle triangle = new Triangle(2, 2, 2);
10
+
11
+        assertEquals(triangle.getKind(), TriangleKind.EQUILATERAL);
12
+    }
13
+
14
+    @Test
15
+    public void largerEquilateralTrianglesAlsoHaveEqualSides() throws Exception {
16
+        Triangle triangle = new Triangle(10, 10, 10);
17
+
18
+        assertEquals(triangle.getKind(), TriangleKind.EQUILATERAL);
19
+    }
20
+
21
+    @Test
22
+    public void isoscelesTrianglesHaveLastTwoSidesEqual() throws Exception {
23
+        Triangle triangle = new Triangle(3, 4, 4);
24
+
25
+        assertEquals(triangle.getKind(), TriangleKind.ISOSCELES);
26
+    }
27
+
28
+    @Test
29
+    public void isoscelesTrianglesHaveFirstAndLastSidesEqual() throws Exception {
30
+        Triangle triangle = new Triangle(4, 3, 4);
31
+
32
+        assertEquals(triangle.getKind(), TriangleKind.ISOSCELES);
33
+    }
34
+
35
+    @Test
36
+    public void isoscelesTrianglesHaveTwoFirstSidesEqual() throws Exception {
37
+        Triangle triangle = new Triangle(4, 4, 3);
38
+
39
+        assertEquals(triangle.getKind(), TriangleKind.ISOSCELES);
40
+    }
41
+
42
+    @Test
43
+    public void isoscelesTrianglesHaveInFactExactlyTwoSidesEqual() throws Exception {
44
+        Triangle triangle = new Triangle(10, 10, 2);
45
+
46
+        assertEquals(triangle.getKind(), TriangleKind.ISOSCELES);
47
+    }
48
+
49
+    @Test
50
+    public void scaleneTrianglesHaveNoEqualSides() throws Exception {
51
+        Triangle triangle = new Triangle(3, 4, 5);
52
+
53
+        assertEquals(triangle.getKind(), TriangleKind.SCALENE);
54
+    }
55
+
56
+    @Test
57
+    public void scaleneTrianglesHaveNoEqualSidesAtLargerScaleEither() throws Exception {
58
+        Triangle triangle = new Triangle(10, 11, 12);
59
+
60
+        assertEquals(triangle.getKind(), TriangleKind.SCALENE);
61
+    }
62
+
63
+    @Test
64
+    public void scaleneTrianglesHaveNoEqualSidesInDescendingOrderEither() throws Exception {
65
+        Triangle triangle = new Triangle(5, 4, 2);
66
+
67
+        assertEquals(triangle.getKind(), TriangleKind.SCALENE);
68
+    }
69
+
70
+    @Test
71
+    public void verySmallTrianglesAreLegal() throws Exception {
72
+        Triangle triangle = new Triangle(0.4, 0.6, 0.3);
73
+
74
+        assertEquals(triangle.getKind(), TriangleKind.SCALENE);
75
+    }
76
+
77
+    @Test(expected = TriangleException.class)
78
+    public void trianglesWithNoSizeAreIllegal() throws Exception {
79
+        new Triangle(0, 0, 0);
80
+    }
81
+
82
+    @Test(expected = TriangleException.class)
83
+    public void trianglesWithNegativeSidesAreIllegal() throws Exception {
84
+        new Triangle(3, 4, -5);
85
+    }
86
+
87
+    @Test(expected = TriangleException.class)
88
+    public void trianglesViolatingTriangleInequalityAreIllegal() throws Exception {
89
+        new Triangle(1, 1, 3);
90
+    }
91
+
92
+    @Test(expected = TriangleException.class)
93
+    public void trianglesViolatingTriangleInequalityAreIllegal2() throws Exception {
94
+        new Triangle(2, 4, 2);
95
+    }
96
+
97
+    @Test(expected = TriangleException.class)
98
+    public void trianglesViolatingTriangleInequalityAreIllegal3() throws Exception {
99
+        new Triangle(7, 3, 2);
100
+    }
101
+}