trackler 2.0.6.25 → 2.0.6.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/nucleotide-count/canonical-data.json +44 -0
  3. data/common/exercises/scrabble-score/canonical-data.json +5 -0
  4. data/lib/trackler/version.rb +1 -1
  5. data/tracks/c/exercises/gigasecond/test/test_gigasecond.c +1 -1
  6. data/tracks/c/exercises/grains/src/example.c +4 -0
  7. data/tracks/c/exercises/grains/test/test_grains.c +12 -0
  8. data/tracks/csharp/exercises/error-handling/ErrorHandlingTest.cs +5 -5
  9. data/tracks/delphi/SETUP.md +1 -1
  10. data/tracks/fsharp/exercises/food-chain/HINTS.md +2 -0
  11. data/tracks/fsharp/exercises/house/HINTS.md +2 -0
  12. data/tracks/fsharp/exercises/proverb/HINTS.md +2 -0
  13. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +6 -1
  14. data/tracks/fsharp/exercises/twelve-days/HINTS.md +2 -0
  15. data/tracks/haskell/config.json +60 -0
  16. data/tracks/java/config.json +6 -0
  17. data/tracks/java/exercises/clock/build.gradle +17 -0
  18. data/tracks/java/exercises/clock/src/example/java/Clock.java +49 -0
  19. data/tracks/java/exercises/clock/src/main/java/.keep +0 -0
  20. data/tracks/java/exercises/clock/src/test/java/ClockAddTest.java +135 -0
  21. data/tracks/java/exercises/clock/src/test/java/ClockCreationTest.java +120 -0
  22. data/tracks/java/exercises/clock/src/test/java/ClockEqualTest.java +98 -0
  23. data/tracks/java/exercises/grade-school/build.gradle +1 -0
  24. data/tracks/java/exercises/grade-school/src/test/java/SchoolTest.java +39 -28
  25. data/tracks/java/exercises/settings.gradle +1 -0
  26. data/tracks/javascript/exercises/rna-transcription/example.js +1 -0
  27. data/tracks/javascript/exercises/rna-transcription/rna-transcription.spec.js +12 -0
  28. data/tracks/rust/config.json +41 -41
  29. metadata +13 -2
@@ -58,6 +58,7 @@
58
58
  "sublist",
59
59
  "rectangles",
60
60
  "matrix",
61
+ "clock",
61
62
  "diamond",
62
63
  "secret-handshake",
63
64
  "flatten-array"
@@ -333,6 +334,11 @@
333
334
  "difficulty": 1,
334
335
  "topics": []
335
336
  },
