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.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/fsharp/exercises/linked-list/Example.fs +4 -4
- data/tracks/fsharp/exercises/linked-list/LinkedListTest.fs +19 -35
- data/tracks/go/config.json +5 -1
- data/tracks/java/exercises/settings.gradle +7 -7
- data/tracks/pascal/SETUP.md +10 -0
- data/tracks/pascal/exercises/book-store/uBookStoreTests.pas +247 -26
- data/tracks/pascal/exercises/phone-number/uPhoneNumberTests.pas +7 -1
- data/tracks/scala/config.json +18 -0
- data/tracks/scala/exercises/accumulate/build.sbt +2 -2
- data/tracks/scala/exercises/difference-of-squares/build.sbt +2 -2
- data/tracks/scala/exercises/etl/build.sbt +2 -2
- data/tracks/scala/exercises/grains/build.sbt +2 -2
- data/tracks/scala/exercises/leap/build.sbt +2 -2
- data/tracks/scala/exercises/robot-name/build.sbt +2 -2
- data/tracks/scala/exercises/scrabble-score/build.sbt +2 -2
- data/tracks/scala/exercises/scrabble-score/example.scala +1 -1
- data/tracks/scala/exercises/scrabble-score/src/test/scala/ScrabbleScoreTest.scala +7 -7
- data/tracks/scala/exercises/space-age/build.sbt +2 -2
- data/tracks/scala/exercises/space-age/src/test/scala/SpaceAgeTest.scala +1 -1
- data/tracks/swift/exercises/accumulate/Sources/{deleteme.swift → Accumulate.swift} +0 -0
- data/tracks/swift/exercises/acronym/Sources/{deleteme.swift → Acronym.swift} +0 -0
- data/tracks/swift/exercises/all-your-base/Sources/{deleteme.swift → AllYourBase.swift} +0 -0
- data/tracks/swift/exercises/allergies/Sources/{deleteme.swift → Allergies.swift} +0 -0
- data/tracks/swift/exercises/anagram/Sources/{deleteme.swift → Anagram.swift} +0 -0
- data/tracks/swift/exercises/atbash-cipher/Sources/{deleteme.swift → Atbash.swift} +0 -0
- data/tracks/swift/exercises/beer-song/Sources/{deleteme.swift → BeerSong.swift} +0 -0
- data/tracks/swift/exercises/binary-search-tree/Sources/{deleteme.swift → BinarySearchTree.swift} +0 -0
- data/tracks/swift/exercises/binary-search/Sources/{deleteme.swift → BinarySearch.swift} +0 -0
- data/tracks/swift/exercises/binary/Sources/{deleteme.swift → Binary.swift} +0 -0
- data/tracks/swift/exercises/bob/Sources/{deleteme.swift → Bob.swift} +0 -0
- data/tracks/swift/exercises/bowling/Sources/{deleteme.swift → Bowling.swift} +0 -0
- data/tracks/swift/exercises/bracket-push/Sources/{deleteme.swift → BracketPush.swift} +0 -0
- data/tracks/swift/exercises/clock/Sources/{deleteme.swift → Clock.swift} +0 -0
- data/tracks/swift/exercises/crypto-square/Sources/{deleteme.swift → CryptoSquare.swift} +0 -0
- data/tracks/swift/exercises/custom-set/Sources/{deleteme.swift → CustomSet.swift} +0 -0
- data/tracks/swift/exercises/difference-of-squares/Sources/{deleteme.swift → DifferenceOfSquares.swift} +0 -0
- data/tracks/swift/exercises/dominoes/Sources/{deleteme.swift → Dominoes.swift} +0 -0
- data/tracks/swift/exercises/etl/Sources/{deleteme.swift → Etl.swift} +0 -0
- data/tracks/swift/exercises/flatten-array/Sources/{deleteme.swift → FlattenArray.swift} +0 -0
- data/tracks/swift/exercises/food-chain/Sources/{deleteme.swift → FoodChain.swift} +0 -0
- data/tracks/swift/exercises/gigasecond/Sources/{deleteme.swift → Gigasecond.swift} +0 -0
- data/tracks/swift/exercises/grade-school/Sources/{deleteme.swift → GradeSchool.swift} +0 -0
- data/tracks/swift/exercises/grains/Sources/{deleteme.swift → Grains.swift} +0 -0
- data/tracks/swift/exercises/hamming/Sources/{deleteme.swift → Hamming.swift} +0 -0
- data/tracks/swift/exercises/hexadecimal/Sources/{deleteme.swift → Hexadecimal.swift} +0 -0
- data/tracks/swift/exercises/house/Sources/{deleteme.swift → House.swift} +0 -0
- data/tracks/swift/exercises/isogram/Sources/{deleteme.swift → Isogram.swift} +0 -0
- data/tracks/swift/exercises/kindergarten-garden/Sources/{deleteme.swift → KingergartenGarden.swift} +0 -0
- data/tracks/swift/exercises/largest-series-product/Sources/{deleteme.swift → LargestSeriesProduct.swift} +0 -0
- data/tracks/swift/exercises/leap/Sources/{deleteme.swift → Leap.swift} +0 -0
- data/tracks/swift/exercises/linked-list/Sources/{deleteme.swift → LinkedList.swift} +0 -0
- data/tracks/swift/exercises/luhn/Sources/{deleteme.swift → Luhn.swift} +0 -0
- data/tracks/swift/exercises/matrix/Sources/{deleteme.swift → Matrix.swift} +0 -0
- data/tracks/swift/exercises/meetup/Sources/{deleteme.swift → Meetup.swift} +0 -0
- data/tracks/swift/exercises/minesweeper/Sources/{deleteme.swift → Minesweeper.swift} +0 -0
- data/tracks/swift/exercises/nth-prime/Sources/{deleteme.swift → NthPrime.swift} +0 -0
- data/tracks/swift/exercises/nucleotide-count/Sources/{deleteme.swift → NucleotideCount.swift} +0 -0
- data/tracks/swift/exercises/ocr-numbers/Sources/{deleteme.swift → OcrNumbers.swift} +0 -0
- data/tracks/swift/exercises/octal/Sources/{deleteme.swift → Octal.swift} +0 -0
- data/tracks/swift/exercises/palindrome-products/Sources/{deleteme.swift → PalindromeProducts.swift} +0 -0
- data/tracks/swift/exercises/pangram/Sources/{deleteme.swift → Pangram.swift} +0 -0
- data/tracks/swift/exercises/pascals-triangle/Sources/{deleteme.swift → PascalsTriangle.swift} +0 -0
- data/tracks/swift/exercises/perfect-numbers/Sources/{deleteme.swift → PerfectNumbers.swift} +0 -0
- data/tracks/swift/exercises/phone-number/Sources/{deleteme.swift → PhoneNumber.swift} +0 -0
- data/tracks/swift/exercises/pig-latin/Sources/{deleteme.swift → PigLatin.swift} +0 -0
- data/tracks/swift/exercises/poker/Sources/{deleteme.swift → Poker.swift} +0 -0
- data/tracks/swift/exercises/prime-factors/Sources/{deleteme.swift → PrimeFactors.swift} +0 -0
- data/tracks/swift/exercises/pythagorean-triplet/Sources/{deleteme.swift → PythagoreanTriplet.swift} +0 -0
- data/tracks/swift/exercises/queen-attack/Sources/{deleteme.swift → QueenAttack.swift} +0 -0
- data/tracks/swift/exercises/raindrops/Sources/{deleteme.swift → Raindrops.swift} +0 -0
- data/tracks/swift/exercises/rna-transcription/Sources/{deleteme.swift → RnaTranscription.swift} +0 -0
- data/tracks/swift/exercises/robot-name/Sources/{deleteme.swift → RobotName.swift} +0 -0
- data/tracks/swift/exercises/robot-simulator/Sources/{deleteme.swift → RobotSimulator.swift} +0 -0
- data/tracks/swift/exercises/roman-numerals/Sources/{deleteme.swift → RomanNumerals.swift} +0 -0
- data/tracks/swift/exercises/run-length-encoding/Sources/{deleteme.swift → RunLengthEncoding.swift} +0 -0
- data/tracks/swift/exercises/saddle-points/Sources/{deleteme.swift → SaddlePoints.swift} +0 -0
- data/tracks/swift/exercises/scrabble-score/Sources/{deleteme.swift → ScrabbleScore.swift} +0 -0
- data/tracks/swift/exercises/secret-handshake/Sources/{deleteme.swift → SecretHandshake.swift} +0 -0
- data/tracks/swift/exercises/series/Sources/{deleteme.swift → Series.swift} +0 -0
- data/tracks/swift/exercises/sieve/Sources/{deleteme.swift → Sieve.swift} +0 -0
- data/tracks/swift/exercises/simple-cipher/Sources/{deleteme.swift → SimpleCipher.swift} +0 -0
- data/tracks/swift/exercises/simple-linked-list/Sources/{deleteme.swift → SimpleLinkedList.swift} +0 -0
- data/tracks/swift/exercises/space-age/Sources/{deleteme.swift → SpaceAge.swift} +0 -0
- data/tracks/swift/exercises/strain/Sources/{deleteme.swift → Strain.swift} +0 -0
- data/tracks/swift/exercises/sublist/Sources/{deleteme.swift → Sublist.swift} +0 -0
- data/tracks/swift/exercises/sum-of-multiples/Sources/{deleteme.swift → SumOfMultiples.swift} +0 -0
- data/tracks/swift/exercises/tournament/Sources/{deleteme.swift → Tournament.swift} +0 -0
- data/tracks/swift/exercises/transpose/Sources/{deleteme.swift → Transpose.swift} +0 -0
- data/tracks/swift/exercises/triangle/Sources/{deleteme.swift → Triangle.swift} +0 -0
- data/tracks/swift/exercises/trinary/Sources/{deleteme.swift → Trinary.swift} +0 -0
- data/tracks/swift/exercises/twelve-days/Sources/{deleteme.swift → TwelveDays.swift} +0 -0
- data/tracks/swift/exercises/word-count/Sources/{deleteme.swift → WordCount.swift} +0 -0
- data/tracks/swift/exercises/wordy/Sources/{deleteme.swift → Wordy.swift} +0 -0
- metadata +76 -76
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8623ef341a6390932eb5e0f88373f12e87dddd8e
|
|
4
|
+
data.tar.gz: 14daf2f37b0190a64c8edf17ffa28cf39a25d961
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a01f8a0581847e5513dcd1f48ab9766b70753042174c717b97269da1af841184dbeb4ced3be2053ec2dae9376741a6e2c176bee7848160028f535b591941b8c2
|
|
7
|
+
data.tar.gz: be768c3c71174ab29c6922f2f31c5fdf754616b0d58b69ae94b0ea7c6a92837c130184d41d72c5c5f842491f4d17b99eeaef4a42c2e633f57a2235143117b9c5
|
data/lib/trackler/version.rb
CHANGED
|
@@ -12,19 +12,19 @@ let addToEmpty newValue linkedList =
|
|
|
12
12
|
|
|
13
13
|
let pop linkedList =
|
|
14
14
|
match linkedList.last with
|
|
15
|
-
| 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
|
-
|
|
19
|
+
oldLast.value
|
|
20
20
|
|
|
21
21
|
let shift linkedList =
|
|
22
22
|
match linkedList.first with
|
|
23
|
-
| 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
|
-
|
|
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(
|
|
24
|
-
Assert.That(val2, Is.EqualTo(
|
|
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(
|
|
45
|
-
Assert.That(val2, Is.EqualTo(
|
|
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(
|
|
58
|
-
Assert.That(val2, Is.EqualTo(
|
|
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(
|
|
71
|
-
Assert.That(val2, Is.EqualTo(
|
|
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(
|
|
86
|
-
Assert.That(val2, Is.EqualTo(
|
|
87
|
-
Assert.That(val3, Is.EqualTo(
|
|
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(
|
|
102
|
-
Assert.That(val2, Is.EqualTo(
|
|
103
|
-
Assert.That(val3, Is.EqualTo(
|
|
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(
|
|
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(
|
|
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(
|
|
129
|
-
Assert.That(val4, Is.EqualTo(
|
|
130
|
-
Assert.That(val5, Is.EqualTo(
|
|
112
|
+
Assert.That(val3, Is.EqualTo(40))
|
|
113
|
+
Assert.That(val4, Is.EqualTo(50))
|
|
114
|
+
Assert.That(val5, Is.EqualTo(30))
|
data/tracks/go/config.json
CHANGED
|
@@ -22,8 +22,9 @@ include 'hello-world'
|
|
|
22
22
|
include 'largest-series-product'
|
|
23
23
|
include 'linked-list'
|
|
24
24
|
include 'luhn'
|
|
25
|
-
include '
|
|
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'
|
data/tracks/pascal/SETUP.md
CHANGED
|
@@ -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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
procedure
|
|
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
|
-
|
|
35
|
-
var
|
|
36
|
-
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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.
|
|
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
|
|
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,
|
|
272
|
+
assert.AreEqual(Expected, fBasket.Total, MinDelta, format('Total should be %0.2f',[Expected]));
|
|
52
273
|
end;
|
|
53
274
|
|
|
54
275
|
initialization
|