trackler 2.0.6.18 → 2.0.6.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/fsharp/exercises/linked-list/Example.fs +4 -4
  4. data/tracks/fsharp/exercises/linked-list/LinkedListTest.fs +19 -35
  5. data/tracks/go/config.json +5 -1
  6. data/tracks/java/exercises/settings.gradle +7 -7
  7. data/tracks/pascal/SETUP.md +10 -0
  8. data/tracks/pascal/exercises/book-store/uBookStoreTests.pas +247 -26
  9. data/tracks/pascal/exercises/phone-number/uPhoneNumberTests.pas +7 -1
  10. data/tracks/scala/config.json +18 -0
  11. data/tracks/scala/exercises/accumulate/build.sbt +2 -2
  12. data/tracks/scala/exercises/difference-of-squares/build.sbt +2 -2
  13. data/tracks/scala/exercises/etl/build.sbt +2 -2
  14. data/tracks/scala/exercises/grains/build.sbt +2 -2
  15. data/tracks/scala/exercises/leap/build.sbt +2 -2
  16. data/tracks/scala/exercises/robot-name/build.sbt +2 -2
  17. data/tracks/scala/exercises/scrabble-score/build.sbt +2 -2
  18. data/tracks/scala/exercises/scrabble-score/example.scala +1 -1
  19. data/tracks/scala/exercises/scrabble-score/src/test/scala/ScrabbleScoreTest.scala +7 -7
  20. data/tracks/scala/exercises/space-age/build.sbt +2 -2
  21. data/tracks/scala/exercises/space-age/src/test/scala/SpaceAgeTest.scala +1 -1
  22. data/tracks/swift/exercises/accumulate/Sources/{deleteme.swift → Accumulate.swift} +0 -0
  23. data/tracks/swift/exercises/acronym/Sources/{deleteme.swift → Acronym.swift} +0 -0
  24. data/tracks/swift/exercises/all-your-base/Sources/{deleteme.swift → AllYourBase.swift} +0 -0
  25. data/tracks/swift/exercises/allergies/Sources/{deleteme.swift → Allergies.swift} +0 -0
  26. data/tracks/swift/exercises/anagram/Sources/{deleteme.swift → Anagram.swift} +0 -0
  27. data/tracks/swift/exercises/atbash-cipher/Sources/{deleteme.swift → Atbash.swift} +0 -0
  28. data/tracks/swift/exercises/beer-song/Sources/{deleteme.swift → BeerSong.swift} +0 -0
  29. data/tracks/swift/exercises/binary-search-tree/Sources/{deleteme.swift → BinarySearchTree.swift} +0 -0
  30. data/tracks/swift/exercises/binary-search/Sources/{deleteme.swift → BinarySearch.swift} +0 -0
  31. data/tracks/swift/exercises/binary/Sources/{deleteme.swift → Binary.swift} +0 -0
  32. data/tracks/swift/exercises/bob/Sources/{deleteme.swift → Bob.swift} +0 -0
  33. data/tracks/swift/exercises/bowling/Sources/{deleteme.swift → Bowling.swift} +0 -0
  34. data/tracks/swift/exercises/bracket-push/Sources/{deleteme.swift → BracketPush.swift} +0 -0
  35. data/tracks/swift/exercises/clock/Sources/{deleteme.swift → Clock.swift} +0 -0
  36. data/tracks/swift/exercises/crypto-square/Sources/{deleteme.swift → CryptoSquare.swift} +0 -0
  37. data/tracks/swift/exercises/custom-set/Sources/{deleteme.swift → CustomSet.swift} +0 -0
  38. data/tracks/swift/exercises/difference-of-squares/Sources/{deleteme.swift → DifferenceOfSquares.swift} +0 -0
  39. data/tracks/swift/exercises/dominoes/Sources/{deleteme.swift → Dominoes.swift} +0 -0
  40. data/tracks/swift/exercises/etl/Sources/{deleteme.swift → Etl.swift} +0 -0
  41. data/tracks/swift/exercises/flatten-array/Sources/{deleteme.swift → FlattenArray.swift} +0 -0
  42. data/tracks/swift/exercises/food-chain/Sources/{deleteme.swift → FoodChain.swift} +0 -0
  43. data/tracks/swift/exercises/gigasecond/Sources/{deleteme.swift → Gigasecond.swift} +0 -0
  44. data/tracks/swift/exercises/grade-school/Sources/{deleteme.swift → GradeSchool.swift} +0 -0
  45. data/tracks/swift/exercises/grains/Sources/{deleteme.swift → Grains.swift} +0 -0
  46. data/tracks/swift/exercises/hamming/Sources/{deleteme.swift → Hamming.swift} +0 -0
  47. data/tracks/swift/exercises/hexadecimal/Sources/{deleteme.swift → Hexadecimal.swift} +0 -0
  48. data/tracks/swift/exercises/house/Sources/{deleteme.swift → House.swift} +0 -0
  49. data/tracks/swift/exercises/isogram/Sources/{deleteme.swift → Isogram.swift} +0 -0
  50. data/tracks/swift/exercises/kindergarten-garden/Sources/{deleteme.swift → KingergartenGarden.swift} +0 -0
  51. data/tracks/swift/exercises/largest-series-product/Sources/{deleteme.swift → LargestSeriesProduct.swift} +0 -0
  52. data/tracks/swift/exercises/leap/Sources/{deleteme.swift → Leap.swift} +0 -0
  53. data/tracks/swift/exercises/linked-list/Sources/{deleteme.swift → LinkedList.swift} +0 -0
  54. data/tracks/swift/exercises/luhn/Sources/{deleteme.swift → Luhn.swift} +0 -0
  55. data/tracks/swift/exercises/matrix/Sources/{deleteme.swift → Matrix.swift} +0 -0
  56. data/tracks/swift/exercises/meetup/Sources/{deleteme.swift → Meetup.swift} +0 -0
  57. data/tracks/swift/exercises/minesweeper/Sources/{deleteme.swift → Minesweeper.swift} +0 -0
  58. data/tracks/swift/exercises/nth-prime/Sources/{deleteme.swift → NthPrime.swift} +0 -0
  59. data/tracks/swift/exercises/nucleotide-count/Sources/{deleteme.swift → NucleotideCount.swift} +0 -0
  60. data/tracks/swift/exercises/ocr-numbers/Sources/{deleteme.swift → OcrNumbers.swift} +0 -0
  61. data/tracks/swift/exercises/octal/Sources/{deleteme.swift → Octal.swift} +0 -0
  62. data/tracks/swift/exercises/palindrome-products/Sources/{deleteme.swift → PalindromeProducts.swift} +0 -0
  63. data/tracks/swift/exercises/pangram/Sources/{deleteme.swift → Pangram.swift} +0 -0
  64. data/tracks/swift/exercises/pascals-triangle/Sources/{deleteme.swift → PascalsTriangle.swift} +0 -0
  65. data/tracks/swift/exercises/perfect-numbers/Sources/{deleteme.swift → PerfectNumbers.swift} +0 -0
  66. data/tracks/swift/exercises/phone-number/Sources/{deleteme.swift → PhoneNumber.swift} +0 -0
  67. data/tracks/swift/exercises/pig-latin/Sources/{deleteme.swift → PigLatin.swift} +0 -0
  68. data/tracks/swift/exercises/poker/Sources/{deleteme.swift → Poker.swift} +0 -0
  69. data/tracks/swift/exercises/prime-factors/Sources/{deleteme.swift → PrimeFactors.swift} +0 -0
  70. data/tracks/swift/exercises/pythagorean-triplet/Sources/{deleteme.swift → PythagoreanTriplet.swift} +0 -0
  71. data/tracks/swift/exercises/queen-attack/Sources/{deleteme.swift → QueenAttack.swift} +0 -0
  72. data/tracks/swift/exercises/raindrops/Sources/{deleteme.swift → Raindrops.swift} +0 -0
  73. data/tracks/swift/exercises/rna-transcription/Sources/{deleteme.swift → RnaTranscription.swift} +0 -0
  74. data/tracks/swift/exercises/robot-name/Sources/{deleteme.swift → RobotName.swift} +0 -0
  75. data/tracks/swift/exercises/robot-simulator/Sources/{deleteme.swift → RobotSimulator.swift} +0 -0
  76. data/tracks/swift/exercises/roman-numerals/Sources/{deleteme.swift → RomanNumerals.swift} +0 -0
  77. data/tracks/swift/exercises/run-length-encoding/Sources/{deleteme.swift → RunLengthEncoding.swift} +0 -0
  78. data/tracks/swift/exercises/saddle-points/Sources/{deleteme.swift → SaddlePoints.swift} +0 -0
  79. data/tracks/swift/exercises/scrabble-score/Sources/{deleteme.swift → ScrabbleScore.swift} +0 -0
  80. data/tracks/swift/exercises/secret-handshake/Sources/{deleteme.swift → SecretHandshake.swift} +0 -0
  81. data/tracks/swift/exercises/series/Sources/{deleteme.swift → Series.swift} +0 -0
  82. data/tracks/swift/exercises/sieve/Sources/{deleteme.swift → Sieve.swift} +0 -0
  83. data/tracks/swift/exercises/simple-cipher/Sources/{deleteme.swift → SimpleCipher.swift} +0 -0
  84. data/tracks/swift/exercises/simple-linked-list/Sources/{deleteme.swift → SimpleLinkedList.swift} +0 -0
  85. data/tracks/swift/exercises/space-age/Sources/{deleteme.swift → SpaceAge.swift} +0 -0
  86. data/tracks/swift/exercises/strain/Sources/{deleteme.swift → Strain.swift} +0 -0
  87. data/tracks/swift/exercises/sublist/Sources/{deleteme.swift → Sublist.swift} +0 -0
  88. data/tracks/swift/exercises/sum-of-multiples/Sources/{deleteme.swift → SumOfMultiples.swift} +0 -0
  89. data/tracks/swift/exercises/tournament/Sources/{deleteme.swift → Tournament.swift} +0 -0
  90. data/tracks/swift/exercises/transpose/Sources/{deleteme.swift → Transpose.swift} +0 -0
  91. data/tracks/swift/exercises/triangle/Sources/{deleteme.swift → Triangle.swift} +0 -0
  92. data/tracks/swift/exercises/trinary/Sources/{deleteme.swift → Trinary.swift} +0 -0
  93. data/tracks/swift/exercises/twelve-days/Sources/{deleteme.swift → TwelveDays.swift} +0 -0
  94. data/tracks/swift/exercises/word-count/Sources/{deleteme.swift → WordCount.swift} +0 -0
  95. data/tracks/swift/exercises/wordy/Sources/{deleteme.swift → Wordy.swift} +0 -0
  96. metadata +76 -76
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0f49d264a4f94e19bcc1ffcf987f524a884b8ab9
4
- data.tar.gz: c644b12dba0c3ca6f60c40c29718a02693a8259b
3
+ metadata.gz: 8623ef341a6390932eb5e0f88373f12e87dddd8e
4
+ data.tar.gz: 14daf2f37b0190a64c8edf17ffa28cf39a25d961
5
5
  SHA512:
