trackler 2.2.1.98 → 2.2.1.99

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/complex-numbers/canonical-data.json +47 -47
  4. data/problem-specifications/exercises/custom-set/canonical-data.json +13 -7
  5. data/tracks/delphi/exercises/phone-number/uPhoneNumberTests.pas +1 -1
  6. data/tracks/elixir/exercises/protein-translation/protein_translation_test.exs +5 -0
  7. data/tracks/fsharp/config.json +10 -0
  8. data/tracks/fsharp/exercises/Exercises.sln +6 -0
  9. data/tracks/fsharp/exercises/accumulate/AccumulateTest.fs +2 -0
  10. data/tracks/fsharp/exercises/bank-account/BankAccountTest.fs +2 -0
  11. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTreeTest.fs +2 -0
  12. data/tracks/fsharp/exercises/binary/BinaryTest.fs +2 -0
  13. data/tracks/fsharp/exercises/circular-buffer/CircularBufferTest.fs +121 -117
  14. data/tracks/fsharp/exercises/complex-numbers/ComplexNumbers.fs +21 -0
  15. data/tracks/fsharp/exercises/complex-numbers/ComplexNumbers.fsproj +23 -0
  16. data/tracks/fsharp/exercises/complex-numbers/ComplexNumbersTest.fs +168 -0
  17. data/tracks/fsharp/exercises/complex-numbers/Example.fs +27 -0
  18. data/tracks/fsharp/exercises/complex-numbers/Program.fs +1 -0
  19. data/tracks/fsharp/exercises/complex-numbers/README.md +35 -0
  20. data/tracks/fsharp/exercises/diamond/DiamondTest.fs +2 -0
  21. data/tracks/fsharp/exercises/diffie-hellman/DiffieHellmanTest.fs +2 -0
  22. data/tracks/fsharp/exercises/dot-dsl/DotDslTest.fs +2 -0
  23. data/tracks/fsharp/exercises/error-handling/ErrorHandlingTest.fs +2 -0
  24. data/tracks/fsharp/exercises/go-counting/GoCountingTest.fs +2 -0
  25. data/tracks/fsharp/exercises/grade-school/GradeSchoolTest.fs +2 -0
  26. data/tracks/fsharp/exercises/hangman/HangmanTest.fs +2 -0
  27. data/tracks/fsharp/exercises/hexadecimal/HexadecimalTest.fs +2 -0
  28. data/tracks/fsharp/exercises/ledger/LedgerTest.fs +2 -0
  29. data/tracks/fsharp/exercises/lens-person/LensPersonTest.fs +2 -0
  30. data/tracks/fsharp/exercises/linked-list/LinkedListTest.fs +2 -0
  31. data/tracks/fsharp/exercises/matrix/MatrixTest.fs +2 -0
  32. data/tracks/fsharp/exercises/octal/OctalTest.fs +2 -0
  33. data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequencyTest.fs +2 -0
  34. data/tracks/fsharp/exercises/pov/PovTest.fs +2 -0
  35. data/tracks/fsharp/exercises/protein-translation/ProteinTranslationTest.fs +2 -0
  36. data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTripletTest.fs +2 -0
  37. data/tracks/fsharp/exercises/robot-name/RobotNameTest.fs +2 -0
  38. data/tracks/fsharp/exercises/saddle-points/SaddlePointsTest.fs +2 -0
  39. data/tracks/fsharp/exercises/say/SayTest.fs +2 -0
  40. data/tracks/fsharp/exercises/scale-generator/ScaleGeneratorTest.fs +2 -0
  41. data/tracks/fsharp/exercises/secret-handshake/SecretHandshakeTest.fs +2 -0
  42. data/tracks/fsharp/exercises/series/SeriesTest.fs +2 -0
  43. data/tracks/fsharp/exercises/sgf-parsing/SgfParsingTest.fs +2 -0
  44. data/tracks/fsharp/exercises/sieve/SieveTest.fs +2 -0
  45. data/tracks/fsharp/exercises/simple-cipher/SimpleCipherTest.fs +2 -0
  46. data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedListTest.fs +2 -0
  47. data/tracks/fsharp/exercises/space-age/SpaceAgeTest.fs +2 -0
  48. data/tracks/fsharp/exercises/strain/StrainTest.fs +2 -0
  49. data/tracks/fsharp/exercises/sublist/SublistTest.fs +2 -0
  50. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiplesTest.fs +2 -0
  51. data/tracks/fsharp/exercises/tournament/TournamentTest.fs +2 -0
  52. data/tracks/fsharp/exercises/transpose/TransposeTest.fs +2 -0
  53. data/tracks/fsharp/exercises/transpose/TrinaryTest.fs +3 -1
  54. data/tracks/fsharp/exercises/tree-building/TreeBuildingTest.fs +2 -0
  55. data/tracks/fsharp/exercises/triangle/TriangleTest.fs +2 -0
  56. data/tracks/fsharp/exercises/trinary/TrinaryTest.fs +2 -0
  57. data/tracks/fsharp/exercises/two-bucket/TwoBucketTest.fs +2 -0
  58. data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantityTest.fs +2 -0
  59. data/tracks/fsharp/exercises/word-count/WordCountTest.fs +2 -0
  60. data/tracks/fsharp/exercises/word-search/WordSearchTest.fs +2 -0
  61. data/tracks/fsharp/exercises/wordy/WordyTest.fs +2 -0
  62. data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzleTest.fs +2 -0
  63. data/tracks/fsharp/exercises/zipper/ZipperTest.fs +2 -0
  64. data/tracks/fsharp/generators/CanonicalData.fs +1 -1
  65. data/tracks/fsharp/generators/Generators.fs +89 -0
  66. data/tracks/go/config.json +16 -0
  67. data/tracks/go/exercises/rail-fence-cipher/.meta/gen.go +82 -0
  68. data/tracks/go/exercises/rail-fence-cipher/README.md +83 -0
  69. data/tracks/go/exercises/rail-fence-cipher/cases_test.go +50 -0
  70. data/tracks/go/exercises/rail-fence-cipher/example.go +58 -0
  71. data/tracks/go/exercises/rail-fence-cipher/rail_fence_cipher_test.go +15 -0
  72. data/tracks/go/exercises/say/.meta/gen.go +5 -3
  73. data/tracks/go/exercises/say/cases_test.go +2 -2
  74. data/tracks/go/exercises/scrabble-score/.meta/gen.go +5 -3
  75. data/tracks/go/exercises/scrabble-score/cases_test.go +2 -2
  76. data/tracks/go/exercises/secret-handshake/.meta/gen.go +5 -3
  77. data/tracks/go/exercises/secret-handshake/cases_test.go +2 -2
  78. data/tracks/go/exercises/transpose/.meta/gen.go +5 -3
  79. data/tracks/go/exercises/transpose/cases_test.go +30 -76
  80. data/tracks/go/exercises/word-count/.meta/gen.go +5 -3
  81. data/tracks/go/exercises/word-count/cases_test.go +2 -2
  82. data/tracks/go/exercises/wordy/.meta/gen.go +5 -3
  83. data/tracks/go/exercises/wordy/cases_test.go +2 -2
  84. data/tracks/java/exercises/largest-series-product/.meta/src/reference/java/LargestSeriesProductCalculator.java +1 -3
  85. data/tracks/java/exercises/largest-series-product/.meta/version +1 -0
  86. data/tracks/java/exercises/largest-series-product/src/test/java/LargestSeriesProductCalculatorTest.java +9 -44
  87. data/tracks/ocaml/exercises/grade-school/.meta/description.md +21 -0
  88. data/tracks/ocaml/exercises/palindrome-products/.meta/description.md +35 -0
  89. data/tracks/ocaml/exercises/palindrome-products/README.md +13 -9
  90. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 61557d8c8f53297686afbfb79d34fd4bb855673b
