-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implemented Chunk and SlidingWindow on string
* Including tests * improved naming on the old tests * extracted common validation * optimiziations
- Loading branch information
1 parent
0f4dcaf
commit d2ac623
Showing
15 changed files
with
265 additions
and
96 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
Funcky.Test/Extensions/StringExtensions/ChunkOnStringTest.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
using FsCheck; | ||
using FsCheck.Xunit; | ||
|
||
namespace Funcky.Test.Extensions.StringExtensions; | ||
|
||
public class ChunkOnStringTest | ||
{ | ||
[Property] | ||
public Property ChunkingAnEmptyStringWillAlwaysYieldAndEmptySequence(PositiveInt width) | ||
=> string.Empty | ||
.Chunk(width.Get) | ||
.None() | ||
.ToProperty(); | ||
|
||
[Fact] | ||
public void GivenAnSingleElementListWeGetEnumerableWithOneElement() | ||
{ | ||
var value = "a"; | ||
|
||
var chunked = value.Chunk(3); | ||
|
||
Assert.Collection( | ||
chunked, | ||
chunk => Assert.Equal("a", chunk)); | ||
} | ||
|
||
[Fact] | ||
public void GivenAnStringWhichIsNotAMultipleOfSizeWeHaveASmallerLastString() | ||
{ | ||
var value = "abcdefghij"; | ||
|
||
const int chunkSize = 4; | ||
var chunked = value.Chunk(chunkSize); | ||
|
||
Assert.Collection( | ||
chunked, | ||
chunk => Assert.Equal(chunkSize, chunk.Length), | ||
chunk => Assert.Equal(chunkSize, chunk.Length), | ||
chunk => Assert.Equal(value.Length % chunkSize, chunk.Length)); | ||
} | ||
|
||
[Fact] | ||
public void AChunkOfAStringReturnsAListOfConsecutivePartialStrings() | ||
{ | ||
const int width = 3; | ||
var source = "epsilon"; | ||
|
||
Assert.Collection( | ||
source.Chunk(width), | ||
chunk => { Assert.Equal("eps", chunk); }, | ||
chunk => { Assert.Equal("ilo", chunk); }, | ||
chunk => { Assert.Equal("n", chunk); }); | ||
} | ||
} |
57 changes: 57 additions & 0 deletions
57
Funcky.Test/Extensions/StringExtensions/SlidingWindowOnStringTest.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
using FsCheck; | ||
using FsCheck.Xunit; | ||
|
||
namespace Funcky.Test.Extensions.StringExtensions; | ||
|
||
public class SlidingWindowOnStringTest | ||
{ | ||
[Property] | ||
public Property ASlidingWindowFromAnEmptyStringWillAlwaysYieldAnEmptySequence(PositiveInt width) | ||
=> string.Empty | ||
.SlidingWindow(width.Get) | ||
.None() | ||
.ToProperty(); | ||
|
||
[Fact] | ||
public void SlidingWindowReturnsAListOfOverlappingPartialStrings() | ||
{ | ||
const int width = 4; | ||
var source = "epsilon"; | ||
|
||
Assert.Collection( | ||
source.SlidingWindow(width), | ||
window => { Assert.Equal("epsi", window); }, | ||
window => { Assert.Equal("psil", window); }, | ||
window => { Assert.Equal("silo", window); }, | ||
window => { Assert.Equal("ilon", window); }); | ||
} | ||
|
||
[Fact] | ||
public void GivenASourceStringEqualInLengthToTheSlidingWindowWidthReturnsASequenceWithOneElement() | ||
{ | ||
var source = "gamma"; | ||
|
||
Assert.Single(source.SlidingWindow(5)); | ||
Assert.Equal(source, source.SlidingWindow(5).Single()); | ||
} | ||
|
||
[Fact] | ||
public void GivenASourceSequenceShorterThanTheSlidingWindowWidthReturnsAnEmptySequence() | ||
{ | ||
var source = "gamma"; | ||
|
||
Assert.Empty(source.SlidingWindow(10)); | ||
} | ||
|
||
[Theory] | ||
[InlineData(int.MinValue)] | ||
[InlineData(-42)] | ||
[InlineData(-1)] | ||
[InlineData(0)] | ||
public void SlidingWindowThrowsOnNonPositiveWidth(int width) | ||
{ | ||
var source = "Just a simple test!"; | ||
|
||
Assert.Throws<ArgumentOutOfRangeException>(() => source.SlidingWindow(width)); | ||
} | ||
} |
Oops, something went wrong.