6
- metadata.gz: 54759e495d52f5f5151e7fb74917346794aca4ddb9338dfe8a2e68fb892a6ffff4bc794b762163bca15cf7d4b7344b83b64f2d86b67de69e3a35669ea6e01ea9
7
- data.tar.gz: 75aa2181660f229c192e70bb9e3666a4e10775302a9e84b405f3c486e8788bd1a3b08a517f35731852244e3519ee3447d54f2fbf489dbb0fd8bb9ccbb93f2a63
6
+ metadata.gz: a01f8a0581847e5513dcd1f48ab9766b70753042174c717b97269da1af841184dbeb4ced3be2053ec2dae9376741a6e2c176bee7848160028f535b591941b8c2
7
+ data.tar.gz: be768c3c71174ab29c6922f2f31c5fdf754616b0d58b69ae94b0ea7c6a92837c130184d41d72c5c5f842491f4d17b99eeaef4a42c2e633f57a2235143117b9c5
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.6.18"
2
+ VERSION = "2.0.6.19"
3
3
  end
@@ -12,19 +12,19 @@ let addToEmpty newValue linkedList =
12
12
 
13
13
  let pop linkedList =
14
14
  match linkedList.last with
15
- | None -> None
15
+ | None -> failwith "Cannot pop from empty list"
16
16
  | Some oldLast ->
