trackler 2.0.6.18 → 2.0.6.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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