4
- data.tar.gz: 0e787d40634a430d4019195d58f4fdff356f82ae
3
+ metadata.gz: 8a4f6ff506d46fc8e5cd2158613f444181e5a9f4
4
+ data.tar.gz: 8248291e3689c6087c3e8d6c82de286eb754c6d3
5
5
  SHA512:
6
- metadata.gz: bfd3d1d4c263d6dc3bc615d67eb273808855a2c2bfee91201963dcc168350f1b30c8fe8efe04a145d20900976a824d52a6e6540f686c42c1a81cdbf5c3108a54
7
- data.tar.gz: a203c0f9128acfb983935569b854b134213a3da2aa254fc3a6e94565c2b3b22df296fc3027783cce311c64c22eb9415cb926c8c1e402db33f6cdcef96c52263f
6
+ metadata.gz: 19d9955f95e594ff280c3ceaf97cbb0a7583860bc892e01380953f95cd4861150bb8c00a9c0a222e18f3f31601f296f4e7bfa659c05e59a9a3943e5ac16a3033
7
+ data.tar.gz: 6804eab9031cad8febe3ab5fe3e49d03eb4eb95eaf50ad0401791d79b4c23bcf3dab914ef6023dac7ea5b364c22b0bfea717c6887404bc3d02c62a7b9eeaa1a2
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.98"
2
+ VERSION = "2.2.1.99"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "exercise": "complex-numbers",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "comments": [
5
5
  " The canonical data assumes mathematically correct real ",
6
6
  " numbers. The testsuites should consider rounding errors ",
@@ -12,6 +12,52 @@
12
12
  " represented as \"e\". "
13
13
  ],