17
17
  linkedList.last <- oldLast.prev
18
18
  linkedList.last |> Option.iter (fun el -> el.next <- None)
19
- Some oldLast.value
19
+ oldLast.value
20
20
 
21
21
  let shift linkedList =
22
22
  match linkedList.first with
23
- | None -> None
23
+ | None -> failwith "Cannot shift from empty list"
24
24
  | Some oldFirst ->
25
25
  linkedList.first <- oldFirst.next
26
26
  linkedList.first |> Option.iter (fun el -> el.prev <- None)
27
- Some oldFirst.value
27
+ oldFirst.value
28
28
 
29
29
  let push newValue linkedList =
30
30
  match linkedList.last with
@@ -4,14 +4,6 @@ open NUnit.Framework
4
4
  open LinkedList
5
5
 
6
6
  [<Test>]
7
- let ``Pop returns None if the list is empty`` () =
8
- let linkedList = mkLinkedList ()
9
- let value = pop linkedList
10
-
11
- Assert.That(value, Is.EqualTo(None))
12
-
13
- [<Test>]
14
- [<Ignore("Remove to run test")>]
15
7
  let ``Push and pop are first in last out order`` () =
16
8
  let linkedList = mkLinkedList ()
17
9
  linkedList |> push 10
@@ -20,16 +12,8 @@ let ``Push and pop are first in last out order`` () =
20
12
  let val1 = pop linkedList
