Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,19 @@
char singleChar = StringHelper.ConvertSingleCharacterStringToChar(singleCharString);
Console.WriteLine(singleChar);

char firstChar = StringHelper.GetCharacterAtIndex(myString, 0);
char lastChar = myString[^1];
Console.WriteLine($"{firstChar} {lastChar}");

if (StringHelper.TryConvertSingleCharacterStringToChar("AB", out char parsed))
Console.WriteLine(parsed);
else
Console.WriteLine("Not a single character");

ReadOnlySpan<char> charArrayReadOnlySpan = StringHelper.ConvertStringToCharArrayUsingReadOnlySpan(myString);
PrintArray(charArrayReadOnlySpan);

string[] stringArray = { "C#", "is", "awesome" };
string[] stringArray = ["C#", "is", "awesome"];
char[] combinedCharArray = StringHelper.ConvertStringArrayToCharArrayUsingLoop(stringArray);
PrintArray(combinedCharArray);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,30 @@ public static char ConvertSingleCharacterStringToChar(string inputString)
return char.Parse(inputString);
}

public static char[] ConvertStringArrayToCharArrayUsingLoop(string[] stringArray)
{
var combinedString = new StringBuilder();
public static char GetCharacterAtIndex(string inputString, int index)
{
return inputString[index];
}

foreach (var str in stringArray)
public static bool TryConvertSingleCharacterStringToChar(string? inputString, out char result)
{
combinedString.Append(str);
return char.TryParse(inputString, out result);
}

var result = new char[combinedString.Length];
combinedString.CopyTo(0, result, 0, result.Length);
public static char[] ConvertStringArrayToCharArrayUsingLoop(string[] stringArray)
{
var combinedString = new StringBuilder();

return result;
}
foreach (var str in stringArray)
{
combinedString.Append(str);
}

var result = new char[combinedString.Length];
combinedString.CopyTo(0, result, 0, result.Length);

return result;
}

public static char[] ConvertStringArrayToCharArrayUsingLinq(string[] stringArray)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

Expand All @@ -10,13 +10,13 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.11.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="4.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.2">
<PackageReference Include="coverlet.collector" Version="10.1.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,55 @@ public void GivenStringArrayToCharArray_WhenValidInput_ThenReturnsCharArray()
Assert.Equal(InputString.ToCharArray(), resultLinq);
}

[Theory]
[InlineData("AB")]
[InlineData("")]
public void GivenStringToChar_WhenLengthIsNotOne_ThenThrowsFormatException(string inputString)
{
Assert.Throws<FormatException>(() => StringHelper.ConvertSingleCharacterStringToChar(inputString));
}

[Fact]
public void GivenStringToChar_WhenInvalidInput_ThenThrowsArgumentException()
public void GivenStringToChar_WhenNull_ThenThrowsArgumentNullException()
{
const string inputString = "AB";
Assert.Throws<ArgumentNullException>(() => StringHelper.ConvertSingleCharacterStringToChar(null!));
}

Assert.Throws<FormatException>(() => StringHelper.ConvertSingleCharacterStringToChar(inputString));
[Fact]
public void GivenCharacterAtIndex_WhenIndexInRange_ThenReturnsThatChar()
{
Assert.Equal('H', StringHelper.GetCharacterAtIndex(InputString, 0));
Assert.Equal('W', StringHelper.GetCharacterAtIndex(InputString, 7));
}

[Fact]
public void GivenCharacterAtIndex_WhenStringIsEmpty_ThenThrowsIndexOutOfRangeException()
{
Assert.Throws<IndexOutOfRangeException>(() => StringHelper.GetCharacterAtIndex(string.Empty, 0));
}

[Theory]
[InlineData("A", true)]
[InlineData("AB", false)]
[InlineData("", false)]
[InlineData(null, false)]
public void GivenTryConvert_WhenCalled_ThenReportsSuccessWithoutThrowing(string? inputString, bool expectedSuccess)
{
bool success = StringHelper.TryConvertSingleCharacterStringToChar(inputString, out char result);

Assert.Equal(expectedSuccess, success);
if (success)
Assert.Equal(inputString![0], result);
}

[Fact]
public void GivenEmoji_WhenConverted_ThenTwoCharsAndParseFails()
{
const string thumbsUp = "\U0001F44D";

Assert.Equal(2, thumbsUp.Length);
Assert.True(char.IsHighSurrogate(StringHelper.GetCharacterAtIndex(thumbsUp, 0)));
Assert.False(StringHelper.TryConvertSingleCharacterStringToChar(thumbsUp, out _));
Assert.Equal(0x1F44D, System.Text.Rune.GetRuneAt(thumbsUp, 0).Value);
}
}
Loading