Explorar el Código

Added exercise space-age (see #3)

Piet van Dongen hace 11 años
padre
commit
b78a0f2f40

+ 2
- 2
config.json Ver fichero

@@ -13,10 +13,10 @@
13 13
     "robot-name",
14 14
     "meetup",
15 15
     "phone-number",
16
-    "grade-school"
16
+    "grade-school",
17
+    "space-age"
17 18
   ],
18 19
   "deprecated": [
19
-
20 20
   ],
21 21
   "ignored": [
22 22
     "_template",

+ 11
- 0
space-age/build.gradle Ver fichero

@@ -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
+}

+ 69
- 0
space-age/example.java Ver fichero

@@ -0,0 +1,69 @@
1
+public class SpaceAge {
2
+
3
+    private enum Planet {
4
+        EARTH, MERCURY, VENUS, MARS, JUPITER, SATURN, URANUS, NEPTUNE
5
+    }
6
+
7
+    private double seconds;
8
+
9
+    private static final double EARTH_ORBITAL_PERIOD_IN_SECONDS = 31557600.0;
10
+    private static final int PRECISION = 2;
11
+    private static final Map<Planet, Double> relativeOrbitalPeriods = new HashMap<>();
12
+
13
+    static {
14
+        relativeOrbitalPeriods.put(Planet.EARTH, 1.0);
15
+        relativeOrbitalPeriods.put(Planet.MERCURY, 0.2408467);
16
+        relativeOrbitalPeriods.put(Planet.VENUS, 0.61519726);
17
+        relativeOrbitalPeriods.put(Planet.MARS, 1.8808158);
18
+        relativeOrbitalPeriods.put(Planet.JUPITER, 11.862615);
19
+        relativeOrbitalPeriods.put(Planet.SATURN, 29.447498);
20
+        relativeOrbitalPeriods.put(Planet.URANUS, 84.016846);
21
+        relativeOrbitalPeriods.put(Planet.NEPTUNE, 164.79132);
22
+    }
23
+
24
+    public SpaceAge(double seconds) {
25
+        this.seconds = seconds;
26
+    }
27
+
28
+    public double getSeconds() {
29
+        return seconds;
30
+    }
31
+
32
+    public double onEarth() {
33
+        return calculateAge(relativeOrbitalPeriods.get(Planet.EARTH));
34
+    }
35
+
36
+    public double onMercury() {
37
+        return calculateAge(relativeOrbitalPeriods.get(Planet.MERCURY));
38
+    }
39
+
40
+    public double onVenus() {
41
+        return calculateAge(relativeOrbitalPeriods.get(Planet.VENUS));
42
+    }
43
+
44
+    public double onMars() {
45
+        return calculateAge(relativeOrbitalPeriods.get(Planet.MARS));
46
+    }
47
+
48
+    public double onJupiter() {
49
+        return calculateAge(relativeOrbitalPeriods.get(Planet.JUPITER));
50
+    }
51
+
52
+    public double onSaturn() {
53
+        return calculateAge(relativeOrbitalPeriods.get(Planet.SATURN));
54
+    }
55
+
56
+    public double onUranus() {
57
+        return calculateAge(relativeOrbitalPeriods.get(Planet.URANUS));
58
+    }
59
+
60
+    public double onNeptune() {
61
+        return calculateAge(relativeOrbitalPeriods.get(Planet.NEPTUNE));
62
+    }
63
+
64
+    private double calculateAge(double relativeOrbitalPeriod) {
65
+        double age = seconds / (EARTH_ORBITAL_PERIOD_IN_SECONDS * relativeOrbitalPeriod);
66
+
67
+        return new BigDecimal(age).setScale(PRECISION, BigDecimal.ROUND_HALF_UP).doubleValue();
68
+    }
69
+}

+ 0
- 0
space-age/src/main/java/.keep Ver fichero


+ 2
- 0
space-age/src/main/java/SpaceAge.java Ver fichero

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

+ 76
- 0
space-age/src/test/java/SpaceAgeTest.java Ver fichero

@@ -0,0 +1,76 @@
1
+import org.junit.Test;
2
+
3
+public class SpaceAgeTest {
4
+
5
+    private static final double MAXIMUM_DELTA = 1E-02;
6
+
7
+    @Test
8
+    public void ageInSeconds() {
9
+        SpaceAge age = new SpaceAge(1000000);
10
+
11
+        assertEquals(age.getSeconds(), 1000000, MAXIMUM_DELTA);
12
+    }
13
+
14
+    @Test
15
+    public void ageOnEarth() {
16
+        SpaceAge age = new SpaceAge(1000000000);
17
+
18
+        assertEquals(age.onEarth(), 31.69, MAXIMUM_DELTA);
19
+    }
20
+
21
+    @Test
22
+    public void ageOnMercury() {
23
+        SpaceAge age = new SpaceAge(2134835688);
24
+
25
+        assertEquals(age.onEarth(), 67.65, MAXIMUM_DELTA);
26
+        assertEquals(age.onMercury(), 280.88, MAXIMUM_DELTA);
27
+    }
28
+
29
+    @Test
30
+    public void ageOnVenus() {
31
+        SpaceAge age = new SpaceAge(189839836);
32
+
33
+        assertEquals(age.onEarth(), 6.02, MAXIMUM_DELTA);
34
+        assertEquals(age.onVenus(), 9.78, MAXIMUM_DELTA);
35
+    }
36
+
37
+    @Test
38
+    public void ageOnMars() {
39
+        SpaceAge age = new SpaceAge(2329871239L);
40
+
41
+        assertEquals(age.onEarth(), 73.83, MAXIMUM_DELTA);
42
+        assertEquals(age.onMars(), 39.25, MAXIMUM_DELTA);
43
+    }
44
+
45
+    @Test
46
+    public void ageOnJupiter() {
47
+        SpaceAge age = new SpaceAge(901876382);
48
+
49
+        assertEquals(age.onEarth(), 28.58, MAXIMUM_DELTA);
50
+        assertEquals(age.onJupiter(), 2.41, MAXIMUM_DELTA);
51
+    }
52
+
53
+    @Test
54
+    public void ageOnSaturn() {
55
+        SpaceAge age = new SpaceAge(3000000000L);
56
+
57
+        assertEquals(age.onEarth(), 95.06, MAXIMUM_DELTA);
58
+        assertEquals(age.onSaturn(), 3.23, MAXIMUM_DELTA);
59
+    }
60
+
61
+    @Test
62
+    public void ageOnUranus() {
63
+        SpaceAge age = new SpaceAge(3210123456L);
64
+
65
+        assertEquals(age.onEarth(), 101.72, MAXIMUM_DELTA);
66
+        assertEquals(age.onUranus(), 1.21, MAXIMUM_DELTA);
67
+    }
68
+
69
+    @Test
70
+    public void ageOnNeptune() {
71
+        SpaceAge age = new SpaceAge(8210123456L);
72
+
73
+        assertEquals(age.onEarth(), 260.16, MAXIMUM_DELTA);
74
+        assertEquals(age.onNeptune(), 1.58, MAXIMUM_DELTA);
75
+    }
76
+}