Skip to content

Commit

Permalink
Add unfinal changes
Browse files Browse the repository at this point in the history
  • Loading branch information
fembina committed Nov 29, 2024
1 parent b61ea8e commit 98f2acc
Show file tree
Hide file tree
Showing 40 changed files with 1,539 additions and 951 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Engines;
using Talkie.Models;
using Talkie.Sequences;

namespace Talkie.Benchmarks.Benchmarks;

[MemoryDiagnoser]
[SimpleJob(RunStrategy.Throughput)]
public class FirstAndLastAndContainsBenchmark
{
private const int Capacity = 10;

private FrozenSequence<Reference>? _frozenSequence;

private IEnumerable<Reference>? _referenceFrozenSequence;

private RemovableSequence<Reference>? _removableSequence;

private Sequence<Reference>? _sequence;

private LinkedList<Reference>? _linkedList;

private List<Reference>? _list;

[GlobalSetup]
public void Setup()
{
SetupFrozenSequence();
SetupRemovableSequence();
SetupSequence();
SetupLinkedList();
SetupList();
}

public void SetupFrozenSequence()
{
var sequence = new List<Reference>();

for (var i = 0; i < Capacity; i++)
{
sequence.Add(Reference.Shared);
}

_frozenSequence = sequence.ToFrozenSequence();
_referenceFrozenSequence = _frozenSequence;
}

public void SetupRemovableSequence()
{
var removableSequence = new RemovableSequence<Reference>();

for (var i = 0; i < Capacity; i++)
{
_ = removableSequence.Add(Reference.Shared);
}

_removableSequence = removableSequence;
}

public void SetupSequence()
{
var sequence = new Sequence<Reference>();

for (var i = 0; i < Capacity; i++)
{
sequence.Add(Reference.Shared);
}

_sequence = sequence;
}

public void SetupLinkedList()
{
var linkedList = new LinkedList<Reference>();

for (var i = 0; i < Capacity; i++)
{
_ = linkedList.AddLast(Reference.Shared);
}

_linkedList = linkedList;
}

public void SetupList()
{
var list = new List<Reference>();

for (var i = 0; i < Capacity; i++)
{
list.Add(Reference.Shared);
}

_list = list;
}

[Benchmark]
public void RunFrozenSequenceForeach()
{
_ = _frozenSequence!.First();
_ = _frozenSequence!.Last();
}

[Benchmark]
public void RunReferenceFrozenSequenceForeach()
{
_ = _referenceFrozenSequence!.First();
_ = _referenceFrozenSequence!.Last();
}

[Benchmark]
public void RunReferenceSequencingFrozenSequenceForeach()
{
_ = _referenceFrozenSequence!.Sequencing().First();
_ = _referenceFrozenSequence!.Sequencing().Last();
}

[Benchmark]
public void RunRemovableSequenceForeach()
{
_ = _removableSequence!.First();
_ = _removableSequence!.Last();
}

[Benchmark]
public void RunSequenceForeach()
{
_ = _sequence!.First();
_ = _sequence!.Last();
}

[Benchmark]
public void RunLinkedListForeach()
{
_ = _linkedList!.First();
_ = _linkedList!.Last();
}

[Benchmark]
public void RunListForeach()
{
_ = _list!.First();
_ = _list!.Last();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@

namespace Talkie.Benchmarks.Benchmarks;

[MemoryDiagnoser]
[SimpleJob(RunStrategy.Throughput)]
public class ForeachBenchmark
{
private FrozenSequence<Reference>? _frozenSequence;

private IEnumerable<Reference>? _referenceFrozenSequence;

private RemovableSequence<Reference>? _removableSequence;

private Sequence<Reference>? _sequence;
Expand All @@ -18,7 +21,9 @@ public class ForeachBenchmark

private List<Reference>? _list;

[Params(0, 1, 10, 100, 1000, 10000)]
private IEnumerable<Reference>? _referenceList;

[Params(0, 1, 10)]
public int Capacity { get; set; }

[GlobalSetup]
Expand All @@ -41,6 +46,7 @@ public void SetupFrozenSequence()
}

_frozenSequence = sequence.ToFrozenSequence();
_referenceFrozenSequence = _frozenSequence;
}

public void SetupRemovableSequence()
Expand Down Expand Up @@ -89,6 +95,7 @@ public void SetupList()
}