21
13
  let val2 = pop linkedList
22
14
 
23
- Assert.That(val1, Is.EqualTo(Some 20))
24
- Assert.That(val2, Is.EqualTo(Some 10))
25
-
26
- [<Test>]
27
- [<Ignore("Remove to run test")>]
28
- let ``Shift returns None if the list is empty`` () =
29
- let linkedList = mkLinkedList ()
30
- let value = shift linkedList
31
-
32
- Assert.That(value, Is.EqualTo(None))
15
+ Assert.That(val1, Is.EqualTo(20))
16
+ Assert.That(val2, Is.EqualTo(10))
33
17
 
34
18
  [<Test>]
35
19
  [<Ignore("Remove to run test")>]
@@ -41,8 +25,8 @@ let ``Push and shift are first in first out order`` () =
41
25
  let val1 = shift linkedList
42
26
  let val2 = shift linkedList
43
27
 
44
- Assert.That(val1, Is.EqualTo(Some 10))
45
- Assert.That(val2, Is.EqualTo(Some 20))
28
+ Assert.That(val1, Is.EqualTo(10))
29
+ Assert.That(val2, Is.EqualTo(20))
46
30
 
47
31
  [<Test>]
48
32
  [<Ignore("Remove to run test")>]
@@ -54,8 +38,8 @@ let ``Unshift and shift are last in first out order`` () =
54
38
  let val1 = shift linkedList
55
39
  let val2 = shift linkedList
56
40
 
57
- Assert.That(val1, Is.EqualTo(Some 20))
58
- Assert.That(val2, Is.EqualTo(Some 10))
41
+ Assert.That(val1, Is.EqualTo(20))
42
+ Assert.That(val2, Is.EqualTo(10))
59
43
 
60
44
  [<Test>]
61
45
  [<Ignore("Remove to run test")>]
@@ -67,8 +51,8 @@ let ``Unshift and pop are last in last out order`` () =
67
51
  let val1 = pop linkedList
68
52
  let val2 = pop linkedList
69
53
 
70
- Assert.That(val1, Is.EqualTo(Some 10))
71
- Assert.That(val2, Is.EqualTo(Some 20))
54
+ Assert.That(val1, Is.EqualTo(10))
55
+ Assert.That(val2, Is.EqualTo(20))
72
56
 
73
57
  [<Test>]
74
58
  [<Ignore("Remove to run test")>]
@@ -82,9 +66,9 @@ let ``Push and pop can handle multiple values`` () =
82
66
  let val2 = pop linkedList
83
67
  let val3 = pop linkedList
84
68
 
85
- Assert.That(val1, Is.EqualTo(Some 30))
86
- Assert.That(val2, Is.EqualTo(Some 20))
87
- Assert.That(val3, Is.EqualTo(Some 10))
69
+ Assert.That(val1, Is.EqualTo(30))
70
+ Assert.That(val2, Is.EqualTo(20))
71
+ Assert.That(val3, Is.EqualTo(10))
88
72
 
