-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c0d6c67
commit b0306d8
Showing
8 changed files
with
614 additions
and
0 deletions.
There are no files selected for viewing
24 changes: 24 additions & 0 deletions
24
...ensions.Guid/Allegro.Extensions.Guid.Tests.Unit/Allegro.Extensions.Guid.Tests.Unit.csproj
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,24 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<PropertyGroup> | ||
<GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute> | ||
<GenerateDocumentationFile>false</GenerateDocumentationFile> | ||
<IsPackable>false</IsPackable> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0"/> | ||
<PackageReference Include="xunit" Version="2.4.1"/> | ||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"> | ||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||
<PrivateAssets>all</PrivateAssets> | ||
</PackageReference> | ||
<PackageReference Include="coverlet.collector" Version="3.1.2"> | ||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||
<PrivateAssets>all</PrivateAssets> | ||
</PackageReference> | ||
<PackageReference Include="FluentAssertions" Version="6.2.0"/> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<ProjectReference Include="..\Allegro.Extensions.Guid\Allegro.Extensions.Guid.csproj" /> | ||
</ItemGroup> | ||
</Project> |
170 changes: 170 additions & 0 deletions
170
src/Allegro.Extensions.Guid/Allegro.Extensions.Guid.Tests.Unit/FGuidTests.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,170 @@ | ||
using FluentAssertions; | ||
using Xunit; | ||
using Xunit.Abstractions; | ||
|
||
// ReSharper disable ArgumentsStyleNamedExpression | ||
namespace Allegro.Extensions.Guid.Tests.Unit; | ||
|
||
public class FGuidTests | ||
{ | ||
private readonly ITestOutputHelper _output; | ||
|
||
public FGuidTests(ITestOutputHelper output) | ||
{ | ||
_output = output; | ||
FGuid.ResetOptions(); | ||
} | ||
|
||
[Fact] | ||
public void Examples() | ||
{ | ||
_output.WriteLine($"Generate(): {FGuid.Generate()}"); | ||
} | ||
|
||
[Fact] | ||
public void ExamplesStruct() | ||
{ | ||
_output.WriteLine($"Generate(): {FGuid.NewGuid()}"); | ||
} | ||
|
||
[Theory] | ||
[InlineData("1234", true)] | ||
[InlineData(" 1234 ", true)] | ||
[InlineData("1-234", false)] | ||
[InlineData("1a234", false)] | ||
public void Parse(string toParse, bool expected) | ||
{ | ||
var parsed = FGuid.TryParse(toParse, out _); | ||
parsed.Should().Be(expected); | ||
} | ||
|
||
[Fact] | ||
public void CompareStructs() | ||
{ | ||
var fguid = FGuid.NewGuid(); | ||
var fguidToString = fguid.ToString(); | ||
var fguidFromString = FGuid.Parse(fguidToString); | ||
var fguidRandomNumber = FGuid.Parse("1234"); | ||
fguid.Should().Be(fguidFromString); | ||
fguid.Should().NotBe(fguidToString); // different type | ||
fguid.Should().NotBe(fguidRandomNumber); // different value | ||
// TODO: more comparision | ||
} | ||
|
||
[Fact] | ||
public void ConfigurationNotChanged() | ||
{ | ||
var configuration = FGuid.GetFormattedConfiguration(); | ||
_output.WriteLine($"GetFormatted: {configuration}"); | ||
configuration.Should().NotContain("192.168.1.1"); | ||
} | ||
|
||
[Fact] | ||
public void NoReasonableCollision() | ||
{ | ||
var l = new List<string>(); | ||
|
||
for (var i = 0; i <= 1_200_000; i++) | ||
{ | ||
var gen = FGuid.Generate(); | ||
l.Add(gen); | ||
} | ||
|
||
l.Should().OnlyHaveUniqueItems(); | ||
} | ||
|
||
[Theory] | ||
[InlineData(1_200_000)] | ||
#pragma warning disable xUnit1028 | ||
public IList<long> NoReasonableCollisionLong(int count) | ||
#pragma warning restore xUnit1028 | ||
{ | ||
var l = new List<long>(); | ||
|
||
for (var i = 0; i <= count; i++) | ||
{ | ||
var gen = FGuid.GenerateLong(); | ||
l.Add(gen); | ||
} | ||
|
||
l.Should().OnlyHaveUniqueItems(); | ||
|
||
return l; | ||
} | ||
|
||
[Fact] | ||
public void NoReasonableCollisionLong_MultiThread() | ||
{ | ||
var range = Enumerable.Range(1, 4); | ||
var results = new List<IEnumerable<long>>(); | ||
|
||
Parallel.ForEach( | ||
range, | ||
_ => | ||
{ | ||
_output.WriteLine( | ||
$"Thread: {Environment.CurrentManagedThreadId}, Configuration: {FGuid.GetFormattedConfiguration}"); | ||
var l = NoReasonableCollisionLong(300_000); | ||
_output.WriteLine($"count: {l.Count}"); | ||
results.Add(l); | ||
}); | ||
|
||
var sum = results.SelectMany(list => list).ToList(); | ||
_output.WriteLine($"sum count: {sum.Count}"); | ||
|
||
sum.Should().OnlyHaveUniqueItems(); | ||
} | ||
|
||
[Fact] | ||
public void FGuidsAreShorterThanGuids() | ||
{ | ||
var guid = System.Guid.NewGuid().ToString().Replace("-", string.Empty); | ||
var guidLength = guid.Length; | ||
var fguid = FGuid.Generate(); | ||
var fguidLength = fguid.Length; | ||
|
||
_output.WriteLine($"Guid: Len: {guidLength} : {guid}"); | ||
_output.WriteLine($"Guid: Len: {fguidLength} : {fguid}"); | ||
|
||
guidLength.Should().Be(32); | ||
fguidLength.Should().Be(19); | ||
} | ||
|
||
[Fact] | ||
public void TestMaxLength() | ||
{ | ||
FGuid.GetMaxLength().Should().Be(19); | ||
} | ||
} | ||
|
||
public class FGuidConfigurationTests | ||
{ | ||
private readonly ITestOutputHelper _output; | ||
|
||
public FGuidConfigurationTests(ITestOutputHelper output) | ||
{ | ||
_output = output; | ||
FGuid.ResetOptions(); | ||
} | ||
|
||
[Fact] | ||
public void ChangeConfiguration() | ||
{ | ||
FGuid.SetOptions( | ||
new( | ||
new GeneratorIdStructureOptions( | ||
TimestampBits: GeneratorDefaultOptions.TimestampBits, | ||
GeneratorIpBits: GeneratorDefaultOptions.GeneratorIpBits, | ||
GeneratorClusterBits: GeneratorDefaultOptions.GeneratorClusterBits, | ||
SequenceBits: GeneratorDefaultOptions.SequenceBits), | ||
new GeneratorMachineOptions( | ||
Ip: "192.168.1.1", | ||
Netmask: 20, | ||
ClusterNumber: 1))); | ||
|
||
var configuration = FGuid.GetFormattedConfiguration(); | ||
_output.WriteLine($"GetFormatted: {configuration}"); | ||
configuration.Should().Contain("192.168.1.1"); | ||
} | ||
} |
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,22 @@ | ||
|
||
Microsoft Visual Studio Solution File, Format Version 12.00 | ||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Allegro.Extensions.Guid", "Allegro.Extensions.Guid\Allegro.Extensions.Guid.csproj", "{D47784BF-7EC8-4129-8F49-67BA9D3FF3C1}" | ||
EndProject | ||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Allegro.Extensions.Guid.Tests.Unit", "Allegro.Extensions.Guid.Tests.Unit\Allegro.Extensions.Guid.Tests.Unit.csproj", "{EAB26A65-AD47-4EE1-9402-4697DD3F5B7A}" | ||
EndProject | ||
Global | ||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||
Debug|Any CPU = Debug|Any CPU | ||
Release|Any CPU = Release|Any CPU | ||
EndGlobalSection | ||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||
{D47784BF-7EC8-4129-8F49-67BA9D3FF3C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
{D47784BF-7EC8-4129-8F49-67BA9D3FF3C1}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
{D47784BF-7EC8-4129-8F49-67BA9D3FF3C1}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
{D47784BF-7EC8-4129-8F49-67BA9D3FF3C1}.Release|Any CPU.Build.0 = Release|Any CPU | ||
{EAB26A65-AD47-4EE1-9402-4697DD3F5B7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
{EAB26A65-AD47-4EE1-9402-4697DD3F5B7A}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
{EAB26A65-AD47-4EE1-9402-4697DD3F5B7A}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
{EAB26A65-AD47-4EE1-9402-4697DD3F5B7A}.Release|Any CPU.Build.0 = Release|Any CPU | ||
EndGlobalSection | ||
EndGlobal |
15 changes: 15 additions & 0 deletions
15
src/Allegro.Extensions.Guid/Allegro.Extensions.Guid/Allegro.Extensions.Guid.csproj
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,15 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<PropertyGroup> | ||
<PackageId>Allegro.Extensions.Guid</PackageId> | ||
<PackageDescription>Contains FGuid</PackageDescription> | ||
<NoWarn>${NoWarn},SA1516,MA0076,MA0011,SA1118,SA1204,SA1202,MA0008</NoWarn> | ||
</PropertyGroup> | ||
<Import Project="..\..\Package.Build.props"/> | ||
<ItemGroup> | ||
<PackageReference Include="IdGen" Version="3.0.1"/> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<InternalsVisibleTo Include="Allegro.Extensions.Guid.Tests.Unit"/> | ||
</ItemGroup> | ||
</Project> |
Oops, something went wrong.