14
14
  "cases": [
15
+ {
16
+ "description": "Real part",
17
+ "cases": [
18
+ {
19
+ "description": "Real part of a purely real number",
20
+ "property": "real",
21
+ "input": [1, 0],
22
+ "expected": 1
23
+ },
24
+ {
25
+ "description": "Real part of a purely imaginary number",
26
+ "property": "real",
27
+ "input": [0, 1],
28
+ "expected": 0
29
+ },
30
+ {
31
+ "description": "Real part of a number with real and imaginary part",
32
+ "property": "real",
33
+ "input": [1, 2],
34
+ "expected": 1
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ "description": "Imaginary part",
40
+ "cases": [
41
+ {
42
+ "description": "Imaginary part of a purely real number",
43
+ "property": "imaginary",
44
+ "input": [1, 0],
45
+ "expected": 0
46
+ },
47
+ {
48
+ "description": "Imaginary part of a purely imaginary number",
49
+ "property": "imaginary",
50
+ "input": [0, 1],
51
+ "expected": 1
52
+ },
53
+ {
54
+ "description": "Imaginary part of a number with real and imaginary part",
55
+ "property": "imaginary",
56
+ "input": [1, 2],
57
+ "expected": 2
58
+ }
59
+ ]
60
+ },
15
61
  {
16
62
  "description": "Imaginary unit",
17
63
  "property": "mul",
@@ -186,52 +232,6 @@
186
232
  }
187
233
  ]
188
234
  },
189
- {
190
- "description": "Real part",
191
- "cases": [
192
- {
193
- "description": "Real part of a purely real number",
194
- "property": "real",
195
- "input": [1, 0],
196
- "expected": 1
197
- },
198
- {
199
- "description": "Real part of a purely imaginary number",
200
- "property": "real",
201
- "input": [0, 1],
202
- "expected": 0
203
- },
204
- {
205
- "description": "Real part of a number with real and imaginary part",
206
- "property": "real",
207
- "input": [1, 2],
208
- "expected": 1
209
- }
210
- ]
211
- },
212
- {
213
- "description": "Imaginary part",
214
- "cases": [
215
- {
216
- "description": "Imaginary part of a purely real number",
217
- "property": "imaginary",
218
- "input": [1, 0],
219
- "expected": 0
220
- },
221
- {
222
- "description": "Imaginary part of a purely imaginary number",
223
- "property": "imaginary",
224
- "input": [0, 1],
225
- "expected": 1
226
- },
227
- {
228
- "description": "Imaginary part of a number with real and imaginary part",
229
- "property": "imaginary",
230
- "input": [1, 2],
231
- "expected": 2
232
- }
233
- ]
234
- },
235
235
  {
236
236
  "description": "Complex exponential function",
237
237
  "comments": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "exercise": "custom-set",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "comments": [
5
5
  "These tests cover the core components of a set data structure: checking",
6
6
  "presence, adding, comparing and basic set operations. Other features",
@@ -239,22 +239,28 @@
239
239
  {
240
240
  "description": "add to empty set",
241
241
  "property": "add",
242
- "set": [],
243
- "element": 3,
242
+ "input": {
243
+ "set": [],
244
+ "element": 3
245
+ },
244
246
  "expected": [3]
245
247
  },
246
248
  {
247
249
  "description": "add to non-empty set",
248
250
  "property": "add",
249
- "set": [1, 2, 4],
250
- "element": 3,
251
+ "input": {
252
+ "set": [1, 2, 4],
253
+ "element": 3
254
+ },
251
255
  "expected": [1, 2, 3, 4]
252
256
  },
253
257
  {
254
258
  "description": "adding an existing element does not change the set",
255
259
  "property": "add",
256
- "set": [1, 2, 3],
257
- "element": 3,
260
+ "input": {
261
+ "set": [1, 2, 3],
262
+ "element": 3
263
+ },
258
264
  "expected": [1, 2, 3]
259
265
  }
260
266
  ]
@@ -206,7 +206,7 @@ procedure PhoneNumberTests.Formats_a_number;
206
206
  var phone: IPhoneNumber;
207
207
  begin
208
208
  phone := NewPhoneNumber('2234567890');
209
- assert.AreEqual('(223) 456-7890', phone.ToString);
209
+ assert.AreEqual('(223) 456-7890', phone.Formatted);
210
210
  end;
211
211
 
212
212
  initialization
@@ -80,6 +80,11 @@ defmodule ProteinTranslationTest do
80
80
  assert ProteinTranslation.of_rna("CARROT") == { :error, "invalid RNA" }
81
81
  end
82
82
 
83
+ @tag :pending
84
+ test "invalid codon at end of RNA" do
85
+ assert ProteinTranslation.of_rna("UUUROT") == { :error, "invalid RNA" }
86
+ end
87
+
83
88
  @tag :pending
84
89
  test "invalid codon" do
85
90
  assert ProteinTranslation.of_codon("INVALID") == { :error, "invalid codon" }
@@ -954,6 +954,16 @@
954
954
  "unlocked_by": "queen-attack",
955
955
  "uuid": "471c89f9-8b27-4898-8e98-58e4b2921616"
956
956
  },
957
+ {
958
+ "core": false,
959
+ "difficulty": 6,
960
+ "slug": "complex-numbers",
961
+ "topics": [
962
+ "mathematics"
963
+ ],
964
+ "unlocked_by": "leap",
965
+ "uuid": "d993508d-b4d2-4f3f-a46d-35b753bf90a9"
966
+ },
957
967
  {
958
968
  "core": false,
959
969
  "difficulty": 6,
@@ -224,6 +224,8 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SpiralMatrix", "spiral-matr
224
224
  EndProject
225
225
  Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ArmstrongNumbers", "armstrong-numbers\ArmstrongNumbers.fsproj", "{48345F81-5B0F-4C2C-9403-84CBF918714C}"
226
226
  EndProject
227
+ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ComplexNumbers", "complex-numbers\ComplexNumbers.fsproj", "{79DD3BB0-7693-4DE3-98AD-E28A7DD91758}"
228
+ EndProject
227
229
  Global
228
230
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
229
231
  Debug|Any CPU = Debug|Any CPU
@@ -674,6 +676,10 @@ Global
674
676
  {48345F81-5B0F-4C2C-9403-84CBF918714C}.Debug|Any CPU.Build.0 = Debug|Any CPU
675
677
  {48345F81-5B0F-4C2C-9403-84CBF918714C}.Release|Any CPU.ActiveCfg = Release|Any CPU
676
678
  {48345F81-5B0F-4C2C-9403-84CBF918714C}.Release|Any CPU.Build.0 = Release|Any CPU
679
+ {79DD3BB0-7693-4DE3-98AD-E28A7DD91758}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
680
+ {79DD3BB0-7693-4DE3-98AD-E28A7DD91758}.Debug|Any CPU.Build.0 = Debug|Any CPU
681
+ {79DD3BB0-7693-4DE3-98AD-E28A7DD91758}.Release|Any CPU.ActiveCfg = Release|Any CPU
682
+ {79DD3BB0-7693-4DE3-98AD-E28A7DD91758}.Release|Any CPU.Build.0 = Release|Any CPU
677
683
  EndGlobalSection
678
684
  GlobalSection(SolutionProperties) = preSolution
679
685
  HideSolutionNode = FALSE
@@ -1,3 +1,5 @@
1
+ // This file was created manually and its version is 1.0.0
2
+
1
3
  module AccumulateTest
2
4
 
3
5
  open System
@@ -1,3 +1,5 @@
1
+ // This file was created manually and its version is 1.0.0.
2
+
1
3
  module BankAccountTest
2
4
 
3
5
  open Xunit
@@ -1,3 +1,5 @@
1
+ // This file was created manually and its version is 1.0.0.
2
+
1
3
  module BinarySearchTreeTest
2
4
 
3
5
  open Xunit
@@ -1,3 +1,5 @@
1
+ // This file was created manually and its version is 1.0.0.
2
+
1
3
  module BinaryTest
2
4
 
3
5
  open FsUnit.Xunit
@@ -1,140 +1,144 @@
1
+ // This file was auto-generated based on version 1.0.1 of the canonical data.
2
+
1
3
  module CircularBufferTest
2
4
 
3
- open Xunit
4
5
  open FsUnit.Xunit
6
+ open Xunit
5
7
  open System
6
8
 
7
9
  open CircularBuffer
8
10
 
9
11
  [<Fact>]
10
- let ``Write and read back one item`` () =
11
- let buffer1 = mkCircularBuffer 1 |> write '1'
12
- let (val2, buffer2) = read buffer1
13
-
14
- val2 |> should equal '1'
15
- (fun () -> read buffer2 |> ignore) |> should throw typeof<Exception>
16
-
17
- [<Fact(Skip = "Remove to run test")>]
18
- let ``Write and read back multiple items`` () =
19
- let buffer1 =
20
- mkCircularBuffer 2
21
- |> write '1'
22
- |> write '2'
23
-
24
- let (val2, buffer2) = read buffer1
25
- let (val3, buffer3) = read buffer2
12
+ let ``Reading empty buffer should fail`` () =
13
+ let buffer1 = mkCircularBuffer 1
14
+ (fun () -> read buffer1 |> ignore) |> should throw typeof<Exception>
15
+
16
+
17
+ [<Fact(Skip = "Remove to run test")>]
18
+ let ``Can read an item just written`` () =
19
+ let buffer1 = mkCircularBuffer 1
20
+ let buffer2 = write 1 buffer1
21
+ let (val3, _) = read buffer2
22
+ val3 |> should equal 1
23
+
26
24
 
27
- val2 |> should equal '1'
28
- val3 |> should equal '2'
25
+ [<Fact(Skip = "Remove to run test")>]
26
+ let ``Each item may only be read once`` () =
27
+ let buffer1 = mkCircularBuffer 1
28
+ let buffer2 = write 1 buffer1
29
+ let (val3, buffer3) = read buffer2
30
+ val3 |> should equal 1
29
31
  (fun () -> read buffer3 |> ignore) |> should throw typeof<Exception>
30
32
 
31
- [<Fact(Skip = "Remove to run test")>]
32
- let ``Clearing buffer`` () =
33
- let buffer1 = mkCircularBuffer 3
34
- let buffer2 = List.fold (fun buffer value -> write value buffer) buffer1 ['1'..'3']
35
- let buffer3 = clear buffer2
33
+
34
+ [<Fact(Skip = "Remove to run test")>]
35
+ let ``Items are read in the order they are written`` () =
36
+ let buffer1 = mkCircularBuffer 2
37
+ let buffer2 = write 1 buffer1
38
+ let buffer3 = write 2 buffer2
39
+ let (val4, buffer4) = read buffer3
40
+ val4 |> should equal 1
41
+ let (val5, _) = read buffer4
42
+ val5 |> should equal 2
36
43
 
37
- let buffer4 =
38
- buffer3
39
- |> write '1'
40
- |> write '2'
41
44
 
42
- let (val5, buffer5) = read buffer4
43
- let buffer6 = buffer5 |> write '3'
44
- let (val7, _) = read buffer6
45
+ [<Fact(Skip = "Remove to run test")>]
46
+ let ``Full buffer can't be written to`` () =
47
+ let buffer1 = mkCircularBuffer 1
48
+ let buffer2 = write 1 buffer1
49
+ (fun () -> write 2 buffer2 |> ignore) |> should throw typeof<Exception>
50
+
45
51
 
46
- (fun () -> read buffer3 |> ignore) |> should throw typeof<Exception>
47
- val5 |> should equal '1'
48
- val7 |> should equal '2'
49
-
50
- [<Fact(Skip = "Remove to run test")>]
51
- let ``Alternate write and read`` () =
52
- let buffer1 = mkCircularBuffer 2
53
- let buffer2 = buffer1 |> write '1'
52
+ [<Fact(Skip = "Remove to run test")>]
53
+ let ``A read frees up capacity for another write`` () =
54
+ let buffer1 = mkCircularBuffer 1
55
+ let buffer2 = write 1 buffer1
54
56
  let (val3, buffer3) = read buffer2
55
- let buffer4 = buffer3 |> write '2'
57
+ val3 |> should equal 1
58
+ let buffer4 = write 2 buffer3
56
59
  let (val5, _) = read buffer4
60
+ val5 |> should equal 2
57
61
 
58
- val3 |> should equal '1'
59
- val5 |> should equal '2'
60
-
61
- [<Fact(Skip = "Remove to run test")>]
62
- let ``Reads back oldest item`` () =
63
- let buffer1 =
64
- mkCircularBuffer 3
65
- |> write '1'
66
- |> write '2'
67
-
68
- let (_, buffer2) = read buffer1
69
- let buffer3 = buffer2 |> write '3'
62
+
63
+ [<Fact(Skip = "Remove to run test")>]
64
+ let ``Read position is maintained even across multiple writes`` () =
65
+ let buffer1 = mkCircularBuffer 3
66
+ let buffer2 = write 1 buffer1
67
+ let buffer3 = write 2 buffer2
70
68
  let (val4, buffer4) = read buffer3
71
- let (val5, _) = read buffer4
72
- val4 |> should equal '2'
73
- val5 |> should equal '3'
74
-
75
- [<Fact(Skip = "Remove to run test")>]
76
- let ``Writing to a full buffer throws an exception`` () =
77
- let buffer =
78
- mkCircularBuffer 2
79
- |> write '1'
80
- |> write '2'
81
-
82
- (fun () -> buffer |> write 'A' |> ignore) |> should throw typeof<Exception>
83
-
84
- [<Fact(Skip = "Remove to run test")>]
85
- let ``Overwriting oldest item in a full buffer`` () =
86
- let buffer1 =
87
- mkCircularBuffer 2
88
- |> write '1'
89
- |> write '2'
90
- |> forceWrite 'A'
91
-
92
- let (val2, buffer2) = read buffer1
93
- let (val3, buffer3) = read buffer2
69
+ val4 |> should equal 1
70
+ let buffer5 = write 3 buffer4
71
+ let (val6, buffer6) = read buffer5
72
+ val6 |> should equal 2
73
+ let (val7, _) = read buffer6
74
+ val7 |> should equal 3
75
+
94
76
 
95
- val2 |> should equal '2'
96
- val3 |> should equal 'A'
77
+ [<Fact(Skip = "Remove to run test")>]
78
+ let ``Items cleared out of buffer can't be read`` () =
79
+ let buffer1 = mkCircularBuffer 1
80
+ let buffer2 = write 1 buffer1
81
+ let buffer3 = clear buffer2
97
82
  (fun () -> read buffer3 |> ignore) |> should throw typeof<Exception>
98
-
99
- [<Fact(Skip = "Remove to run test")>]
100
- let ``Forced writes to non full buffer should behave like writes`` () =
101
- let buffer1 =
102
- mkCircularBuffer 2
103
- |> write '1'
104
- |> forceWrite '2'
105
-
106
- let (val2, buffer2) = read buffer1
107
- let (val3, buffer3) = read buffer2
83
+
108
84
 
109
- val2 |> should equal '1'
110
- val3 |> should equal '2'
111
- (fun () -> read buffer3 |> ignore) |> should throw typeof<Exception>
112
-
113
- [<Fact(Skip = "Remove to run test")>]
114
- let ``Alternate read and write into buffer overflow`` () =
115
- let buffer1 = mkCircularBuffer 5
116
- let buffer2 = List.fold (fun buffer value -> write value buffer) buffer1 ['1'..'3']
117
-
118
- let (_, buffer3) = read buffer2
119
- let (_, buffer4) = read buffer3
120
- let buffer5 = buffer4 |> write '4'
121
- let (_, buffer6) = read buffer5
122
-
123
- let buffer7 =
124
- List.fold (fun buffer value -> write value buffer) buffer6 ['5'..'8']
125
- |> forceWrite 'A'
126
- |> forceWrite 'B'
127
-
128
- let folder buffer value =
129
- let (val', buffer') = read buffer
130
- val' |> should equal value |> ignore
131
- buffer'
132
-
133
- let buffer8 = List.fold folder buffer7 ['6'..'8']
85
+ [<Fact(Skip = "Remove to run test")>]
86
+ let ``Clear frees up capacity for another write`` () =
87
+ let buffer1 = mkCircularBuffer 1
88
+ let buffer2 = write 1 buffer1
89
+ let buffer3 = clear buffer2
90
+ let buffer4 = write 2 buffer3
91
+ let (val5, _) = read buffer4
92
+ val5 |> should equal 2
134
93
 
135
- let (val9, buffer9) = read buffer8
136
- let (val10, buffer10) = read buffer9
94
+
95
+ [<Fact(Skip = "Remove to run test")>]
96
+ let ``Clear does nothing on empty buffer`` () =
97
+ let buffer1 = mkCircularBuffer 1
98
+ let buffer2 = clear buffer1
99
+ let buffer3 = write 1 buffer2
100
+ let (val4, _) = read buffer3
101
+ val4 |> should equal 1
137
102
 
138
- val9 |> should equal 'A'
139
- val10 |> should equal 'B'
140
- (fun () -> read buffer10 |> ignore) |> should throw typeof<Exception>
103
+
104
+ [<Fact(Skip = "Remove to run test")>]
105
+ let ``Overwrite acts like write on non-full buffer`` () =
106
+ let buffer1 = mkCircularBuffer 2
107
+ let buffer2 = write 1 buffer1
108
+ let buffer3 = forceWrite 2 buffer2
109
+ let (val4, buffer4) = read buffer3
110
+ val4 |> should equal 1
111
+ let (val5, _) = read buffer4
112
+ val5 |> should equal 2
113
+
114
+
115
+ [<Fact(Skip = "Remove to run test")>]
116
+ let ``Overwrite replaces the oldest item on full buffer`` () =
117
+ let buffer1 = mkCircularBuffer 2
118
+ let buffer2 = write 1 buffer1
119
+ let buffer3 = write 2 buffer2
120
+ let buffer4 = forceWrite 3 buffer3
121
+ let (val5, buffer5) = read buffer4
122
+ val5 |> should equal 2
123
+ let (val6, _) = read buffer5
124
+ val6 |> should equal 3
125
+
126
+
127
+ [<Fact(Skip = "Remove to run test")>]
128
+ let ``Overwrite replaces the oldest item remaining in buffer following a read`` () =
129
+ let buffer1 = mkCircularBuffer 3
130
+ let buffer2 = write 1 buffer1
131
+ let buffer3 = write 2 buffer2
132
+ let buffer4 = write 3 buffer3
133
+ let (val5, buffer5) = read buffer4
134
+ val5 |> should equal 1
135
+ let buffer6 = write 4 buffer5
136
+ let buffer7 = forceWrite 5 buffer6
137
+ let (val8, buffer8) = read buffer7
138
+ val8 |> should equal 3
139
+ let (val9, buffer9) = read buffer8
140
+ val9 |> should equal 4
141
+ let (val10, _) = read buffer9
142
+ val10 |> should equal 5
143
+
144
+