337
+ {
338
+ "slug": "clock",
339
+ "difficulty": 1,
340
+ "topics": []
341
+ },
336
342
  {
337
343
  "slug": "diamond",
338
344
  "difficulty": 1,
@@ -0,0 +1,17 @@
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.12"
11
+ }
12
+ test {
13
+ testLogging {
14
+ exceptionFormat = 'full'
15
+ events = ["passed", "failed", "skipped"]
16
+ }
17
+ }
@@ -0,0 +1,49 @@
1
+ public class Clock {
2
+ private static final int MINUTES_IN_AN_HOUR = 60;
3
+ private static final int HOURS_IN_A_DAY = 24;
4
+
5
+ private int hours;
6
+ private int minutes;
7
+
8
+ public Clock(int hours, int minutes) {
9
+ this.hours = hours;
10
+ this.minutes = minutes;
11
+ sanitiseTime();
12
+ }
13
+
14
+ public void add(int minutes) {
15
+ this.minutes += minutes;
16
+ sanitiseTime();
17
+ }
18
+
19
+ private void sanitiseTime() {
20
+ while (minutes < 0) {
21
+ minutes += MINUTES_IN_AN_HOUR;
22
+ hours--;
23
+ }
24
+ while (hours < 0) {
25
+ hours += HOURS_IN_A_DAY;
26
+ }
27
+ int minutesOverflow = minutes / MINUTES_IN_AN_HOUR;
28
+ minutes = minutes % MINUTES_IN_AN_HOUR;
29
+ hours = (hours + minutesOverflow) % HOURS_IN_A_DAY;
30
+ }
31
+
32
+ @Override
33
+ public String toString() {
34
+ return toTimeString(hours) + ":" + toTimeString(minutes);
35
+ }
36
+
37
+ private String toTimeString(int number) {
38
+ if (number < 10) return "0" + number;
39
+ return String.valueOf(number);
40
+ }
41
+
42
+ @Override
43
+ public boolean equals(Object obj) {
44
+ if (!(obj instanceof Clock)) return false;
45
+
46
+ Clock clock = (Clock) obj;
47
+ return hours == clock.hours && minutes == clock.minutes;
48
+ }
49
+ }
@@ -0,0 +1,135 @@
1
+ import org.junit.Ignore;
2
+ import org.junit.Test;
3
+
4
+ import static org.junit.Assert.assertEquals;
5
+
6
+ public class ClockAddTest {
7
+
8
+ @Ignore
9
+ @Test
10
+ public void addMinutes() {
11
+ Clock clock = new Clock(10, 0);
12
+ clock.add(3);
13
+ assertEquals("10:03", clock.toString());
14
+ }
15
+
16
+ @Ignore
17
+ @Test
18
+ public void addNoMinutes() {
19
+ Clock clock = new Clock(6, 41);
20
+ clock.add(0);
21
+ assertEquals("06:41", clock.toString());
22
+ }
23
+
24
+ @Ignore
25
+ @Test
26
+ public void addToNextHour() {
27
+ Clock clock = new Clock(0, 45);
28
+ clock.add(40);
29
+ assertEquals("01:25", clock.toString());
30
+ }
31
+
32
+ @Ignore
33
+ @Test
34
+ public void addMoreThanOneHour() {
35
+ Clock clock = new Clock(10, 0);
36
+ clock.add(61);
37
+ assertEquals("11:01", clock.toString());
38
+ }
39
+
40
+ @Ignore
41
+ @Test
42
+ public void addMoreThanTwoHoursWithCarry() {
43
+ Clock clock = new Clock(0, 45);
44
+ clock.add(160);
45
+ assertEquals("03:25", clock.toString());
46
+ }
47
+
48
+ @Ignore
49
+ @Test
50
+ public void addAcrossMidnight() {
51
+ Clock clock = new Clock(23, 59);
52
+ clock.add(2);
53
+ assertEquals("00:01", clock.toString());
54
+ }
55
+
56
+ @Ignore
57
+ @Test
58
+ public void addMoreThanOneDay() {
59
+ Clock clock = new Clock(5, 32);
60
+ clock.add(1500);
61
+ assertEquals("06:32", clock.toString());
62
+ }
63
+
64
+ @Ignore
65
+ @Test
66
+ public void addMoreThanTwoDays() {
67
+ Clock clock = new Clock(1, 1);
68
+ clock.add(3500);
69
+ assertEquals("11:21", clock.toString());
70
+ }
71
+
72
+ @Ignore
73
+ @Test
74
+ public void subtractMinutes() {
75
+ Clock clock = new Clock(10, 3);
76
+ clock.add(-3);
77
+ assertEquals("10:00", clock.toString());
78
+ }
79
+
80
+ @Ignore
81
+ @Test
82
+ public void subtractToPreviousHour() {
83
+ Clock clock = new Clock(10, 3);
84
+ clock.add(-30);
85
+ assertEquals("09:33", clock.toString());
86
+ }
87
+
88
+ @Ignore
89
+ @Test
90
+ public void subtractMoreThanAnHour() {
91
+ Clock clock = new Clock(10, 3);
92
+ clock.add(-70);
93
+ assertEquals("08:53", clock.toString());
94
+ }
95
+
96
+ @Ignore
97
+ @Test
98
+ public void subtractAcrossMidnight() {
99
+ Clock clock = new Clock(0, 3);
100
+ clock.add(-4);
101
+ assertEquals("23:59", clock.toString());
102
+ }
103
+
104
+ @Ignore
105
+ @Test
106
+ public void subtractMoreThanTwoHours() {
107
+ Clock clock = new Clock(0, 0);
108
+ clock.add(-160);
109
+ assertEquals("21:20", clock.toString());
110
+ }
111
+
112
+ @Ignore
113
+ @Test
114
+ public void subtractMoreThanTwoHoursWithBorrow() {
115
+ Clock clock = new Clock(6, 15);
116
+ clock.add(-160);
117
+ assertEquals("03:35", clock.toString());
118
+ }
119
+
120
+ @Ignore
121
+ @Test
122
+ public void subtractMoreThanOneDay() {
123
+ Clock clock = new Clock(5, 32);
124
+ clock.add(-1500);
125
+ assertEquals("04:32", clock.toString());
126
+ }
127
+
128
+ @Ignore
129
+ @Test
130
+ public void subtractMoreThanTwoDays() {
131
+ Clock clock = new Clock(2, 20);
132
+ clock.add(-3000);
133
+ assertEquals("00:20", clock.toString());
134
+ }
135
+ }
@@ -0,0 +1,120 @@
1
+ import org.junit.Ignore;
2
+ import org.junit.Test;
3
+
4
+ import static org.junit.Assert.assertEquals;
5
+
6
+ public class ClockCreationTest {
7
+
8
+ @Test
9
+ public void canPrintTimeOnTheHour() {
10
+ assertEquals("08:00", new Clock(8, 0).toString());
11
+ }
12
+
13
+ @Ignore
14
+ @Test
15
+ public void canPrintTimeWithMinutes() {
16
+ assertEquals("11:09", new Clock(11, 9).toString());
17
+ }
18
+
19
+ @Ignore
20
+ @Test
21
+ public void midnightPrintsAsZero() {
22
+ assertEquals("00:00", new Clock(24, 0).toString());
23
+ }
24
+
25
+ @Ignore
26
+ @Test
27
+ public void hourRollsOver() {
28
+ assertEquals("01:00", new Clock(25, 0).toString());
29
+ }
30
+
31
+ @Ignore
32
+ @Test
33
+ public void hourRollsOverContinuously() {
34
+ assertEquals("04:00", new Clock(100, 0).toString());
35
+ }
36
+
37
+ @Ignore
38
+ @Test
39
+ public void sixtyMinutesIsNextHour() {
40
+ assertEquals("02:00", new Clock(1, 60).toString());
41
+ }
42
+
43
+ @Ignore
44
+ @Test
45
+ public void minutesRollOver() {
46
+ assertEquals("02:40", new Clock(0, 160).toString());
47
+ }
48
+
49
+ @Ignore
50
+ @Test
51
+ public void minutesRollOverContinuously() {
52
+ assertEquals("04:43", new Clock(0, 1723).toString());
53
+ }
54
+
55
+ @Ignore
56
+ @Test
57
+ public void hourAndMinutesRollOver() {
58
+ assertEquals("03:40", new Clock(25, 160).toString());
59
+ }
60
+
61
+ @Ignore
62
+ @Test
63
+ public void hourAndMinutesRollOverContinuously() {
64
+ assertEquals("11:01", new Clock(201, 3001).toString());
65
+ }
66
+
67
+ @Ignore
68
+ @Test
69
+ public void hourAndMinutesRollOverToExactlyMidnight() {
70
+ assertEquals("00:00", new Clock(72, 8640).toString());
71
+ }
72
+
73
+ @Ignore
74
+ @Test
75
+ public void negativeHour() {
76
+ assertEquals("23:15", new Clock(-1, 15).toString());
77
+ }
78
+
79
+ @Ignore
80
+ @Test
81
+ public void negativeHourRollsOver() {
82
+ assertEquals("23:00", new Clock(-25, 0).toString());
83
+ }
84
+
85
+ @Ignore
86
+ @Test
87
+ public void negativeHourRollsOverContinuously() {
88
+ assertEquals("05:00", new Clock(-91, 0).toString());
89
+ }
90
+
91
+ @Ignore
92
+ @Test
93
+ public void negativeMinutes() {
94
+ assertEquals("00:20", new Clock(1, -40).toString());
95
+ }
96
+
97
+ @Ignore
98
+ @Test
99
+ public void negativeMinutesRollOver() {
100
+ assertEquals("22:20", new Clock(1, -160).toString());
101
+ }
102
+
103
+ @Ignore
104
+ @Test
105
+ public void negativeMinutesRollOverContinuously() {
106
+ assertEquals("16:40", new Clock(1, -4820).toString());
107
+ }
108
+
109
+ @Ignore
110
+ @Test
111
+ public void negativeHourAndMinutesBothRollOver() {
112
+ assertEquals("20:20", new Clock(-25, -160).toString());
113
+ }
114
+
115
+ @Ignore
116
+ @Test
117
+ public void negativeHourAndMinutesBothRollOverContinuously() {
118
+ assertEquals("22:10", new Clock(-121, -5810).toString());
119
+ }
120
+ }
@@ -0,0 +1,98 @@
1
+ import org.junit.Ignore;
2
+ import org.junit.Test;
3
+
4
+ import static org.junit.Assert.assertFalse;
5
+ import static org.junit.Assert.assertTrue;
6
+
7
+ public class ClockEqualTest {
8
+
9
+ @Ignore
10
+ @Test
11
+ public void clocksWithSameTimeAreEqual() {
12
+ assertTrue(new Clock(15, 37).equals(new Clock(15, 37)));
13
+ }
14
+
15
+ @Ignore
16
+ @Test
17
+ public void clocksAMinuteApartAreNotEqual() {
18
+ assertFalse(new Clock(15, 36).equals(new Clock(15, 37)));
19
+ }
20
+
21
+ @Ignore
22
+ @Test
23
+ public void clocksAnHourApartAreNotEqual() {
24
+ assertFalse(new Clock(14, 37).equals(new Clock(15, 37)));
25
+ }
26
+
27
+ @Ignore
28
+ @Test
29
+ public void clocksWithHourOverflow() {
30
+ assertTrue(new Clock(10, 37).equals(new Clock(34, 37)));
31
+ }
32
+
33
+ @Ignore
34
+ @Test
35
+ public void clocksWithHourOverflowBySeveralDays() {
36
+ assertTrue(new Clock(3, 11).equals(new Clock(99, 11)));
37
+ }
38
+
39
+ @Ignore
40
+ @Test
41
+ public void clocksWithNegateHour() {
42
+ assertTrue(new Clock(22, 40).equals(new Clock(-2, 40)));
43
+ }
44
+
45
+ @Ignore
46
+ @Test
47
+ public void clocksWithNegativeHourThatWraps() {
48
+ assertTrue(new Clock(17, 3).equals(new Clock(-31, 3)));
49
+ }
50
+
51
+ @Ignore
52
+ @Test
53
+ public void clocksWithNegativeHourThatWrapsMultipleTimes() {
54
+ assertTrue(new Clock(13, 49).equals(new Clock(-83, 49)));
55
+ }
56
+
57
+ @Ignore
58
+ @Test
59
+ public void clocksWithMinuteOverflow() {
60
+ assertTrue(new Clock(0, 1).equals(new Clock(0, 1441)));
61
+ }
62
+
63
+ @Ignore
64
+ @Test
65
+ public void clocksWithMinuteOverflowBySeveralDays() {
66
+ assertTrue(new Clock(2, 2).equals(new Clock(2, 4322)));
67
+ }
68
+
69
+ @Ignore
70
+ @Test
71
+ public void clocksWithNegativeMinutes() {
72
+ assertTrue(new Clock(2, 40).equals(new Clock(3, -20)));
73
+ }
74
+
75
+ @Ignore
76
+ @Test
77
+ public void clocksWithNegativeMinutesThatWraps() {
78
+ assertTrue(new Clock(4, 10).equals(new Clock(5, -1490)));
79
+ }
80
+
81
+ @Ignore
82
+ @Test
83
+ public void clocksWithNegativeMinutesThatWrapsMultipleTimes() {
84
+ assertTrue(new Clock(6, 15).equals(new Clock(6, -4305)));
85
+ }
86
+
87
+ @Ignore
88
+ @Test
89
+ public void clocksWithNegativeHoursAndMinutes() {
90
+ assertTrue(new Clock(7, 32).equals(new Clock(-12, -268)));
91
+ }
92
+
93
+ @Ignore
94
+ @Test
95
+ public void clocksWithNegativeHoursAndMinutesThatWrap() {
96
+ assertTrue(new Clock(18, 7).equals(new Clock(-54, -11513)));
97
+ }
98
+ }
@@ -7,6 +7,7 @@ repositories {
7
7
  }
8
8
 
9
9
  dependencies {
10
+ testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '1.3'
10
11
  testCompile "junit:junit:4.12"
11
12
  }
12
13
  test {