89
73
  [<Test>]
90
74
  [<Ignore("Remove to run test")>]
@@ -98,9 +82,9 @@ let ``Unshift and shift can handle multiple values`` () =
98
82
  let val2 = shift linkedList
99
83
  let val3 = shift linkedList
100
84
 
101
- Assert.That(val1, Is.EqualTo(Some 30))
102
- Assert.That(val2, Is.EqualTo(Some 20))
103
- Assert.That(val3, Is.EqualTo(Some 10))
85
+ Assert.That(val1, Is.EqualTo(30))
86
+ Assert.That(val2, Is.EqualTo(20))
87
+ Assert.That(val3, Is.EqualTo(10))
104
88
 
105
89
  [<Test>]
106
90
  [<Ignore("Remove to run test")>]
@@ -111,12 +95,12 @@ let ``All methods of manipulating the linkedList can be used together`` () =
111
95
 
112
96
  let val1 = pop linkedList
113
97
 
114
- Assert.That(val1, Is.EqualTo(Some 20))
98
+ Assert.That(val1, Is.EqualTo(20))
115
99
 
116
100
  linkedList |> push 30
117
101
  let val2 = shift linkedList
118
102
 
119
- Assert.That(val2, Is.EqualTo(Some 10))
103
+ Assert.That(val2, Is.EqualTo(10))
120
104
 
121
105
  linkedList |> unshift 40
122
106
  linkedList |> push 50
@@ -125,6 +109,6 @@ let ``All methods of manipulating the linkedList can be used together`` () =
125
109
  let val4 = pop linkedList
126
110
  let val5 = shift linkedList
127
111
 
128
- Assert.That(val3, Is.EqualTo(Some 40))
129
- Assert.That(val4, Is.EqualTo(Some 50))
130
- Assert.That(val5, Is.EqualTo(Some 30))
112
+ Assert.That(val3, Is.EqualTo(40))
113
+ Assert.That(val4, Is.EqualTo(50))
114
+ Assert.That(val5, Is.EqualTo(30))
@@ -154,7 +154,11 @@
154
154
  {
155
155
  "difficulty": 1,
156
156
  "slug": "scrabble-score",
157
- "topics": []
157
+ "topics": [
158
+ "Control-flow (loops)",
159
+ "Maps",
160
+ "Strings"
161
+ ]
158
162
  },