_list = list;
_referenceList = _list;
}

[Benchmark]
Expand All @@ -100,6 +107,15 @@ public void RunFrozenSequenceForeach()
}
}

[Benchmark]
public void RunReferenceFrozenSequenceForeach()
{
foreach (var value in _referenceFrozenSequence!)
{
_ = value;
}
}

[Benchmark]
public void RunRemovableSequenceForeach()
{
Expand Down Expand Up @@ -135,4 +151,13 @@ public void RunListForeach()
_ = value;
}
}

[Benchmark]
public void RunReferenceListForeach()
{
foreach (var value in _referenceList!)
{
_ = value;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<ItemGroup Label="Dependencies">
<ProjectReference Include="..\..\Sources\Falko.Talkie.Core\Falko.Talkie.Core.csproj" />
<PackageReference Include="BenchmarkDotNet" />
<ProjectReference Include="..\..\Sources\Falko.Talkie.Signals.Extensions\Falko.Talkie.Signals.Extensions.csproj" />
</ItemGroup>
</Project>
30 changes: 25 additions & 5 deletions Benchmarks/Falko.Talkie.Benchmarks.Sequences/Program.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,26 @@
using BenchmarkDotNet.Running;
using Talkie.Benchmarks.Benchmarks;
using Talkie.Flows;
using Talkie.Pipelines.Handling;
using Talkie.Pipelines.Intercepting;
using Talkie.Signals;

BenchmarkRunner.Run<AddBenchmark>();
BenchmarkRunner.Run<RemoveBenchmark>();
BenchmarkRunner.Run<ForeachBenchmark>();
using var flow = new SignalFlow();

flow.Subscribe<UserEntrySignal>(signals => signals
.Where(signal => signal.LastName is "Falko")
.Take(1)
.Handle(context => Console
.WriteLine(context
.Signal)));

flow.Subscribe<UserEntrySignal>(signals => signals
.Where(signal => signal.LastName is "Borodin")
.Take(1)
.Handle(context => Console
.WriteLine(context
.Signal)));

await flow.PublishAsync(new UserEntrySignal("Rima", "Falko"));
await flow.PublishAsync(new UserEntrySignal("Timur", "Falko"));
await flow.PublishAsync(new UserEntrySignal("Misha", "Borodin"));

file sealed record UserEntrySignal(string FirstName, string LastName) : Signal;
26 changes: 13 additions & 13 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
<Project>
<ItemGroup Label="Dependencies">
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.0" />
<PackageVersion Include="Serilog" Version="4.1.0" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageVersion Include="NUnit" Version="4.2.2" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageVersion Include="NUnit.Analyzers" Version="4.4.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
</ItemGroup>
</Project>
<ItemGroup Label="Dependencies">
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.0" />
<PackageVersion Include="Serilog" Version="4.1.0" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageVersion Include="NUnit" Version="4.2.2" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageVersion Include="NUnit.Analyzers" Version="4.4.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
</ItemGroup>
</Project>
4 changes: 2 additions & 2 deletions Examples.Build.props
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<Project>
<Import Project="Common.Build.props" />
<Import Project="Common.uild.props" />

<PropertyGroup Label="Assembly">
<OutputType>exe</OutputType>
<PublishAot>true</PublishAot>
<PublishAot>false</PublishAot>
<OptimizationPreference>speed</OptimizationPreference>
<TrimMode>full</TrimMode>
<ServerGarbageCollection>true</ServerGarbageCollection>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Talkie.Flows;
using Talkie.Handlers;
using Talkie.Models.Messages;
using Talkie.Models.Messages.Attachments;
using Talkie.Pipelines.Handling;
using Talkie.Pipelines.Intercepting;
using Talkie.Signals;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public void Subscribe(ISignalFlow flow, IRegisterOnlyDisposableScope disposables
.PublishMessageAsync(message => message
.SetReply(context.GetMessage())
.SetContent(content => content
.AddText(nameof(Talkie), [BoldTextStyle.FromTextRange, BoldTextStyle.FromTextRange])
.AddText(nameof(Talkie), BoldTextStyle.FromTextRange)
.AddText(" is a library for building chatbots in .NET.", ItalicTextStyle.FromTextRange, BoldTextStyle.FromTextRange)),
cancellation)
.AsValueTask())
Expand Down
76 changes: 36 additions & 40 deletions Falko.Talkie.slnx
Original file line number Diff line number Diff line change
@@ -1,41 +1,37 @@
<Solution>
<Folder Name="/Assets/">
<File Path="Common.Build.props" />
<File Path="nuget.config" />
<File Path=".gitignore" />
<File Path=".gitattributes" />
<File Path="ReadMe.md" />
<File Path="Benchmarks.Build.props" />
<File Path="Examples.Build.props" />
<File Path="Logo512.png" />
<File Path="Sources.Build.props" />
<File Path="Tests.Build.props" />
<File Path="Directory.Packages.props" />
<File Path="Icon64.png" />
<File Path="License.md" />
</Folder>

<Folder Name="/Benchmarks/">
<Project Path="Benchmarks\Falko.Talkie.Benchmarks.Sequences\Falko.Talkie.Benchmarks.Sequences.csproj" Type="Classic C#" />
</Folder>

<Folder Name="/Examples/">
<Project Path="Examples\Falko.Talkie.Examples.Microsoft.Hosting\Falko.Talkie.Examples.Microsoft.Hosting.csproj" Type="Classic C#" />
</Folder>

<Folder Name="/Sources/">
<Project Path="Sources\Falko.Talkie.Bridges.Telegram\Falko.Talkie.Bridges.Telegram.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Core\Falko.Talkie.Core.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Microsoft.Hosting\Falko.Talkie.Microsoft.Hosting.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Platforms.Telegram\Falko.Talkie.Platforms.Telegram.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Platforms\Falko.Talkie.Platforms.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Adapters\Falko.Talkie.Signals.Adapters.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Connections\Falko.Talkie.Signals.Connections.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Extensions\Falko.Talkie.Signals.Extensions.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals\Falko.Talkie.Signals.csproj" Type="Classic C#" />
</Folder>

<Folder Name="/Tests/">
<Project Path="Tests\Falko.Talkie.Tests.Sequences\Falko.Talkie.Tests.Sequences.csproj" Type="Classic C#" />
</Folder>
</Solution>
<Folder Name="/Assets/">
<File Path="Common.Build.props" />
<File Path="nuget.config" />
<File Path=".gitignore" />
<File Path=".gitattributes" />
<File Path="ReadMe.md" />
<File Path="Benchmarks.Build.props" />
<File Path="Examples.Build.props" />
<File Path="Logo512.png" />
<File Path="Sources.Build.props" />
<File Path="Tests.Build.props" />
<File Path="Directory.Packages.props" />
<File Path="Icon64.png" />
<File Path="License.md" />
</Folder>
<Folder Name="/Benchmarks/">
<Project Path="Benchmarks\Falko.Talkie.Benchmarks.Sequences\Falko.Talkie.Benchmarks.Sequences.csproj" Type="Classic C#" />
</Folder>
<Folder Name="/Examples/">
<Project Path="Examples\Falko.Talkie.Examples.Microsoft.Hosting\Falko.Talkie.Examples.Microsoft.Hosting.csproj" Type="Classic C#" />
</Folder>
<Folder Name="/Sources/">
<Project Path="Sources\Falko.Talkie.Bridges.Telegram\Falko.Talkie.Bridges.Telegram.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Core\Falko.Talkie.Core.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Microsoft.Hosting\Falko.Talkie.Microsoft.Hosting.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Platforms.Telegram\Falko.Talkie.Platforms.Telegram.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Platforms\Falko.Talkie.Platforms.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Adapters\Falko.Talkie.Signals.Adapters.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Connections\Falko.Talkie.Signals.Connections.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals.Extensions\Falko.Talkie.Signals.Extensions.csproj" Type="Classic C#" />
<Project Path="Sources\Falko.Talkie.Signals\Falko.Talkie.Signals.csproj" Type="Classic C#" />
</Folder>
<Folder Name="/Tests/">
<Project Path="Tests\Falko.Talkie.Tests.Sequences\Falko.Talkie.Tests.Sequences.csproj" Type="Classic C#" />
</Folder>
</Solution>
Loading

0 comments on commit 98f2acc

Please sign in to comment.