159
163
  {
160
164
  "difficulty": 1,
@@ -22,8 +22,9 @@ include 'hello-world'
22
22
  include 'largest-series-product'
23
23
  include 'linked-list'
24
24
  include 'luhn'
25
- include 'minesweeper'
25
+ include 'matrix'
26
26
  include 'meetup'
27
+ include 'minesweeper'
27
28
  include 'nth-prime'
28
29
  include 'nucleotide-count'
29
30
  include 'octal'
@@ -32,6 +33,8 @@ include 'pangram'
32
33
  include 'pascals-triangle'
33
34
  include 'phone-number'
34
35
  include 'pig-latin'
36
+ include 'prime-factors'
37
+ include 'pythagorean-triplet'
35
38
  include 'queen-attack'
36
39
  include 'raindrops'
37
40
  include 'rectangles'
@@ -39,20 +42,17 @@ include 'rna-transcription'
39
42
  include 'robot-name'
40
43
  include 'robot-simulator'
41
44
  include 'roman-numerals'
42
- include 'prime-factors'
43
- include 'pythagorean-triplet'
44
45
  include 'scrabble-score'
45
46
  include 'series'
46
47
  include 'sieve'
47
48
  include 'simple-cipher'
48
49
  include 'simple-linked-list'
49
- include 'sublist'
50
- include 'sum-of-multiples'
51
50
  include 'space-age'
52
51
  include 'strain'
52
+ include 'sublist'
53
+ include 'sum-of-multiples'
53
54
  include 'triangle'
54
55
  include 'trinary'
56
+ include 'twelve-days'
55
57
  include 'word-count'
56
58
  include 'wordy'
57
- include 'twelve-days'
58
- include 'matrix'
@@ -0,0 +1,10 @@
1
+ # Testing
2
+
3
+ In order to run the tests for this track, you will need to install
4
+ DUnitX. Please see [INSTALLATION.md](link here) for more information.
5
+
6
+ ### Submitting Exercises
7
+
8
+ Note that, when trying to submit an exercise, make sure the exercise file you're submitting is in the `exercism/pascal/<exerciseName>` directory.
9
+
10
+ For example, if you're submitting `ubob.pas` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/pascal/bob/ubob.pas`.
@@ -7,23 +7,53 @@ uses
7
7
  type
8
8
  [TestFixture]
9
9
  hpTests = class(TObject)
10
- private
11
- class function ConvertStrToIntArray(aString: string): TArray<Integer>; static;
12
10
  public
13
11
  [Test]
14
- [TestCase('Test total basket price single book', '1, 8.0')]
15
- // [TestCase('Test total basket Price two of same book', '2|2, 16.0')]
16
- // [TestCase('Test total basket price empty basket', ', 0.0')]
17
- // [TestCase('Test basket with two different books', '1|2, 15.2')]
18
- // [TestCase('Test basket with three different books', '1|2|3, 21.6')]
19
- // [TestCase('Test basket with four different books', '1|2|3|4, 25.6')]
20
- // [TestCase('Test basket with five different books', '1|2|3|4|5, 30.0')]
21
- // [TestCase('Test basket w/2 copies of books 1..3 and one copy of books 4 and 5', '1|1|2|2|3|3|4|5, 51.20')]
22
- // [TestCase('Test basket w/2 copies of books 1..4 and one copy of book 5', '1|1|2|2|3|3|4|4|5, 55.60')]
23
- // [TestCase('Test basket w/2 copies of each book', '1|1|2|2|3|3|4|4|5|5, 60.00')]
24
- // [TestCase('Test basket w/2 copies of each book plus one more copy of book 1', '1|1|2|2|3|3|4|4|5|5|1, 68.00')]
25
- // [TestCase('Test basket w/2 copies of each book plus one more copy of books 1 and 2', '1|1|2|2|3|3|4|4|5|5|1|2, 75.20')]
26
- procedure SeveralBasketTestCases(const aBasket: string; const Expected: extended);
12
+ procedure A_basket_containing_only_a_single_book;
13
+
14
+ [Test]
15
+ [Ignore('Comment this line to run this test')]
16
+ procedure A_basket_containing_only_two_of_the_same_book;
17
+
18
+ [Test]
19
+ [Ignore('Comment this line to run this test')]
20
+ procedure No_charge_to_carry_around_an_empty_basket;
21
+
22
+ [Test]
23
+ [Ignore('Comment this line to run this test')]
24
+ procedure A_basket_containing_only_two_different_books;
25
+
26
+ [Test]
27
+ [Ignore('Comment this line to run this test')]
28
+ procedure A_basket_with_three_different_books;
29
+
30
+ [Test]
31
+ [Ignore('Comment this line to run this test')]
32
+ procedure A_basket_with_four_different_books;
33
+
34
+ [Test]
35
+ [Ignore('Comment this line to run this test')]
36
+ procedure A_basket_with_five_different_books;
37
+
38
+ [Test]
39
+ [Ignore('Comment this line to run this test')]
40
+ procedure A_basket_containing_eight_books_consisting_of_a_pair_each_of_the_first_three_books_plus_one_copy_each_of_the_last_two_books;
41
+
42
+ [Test]
43
+ [Ignore('Comment this line to run this test')]
44
+ procedure A_basket_containing_nine_books_consisting_of_a_pair_each_of_the_first_four_books_plus_one_of_the_last_book;
45
+
46
+ [Test]
47
+ [Ignore('Comment this line to run this test')]
48
+ procedure A_basket_containing_ten_books_consisting_of_two_copies_of_each_book_in_the_series;
49
+
50
+ [Test]
51
+ [Ignore('Comment this line to run this test')]
52
+ procedure A_basket_containing_eleven_books_consisting_of_three_copies_of_the_first_book_plus_two_each_of_the_remaing_four_bookes_in_the_series;
53
+
54
+ [Test]
55
+ [Ignore('Comment this line to run this test')]
56
+ procedure A_basket_containing_twelve_books_consisting_of_three_copies_of_the_first_two_books_plus_two_each_of_the_remaining_three_books_in_the_series;
27
57
  end;
28
58
 
29
59
  implementation
@@ -31,24 +61,215 @@ uses System.SysUtils, uBookStore;
31
61
 
32
62
  const MinDelta = 0.005; //cents
33
63
 
34
- class function hpTests.ConvertStrToIntArray(aString: string): TArray<Integer>;
35
- var splitStr: TArray<string>;
36
- i: integer;
64
+ procedure hpTests.A_basket_containing_only_a_single_book;
65
+ var Basket: TArray<integer>;
66
+ fBasket: IBasket;
67
+ Expected: double;
37
68
  begin
38
- result := nil;
39
- splitStr := aString.Split(['|']);
40
- SetLength(result, length(splitStr));
41
- for i := Low(splitStr) to High(splitStr) do
42
- result[i] := splitStr[i].ToInteger;
69
+ SetLength(Basket, 1);
70
+ Basket[0] := 1;
71
+ Expected := 8.0;
72
+
73
+ fBasket := NewBasket(Basket);
74
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
75
+ end;
76
+
77
+ procedure hpTests.A_basket_containing_only_two_of_the_same_book;
78
+ var Basket: TArray<integer>;
79
+ fBasket: IBasket;
80
+ Expected: double;
81
+ begin
82
+ SetLength(Basket, 2);
83
+ Basket[0] := 2;
84
+ Basket[1] := 2;
85
+ Expected := 16.0;
86
+
87
+ fBasket := NewBasket(Basket);
88
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
89
+ end;
90
+
91
+ procedure hpTests.No_charge_to_carry_around_an_empty_basket;
92
+ var Basket: TArray<integer>;
93
+ fBasket: IBasket;
94
+ Expected: double;
95
+ begin
96
+ SetLength(Basket, 0);
97
+ Expected := 0.0;
98
+
99
+ fBasket := NewBasket(Basket);
100
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
101
+ end;
102
+
103
+ procedure hpTests.A_basket_containing_only_two_different_books;
104
+ var Basket: TArray<integer>;
105
+ fBasket: IBasket;
106
+ Expected: double;
107
+ begin
108
+ SetLength(Basket, 2);
109
+ Basket[0] := 1;
110
+ Basket[1] := 2;
111
+ Expected := 15.2;
112
+
113
+ fBasket := NewBasket(Basket);
114
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
43
115
  end;
44
116
 
45
- procedure hpTests.SeveralBasketTestCases(const aBasket: string; const Expected: extended);
117
+ procedure hpTests.A_basket_with_three_different_books;
46
118
  var Basket: TArray<integer>;
47
119
  fBasket: IBasket;
120
+ Expected: double;
48
121
  begin
49
- Basket := ConvertStrToIntArray(aBasket);
122
+ SetLength(Basket, 3);
123
+ Basket[0] := 1;
124
+ Basket[1] := 2;
125
+ Basket[2] := 3;
126
+ Expected := 21.6;
127
+
128
+ fBasket := NewBasket(Basket);
129
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
130
+ end;
131
+
132
+ procedure hpTests.A_basket_with_four_different_books;
133
+ var Basket: TArray<integer>;
134
+ fBasket: IBasket;
135
+ Expected: double;
136
+ begin
137
+ SetLength(Basket, 4);
138
+ Basket[0] := 1;
139
+ Basket[1] := 2;
140
+ Basket[2] := 3;
141
+ Basket[3] := 4;
142
+ Expected := 25.6;
143
+
144
+ fBasket := NewBasket(Basket);
145
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
146
+ end;
147
+
148
+ procedure hpTests.A_basket_with_five_different_books;
149
+ var Basket: TArray<integer>;
150
+ fBasket: IBasket;
151
+ Expected: double;
152
+ begin
153
+ SetLength(Basket, 5);
154
+ Basket[0] := 1;
155
+ Basket[1] := 2;
156
+ Basket[2] := 3;
157
+ Basket[3] := 4;
158
+ Basket[4] := 5;
159
+ Expected := 30.0;
160
+
161
+ fBasket := NewBasket(Basket);
162
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
163
+ end;
164
+
165
+ procedure hpTests.A_basket_containing_eight_books_consisting_of_a_pair_each_of_the_first_three_books_plus_one_copy_each_of_the_last_two_books;
166
+ var Basket: TArray<integer>;
167
+ fBasket: IBasket;
168
+ Expected: double;
169
+ begin
170
+ SetLength(Basket, 8);
171
+ Basket[0] := 1;
172
+ Basket[1] := 1;
173
+ Basket[2] := 2;
174
+ Basket[3] := 2;
175
+ Basket[4] := 3;
176
+ Basket[5] := 3;
177
+ Basket[6] := 4;
178
+ Basket[7] := 5;
179
+ Expected := 51.20;
180
+
181
+ fBasket := NewBasket(Basket);
182
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
183
+ end;
184
+
185
+ procedure hpTests.A_basket_containing_nine_books_consisting_of_a_pair_each_of_the_first_four_books_plus_one_of_the_last_book;
186
+ var Basket: TArray<integer>;
187
+ fBasket: IBasket;
188
+ Expected: double;
189
+ begin
190
+ SetLength(Basket, 9);
191
+ Basket[0] := 1;
192
+ Basket[1] := 1;
193
+ Basket[2] := 2;
194
+ Basket[3] := 2;
195
+ Basket[4] := 3;
196
+ Basket[5] := 3;
197
+ Basket[6] := 4;
198
+ Basket[7] := 4;
199
+ Basket[8] := 5;
200
+ Expected := 55.60;
201
+
202
+ fBasket := NewBasket(Basket);
203
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
204
+ end;
205
+
206
+ procedure hpTests.A_basket_containing_ten_books_consisting_of_two_copies_of_each_book_in_the_series;
207
+ var Basket: TArray<integer>;
208
+ fBasket: IBasket;
209
+ Expected: double;
210
+ begin
211
+ SetLength(Basket, 10);
212
+ Basket[0] := 1;
213
+ Basket[1] := 1;
214
+ Basket[2] := 2;
215
+ Basket[3] := 2;
216
+ Basket[4] := 3;
217
+ Basket[5] := 3;
218
+ Basket[6] := 4;
219
+ Basket[7] := 4;
220
+ Basket[8] := 5;
221
+ Basket[9] := 5;
222
+ Expected := 60.00;
223
+
224
+ fBasket := NewBasket(Basket);
225
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
226
+ end;
227
+
228
+ procedure hpTests.A_basket_containing_eleven_books_consisting_of_three_copies_of_the_first_book_plus_two_each_of_the_remaing_four_bookes_in_the_series;
229
+ var Basket: TArray<integer>;
230
+ fBasket: IBasket;
231
+ Expected: double;
232
+ begin
233
+ SetLength(Basket, 11);
234
+ Basket[0] := 1;
235
+ Basket[1] := 1;
236
+ Basket[2] := 2;
237
+ Basket[3] := 2;
238
+ Basket[4] := 3;
239
+ Basket[5] := 3;
240
+ Basket[6] := 4;
241
+ Basket[7] := 4;
242
+ Basket[8] := 5;
243
+ Basket[9] := 5;
244
+ Basket[10] := 1;
245
+ Expected := 68.00;
246
+
247
+ fBasket := NewBasket(Basket);
248
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
249
+ end;
250
+
251
+ procedure hpTests.A_basket_containing_twelve_books_consisting_of_three_copies_of_the_first_two_books_plus_two_each_of_the_remaining_three_books_in_the_series;
252
+ var Basket: TArray<integer>;
253
+ fBasket: IBasket;
254
+ Expected: double;
255
+ begin
256
+ SetLength(Basket, 12);
257
+ Basket[0] := 1;
258
+ Basket[1] := 1;
259
+ Basket[2] := 2;
260
+ Basket[3] := 2;
261
+ Basket[4] := 3;
262
+ Basket[5] := 3;
263
+ Basket[6] := 4;
264
+ Basket[7] := 4;
265
+ Basket[8] := 5;
266
+ Basket[9] := 5;
267
+ Basket[10] := 1;
268
+ Basket[11] := 2;
269
+ Expected := 75.20;
270
+
50
271
  fBasket := NewBasket(Basket);
51
- assert.AreEqual(Expected, FBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
272
+ assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
52
273
  end;
53
274
 
54
275
  initialization