diff --git a/.editorconfig b/.editorconfig
index 4cead120d..57d0ce66a 100755
--- a/.editorconfig
+++ b/.editorconfig
@@ -12,7 +12,7 @@ indent_style = space
tab_width = 4
# New line preferences
-end_of_line = crlf
+# end_of_line = crlf
insert_final_newline = false
#### .NET Coding Conventions ####
@@ -58,7 +58,7 @@ dotnet_style_prefer_is_null_check_over_reference_equality_method = true:error
dotnet_style_readonly_field = true:error
# Parameter preferences
-dotnet_code_quality_unused_parameters = all:error
+dotnet_code_quality_unused_parameters = all:warning
#### C# Coding Conventions ####
@@ -68,14 +68,14 @@ csharp_style_var_for_built_in_types = true:error
csharp_style_var_when_type_is_apparent = true:error
# Expression-bodied members
-csharp_style_expression_bodied_accessors = true:error
-csharp_style_expression_bodied_constructors = true:error
-csharp_style_expression_bodied_indexers = true:error
-csharp_style_expression_bodied_lambdas = true:error
-csharp_style_expression_bodied_local_functions = true:error
-csharp_style_expression_bodied_methods = true:error
-csharp_style_expression_bodied_operators = true:error
-csharp_style_expression_bodied_properties = true:error
+csharp_style_expression_bodied_accessors =true:warning
+csharp_style_expression_bodied_constructors =true:warning
+csharp_style_expression_bodied_indexers =true:warning
+csharp_style_expression_bodied_lambdas =true:warning
+csharp_style_expression_bodied_local_functions =true:warning
+csharp_style_expression_bodied_methods =true:warning
+csharp_style_expression_bodied_operators =true:warning
+csharp_style_expression_bodied_properties =true:warning
# Pattern matching preferences
csharp_style_pattern_matching_over_as_with_null_check = true:error
@@ -101,7 +101,7 @@ csharp_style_pattern_local_over_anonymous_function = true:error
csharp_style_prefer_index_operator = true:warning
csharp_style_prefer_range_operator = true:warning
csharp_style_throw_expression = true:error
-csharp_style_unused_value_assignment_preference = discard_variable:error
+csharp_style_unused_value_assignment_preference =discard_variable:warning
csharp_style_unused_value_expression_statement_preference = discard_variable:error
# 'using' directive preferences
diff --git a/.gitattributes b/.gitattributes
index 1ff0c4230..b72c2c601 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,7 +1,7 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
-* text=auto
+* text eol=lf
###############################################################################
# Set default behavior for command prompt diff.
diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml
index 04a9e8ef8..74c171c6f 100644
--- a/.github/workflows/dotnetcore.yml
+++ b/.github/workflows/dotnetcore.yml
@@ -10,24 +10,21 @@ jobs:
- name: Check out repository
uses: actions/checkout@v2
- name: Setup .NET Core
- uses: actions/setup-dotnet@v1.7.2
+ uses: actions/setup-dotnet@v1
with:
- dotnet-version: '5.0.x'
+ dotnet-version: '6.0.x'
+ include-prerelease: true
- name: Test source generator
- run: dotnet test ./NetFabric.Hyperlinq.SourceGenerator.UnitTests/NetFabric.Hyperlinq.SourceGenerator.UnitTests.csproj
+ run: dotnet test ./NetFabric.Hyperlinq.UnitTests/NetFabric.Hyperlinq.UnitTests.csproj
- name: Build solution
run: dotnet build
- name: Tests and coverage
- run: dotnet test ./NetFabric.Hyperlinq.UnitTests/NetFabric.Hyperlinq.UnitTests.csproj -f:net5.0 -c:Release --collect:"XPlat Code Coverage" --settings coverlet.runsettings
- - name: Get path to lcov file
- id: get_lcov_path
- shell: bash
- run: printf '::set-output name=lcov_path::%s\n' ./NetFabric.Hyperlinq.UnitTests/TestResults/*/coverage.info
+ run: dotnet test ./NetFabric.Hyperlinq.Core.UnitTests/NetFabric.Hyperlinq.Core.UnitTests.csproj -f:net6.0 -p:CollectCoverage=true -p:CoverletOutputFormat=lcov -p:CoverletOutput=TestResults/
- name: Publish coverage report to coveralls.io
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- path-to-lcov: ${{ steps.get_lcov_path.outputs.lcov_path }}
+ path-to-lcov: ./NetFabric.Hyperlinq.Core.UnitTests/TestResults/coverage.net6.0.info
diff --git a/Benchmarks/AggressiveInliningBenchmarks.md b/Benchmarks/AggressiveInliningBenchmarks.md
new file mode 100644
index 000000000..c9c638a13
--- /dev/null
+++ b/Benchmarks/AggressiveInliningBenchmarks.md
@@ -0,0 +1,29 @@
+## AggressiveInliningBenchmarks
+
+### Source
+[AggressiveInliningBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/AggressiveInliningBenchmarks.cs)
+
+### References:
+- Linq: 6.0.0-preview.5.21301.5
+- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
+- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
+- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
+
+### Results:
+``` ini
+
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
+Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+
+Runtime=.NET 6.0
+
+```
+| Method | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------- |------ |---------:|--------:|--------:|------:|------:|------:|------:|----------:|
+| Baseline | 1000 | 545.7 ns | 1.04 ns | 0.97 ns | 1.00 | - | - | - | - |
+| AggressiveInlining | 1000 | 544.8 ns | 1.32 ns | 1.24 ns | 1.00 | - | - | - | - |
diff --git a/Benchmarks/AllBenchmarks.md b/Benchmarks/AllBenchmarks.md
index 6c57d8713..e8de02988 100644
--- a/Benchmarks/AllBenchmarks.md
+++ b/Benchmarks/AllBenchmarks.md
@@ -4,52 +4,50 @@
[AllBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/AllBenchmarks.cs)
### References:
-- Linq: 5.0.0-preview.7.20364.11
-- System.Linq.Async: [4.1.1](https://www.nuget.org/packages/System.Linq.Async/4.1.1)
-- System.Interactive: [4.1.1](https://www.nuget.org/packages/System.Interactive/4.1.1)
-- System.Interactive.Async: [4.1.1](https://www.nuget.org/packages/System.Interactive.Async/4.1.1)
-- StructLinq: [0.19.2](https://www.nuget.org/packages/StructLinq/0.19.2)
-- NetFabric.Hyperlinq: [3.0.0-beta26](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta26)
+- Linq: 6.0.0-preview.5.21301.5
+- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
+- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
+- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
-.NET Core SDK=5.0.100-preview.7.20366.6
- [Host] : .NET Core 5.0.0 (CoreCLR 5.0.20.36411, CoreFX 5.0.20.36411), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.0 (CoreCLR 5.0.20.36411, CoreFX 5.0.20.36411), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 528.0 ns | 5.57 ns | 4.94 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Array | Array | 100 | 191.4 ns | 1.67 ns | 1.56 ns | 0.36 | 0.00 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 166.2 ns | 1.88 ns | 1.76 ns | 0.32 | 0.00 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 215.8 ns | 2.12 ns | 1.99 ns | 0.41 | 0.00 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 737.5 ns | 6.24 ns | 5.84 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 199.4 ns | 2.30 ns | 1.92 ns | 0.27 | 0.00 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 741.2 ns | 6.95 ns | 6.50 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 233.7 ns | 3.46 ns | 3.24 ns | 0.32 | 0.00 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 737.0 ns | 6.21 ns | 5.80 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Value | List_Value | 100 | 401.4 ns | 3.81 ns | 3.18 ns | 0.54 | 0.01 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,176.1 ns | 25.71 ns | 21.47 ns | 1.00 | 0.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 331.5 ns | 3.55 ns | 3.32 ns | 0.15 | 0.00 | 0.0191 | - | - | 40 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 570.6 ns | 5.53 ns | 5.18 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 523.1 ns | 4.70 ns | 4.40 ns | 0.92 | 0.01 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 572.8 ns | 5.56 ns | 5.20 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 520.5 ns | 7.43 ns | 6.59 ns | 0.91 | 0.02 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 572.2 ns | 3.72 ns | 3.11 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 376.9 ns | 2.50 ns | 2.22 ns | 0.66 | 0.00 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,114.6 ns | 19.98 ns | 18.69 ns | 1.00 | 0.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 358.6 ns | 2.02 ns | 1.88 ns | 0.17 | 0.00 | 0.0305 | - | - | 64 B |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|--------:|--------:|------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 594.4 ns | 2.87 ns | 2.24 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Array | Array | 100 | 193.1 ns | 0.79 ns | 0.66 ns | 0.32 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 778.5 ns | 2.27 ns | 1.77 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 226.0 ns | 1.07 ns | 0.95 ns | 0.29 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 792.8 ns | 3.27 ns | 2.73 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 228.5 ns | 1.08 ns | 1.01 ns | 0.29 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 795.6 ns | 3.95 ns | 3.69 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Value | List_Value | 100 | 783.9 ns | 8.51 ns | 7.10 ns | 0.99 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,713.6 ns | 7.04 ns | 5.88 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 248.1 ns | 1.01 ns | 0.95 ns | 0.14 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 787.9 ns | 3.26 ns | 2.89 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 779.3 ns | 6.61 ns | 5.86 ns | 0.99 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 746.7 ns | 2.31 ns | 2.16 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 806.8 ns | 3.82 ns | 3.19 ns | 1.08 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 749.4 ns | 5.37 ns | 4.49 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 728.0 ns | 1.89 ns | 1.58 ns | 0.97 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,712.4 ns | 6.90 ns | 6.45 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 296.8 ns | 5.57 ns | 4.94 ns | 0.17 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/AnyBenchmarks.md b/Benchmarks/AnyBenchmarks.md
index 9d80926bb..86b323c10 100644
--- a/Benchmarks/AnyBenchmarks.md
+++ b/Benchmarks/AnyBenchmarks.md
@@ -4,51 +4,50 @@
[AnyBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |-----------:|----------:|----------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 8.7865 ns | 0.0358 ns | 0.0318 ns | 1.000 | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 0.0000 ns | 0.0000 ns | 0.0000 ns | 0.000 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 0.5244 ns | 0.0186 ns | 0.0165 ns | 0.060 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 0.2542 ns | 0.0066 ns | 0.0059 ns | 0.029 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 20.5024 ns | 0.1154 ns | 0.1023 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 12.4688 ns | 0.0330 ns | 0.0293 ns | 0.61 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 4.8538 ns | 0.0168 ns | 0.0140 ns | 1.00 | - | - | - | - |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 4.6245 ns | 0.0119 ns | 0.0105 ns | 0.95 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 5.5336 ns | 0.0157 ns | 0.0139 ns | 1.00 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 1.7812 ns | 0.0093 ns | 0.0087 ns | 0.32 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 66.4073 ns | 0.3688 ns | 0.3080 ns | 1.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 60.3088 ns | 0.1136 ns | 0.1007 ns | 0.91 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 18.3779 ns | 0.0678 ns | 0.0634 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 10.5758 ns | 0.0991 ns | 0.0828 ns | 0.58 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 4.9100 ns | 0.0256 ns | 0.0239 ns | 1.00 | - | - | - | - |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 1.7918 ns | 0.0128 ns | 0.0107 ns | 0.36 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 5.5565 ns | 0.0178 ns | 0.0158 ns | 1.00 | - | - | - | - |
-| Hyperlinq_List_Reference | List_Reference | 100 | 1.8166 ns | 0.0157 ns | 0.0139 ns | 0.33 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 62.4382 ns | 0.1938 ns | 0.1618 ns | 1.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 62.1935 ns | 0.1632 ns | 0.1363 ns | 1.00 | 0.0191 | - | - | 40 B |
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |----------:|----------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 8.522 ns | 0.1072 ns | 0.0950 ns | 8.489 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 8.337 ns | 0.1458 ns | 0.2591 ns | 8.220 ns | 0.99 | 0.04 | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 20.939 ns | 0.3606 ns | 0.3196 ns | 20.920 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 10.763 ns | 0.0420 ns | 0.0372 ns | 10.761 ns | 0.51 | 0.01 | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 4.172 ns | 0.0261 ns | 0.0232 ns | 4.170 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 8.238 ns | 0.0348 ns | 0.0308 ns | 8.232 ns | 1.97 | 0.02 | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 5.244 ns | 0.0159 ns | 0.0141 ns | 5.245 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 1.570 ns | 0.0114 ns | 0.0101 ns | 1.570 ns | 0.30 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 56.214 ns | 0.3040 ns | 0.2539 ns | 56.183 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 50.317 ns | 0.1716 ns | 0.1433 ns | 50.332 ns | 0.90 | 0.01 | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 20.843 ns | 0.2172 ns | 0.1814 ns | 20.827 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 13.088 ns | 0.0794 ns | 0.0704 ns | 13.070 ns | 0.63 | 0.01 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 4.156 ns | 0.0202 ns | 0.0189 ns | 4.153 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 1.564 ns | 0.0159 ns | 0.0141 ns | 1.562 ns | 0.38 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 5.329 ns | 0.1381 ns | 0.1224 ns | 5.288 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Reference | List_Reference | 100 | 1.811 ns | 0.0220 ns | 0.0195 ns | 1.804 ns | 0.34 | 0.01 | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 56.362 ns | 0.1850 ns | 0.1640 ns | 56.408 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 54.655 ns | 0.1620 ns | 0.1436 ns | 54.680 ns | 0.97 | 0.00 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/AnyPredicateBenchmarks.md b/Benchmarks/AnyPredicateBenchmarks.md
index 9ef69d1eb..c579f5e28 100644
--- a/Benchmarks/AnyPredicateBenchmarks.md
+++ b/Benchmarks/AnyPredicateBenchmarks.md
@@ -4,51 +4,50 @@
[AnyPredicateBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyPredicateBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
|------------------------------------ |-------------------------- |------ |------------:|---------:|---------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 557.44 ns | 1.160 ns | 1.028 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Array | Array | 100 | 187.98 ns | 0.259 ns | 0.230 ns | 0.34 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 189.53 ns | 0.548 ns | 0.458 ns | 0.34 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 190.13 ns | 0.451 ns | 0.422 ns | 0.34 | - | - | - | - |
+| Linq_Array | Array | 100 | 552.35 ns | 3.072 ns | 2.873 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Array | Array | 100 | 193.02 ns | 0.522 ns | 0.488 ns | 0.35 | - | - | - | - |
| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 739.29 ns | 1.522 ns | 1.349 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 203.08 ns | 0.430 ns | 0.359 ns | 0.27 | - | - | - | - |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 728.49 ns | 1.738 ns | 1.540 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 227.33 ns | 1.183 ns | 1.107 ns | 0.31 | - | - | - | - |
| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 737.14 ns | 1.366 ns | 1.211 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 241.16 ns | 0.724 ns | 0.677 ns | 0.33 | - | - | - | - |
+| Linq_Collection_Value | Collection_Value | 100 | 773.24 ns | 2.739 ns | 2.287 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 231.23 ns | 0.944 ns | 0.837 ns | 0.30 | - | - | - | - |
| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 738.33 ns | 1.090 ns | 1.020 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Value | List_Value | 100 | 393.22 ns | 0.587 ns | 0.549 ns | 0.53 | - | - | - | - |
+| Linq_List_Value | List_Value | 100 | 781.35 ns | 6.770 ns | 6.001 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Value | List_Value | 100 | 787.16 ns | 6.048 ns | 4.722 ns | 1.01 | 0.0153 | - | - | 32 B |
| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,142.07 ns | 4.926 ns | 4.607 ns | 1.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 80.78 ns | 0.161 ns | 0.150 ns | 0.04 | - | - | - | - |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,719.18 ns | 4.384 ns | 3.661 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 74.65 ns | 0.616 ns | 0.546 ns | 0.04 | - | - | - | - |
| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 581.65 ns | 0.687 ns | 0.609 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 585.81 ns | 2.005 ns | 1.674 ns | 1.01 | 0.0153 | - | - | 32 B |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 776.80 ns | 3.107 ns | 2.906 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 786.45 ns | 6.334 ns | 5.615 ns | 1.01 | 0.0153 | - | - | 32 B |
| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 585.45 ns | 4.103 ns | 3.426 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 535.46 ns | 1.845 ns | 1.725 ns | 0.91 | 0.0153 | - | - | 32 B |
+| Linq_Collection_Reference | Collection_Reference | 100 | 730.96 ns | 4.551 ns | 4.257 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 764.02 ns | 7.369 ns | 6.153 ns | 1.05 | 0.0153 | - | - | 32 B |
| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 515.11 ns | 1.186 ns | 1.109 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 349.71 ns | 0.985 ns | 0.873 ns | 0.68 | - | - | - | - |
+| Linq_List_Reference | List_Reference | 100 | 735.80 ns | 4.364 ns | 3.868 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 741.53 ns | 3.903 ns | 3.259 ns | 1.01 | 0.0153 | - | - | 32 B |
| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,060.41 ns | 4.440 ns | 3.936 ns | 1.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 86.05 ns | 0.537 ns | 0.449 ns | 0.04 | 0.0191 | - | - | 40 B |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,717.84 ns | 3.838 ns | 3.402 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 77.00 ns | 1.529 ns | 1.761 ns | 0.05 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/ArrayIterationBenchmarks.md b/Benchmarks/ArrayIterationBenchmarks.md
index 9f43bfd0b..0385d6cc1 100644
--- a/Benchmarks/ArrayIterationBenchmarks.md
+++ b/Benchmarks/ArrayIterationBenchmarks.md
@@ -4,33 +4,35 @@
[ArrayIterationBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ArrayIterationBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Count | Mean | Error | StdDev | Ratio | RatioSD |
-|----------------------------- |--------- |----------:|----------:|----------:|------:|--------:|
-| Foreach | 10000000 | 5.994 ms | 0.1155 ms | 0.1024 ms | 1.00 | 0.00 |
-| For | 10000000 | 4.917 ms | 0.0722 ms | 0.0675 ms | 0.82 | 0.02 |
-| For_Unsafe | 10000000 | 6.019 ms | 0.0699 ms | 0.0654 ms | 1.01 | 0.02 |
-| ForAdamczewski | 10000000 | 4.764 ms | 0.0291 ms | 0.0272 ms | 0.80 | 0.02 |
-| ForAdamczewskiUnsafe | 10000000 | 4.169 ms | 0.0829 ms | 0.0921 ms | 0.70 | 0.03 |
-| Span | 10000000 | 4.720 ms | 0.0553 ms | 0.0491 ms | 0.79 | 0.02 |
-| Memory | 10000000 | 6.107 ms | 0.0278 ms | 0.0260 ms | 1.02 | 0.02 |
-| ArraySegment_Foreach | 10000000 | 28.274 ms | 0.0372 ms | 0.0311 ms | 4.73 | 0.08 |
-| ArraySegment_For | 10000000 | 5.948 ms | 0.0457 ms | 0.0381 ms | 0.99 | 0.02 |
-| ArraySegment_Wrapper_Foreach | 10000000 | 6.136 ms | 0.0263 ms | 0.0219 ms | 1.03 | 0.02 |
+| Method | Count | Mean | Error | StdDev | Ratio | RatioSD | Allocated |
+|--------------------- |-------- |-----------:|---------:|---------:|-------------:|--------:|----------:|
+| Foreach | 1000000 | 459.6 μs | 2.49 μs | 1.95 μs | baseline | | 13 B |
+| For | 1000000 | 460.4 μs | 2.37 μs | 2.21 μs | 1.00x slower | 0.01x | - |
+| For_Unsafe | 1000000 | 460.7 μs | 2.86 μs | 2.54 μs | 1.00x slower | 0.00x | - |
+| ForAdamczewski | 1000000 | 386.4 μs | 2.78 μs | 2.60 μs | 1.19x faster | 0.01x | - |
+| ForAdamczewskiUnsafe | 1000000 | 387.7 μs | 4.10 μs | 3.84 μs | 1.18x faster | 0.01x | - |
+| Span | 1000000 | 460.5 μs | 2.08 μs | 1.85 μs | 1.00x slower | 0.01x | - |
+| ArraySegment_Foreach | 1000000 | 1,746.3 μs | 12.53 μs | 11.72 μs | 3.80x slower | 0.02x | 1 B |
+| ArraySegment_For | 1000000 | 646.1 μs | 7.65 μs | 6.39 μs | 1.41x slower | 0.01x | - |
+| ArraySegment_AsSpan | 1000000 | 461.5 μs | 3.82 μs | 3.19 μs | 1.00x slower | 0.01x | 1 B |
+| ArraySegment_AsArray | 1000000 | 626.8 μs | 3.41 μs | 3.03 μs | 1.36x slower | 0.01x | 1 B |
+| Vector | 1000000 | 119.9 μs | 1.72 μs | 1.61 μs | 3.83x faster | 0.06x | - |
diff --git a/Benchmarks/ArrayToArrayBenchmarks.md b/Benchmarks/ArrayToArrayBenchmarks.md
new file mode 100644
index 000000000..08614ccc0
--- /dev/null
+++ b/Benchmarks/ArrayToArrayBenchmarks.md
@@ -0,0 +1,41 @@
+## ArrayToArrayBenchmarks
+
+### Source
+[ArrayToArrayBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ArrayToArrayBenchmarks.cs)
+
+### References:
+- Linq: 6.0.0-preview.7.21377.19
+- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
+- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
+- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
+
+### Results:
+``` ini
+
+BenchmarkDotNet=v0.13.0.1561-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
+
+```
+| Method | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|----------------- |------ |----------:|---------:|---------:|-------------:|--------:|-------:|------:|------:|----------:|
+| **ArrayClone** | **10** | **106.79 ns** | **0.520 ns** | **0.486 ns** | **baseline** | **** | **0.0305** | **-** | **-** | **64 B** |
+| SpanToArray | 10 | 11.76 ns | 0.116 ns | 0.097 ns | 9.08x faster | 0.09x | 0.0306 | - | - | 64 B |
+| SpanCopyTo | 10 | 12.71 ns | 0.228 ns | 0.213 ns | 8.41x faster | 0.15x | 0.0306 | - | - | 64 B |
+| CollectionCopyTo | 10 | 16.74 ns | 0.099 ns | 0.093 ns | 6.38x faster | 0.04x | 0.0306 | - | - | 64 B |
+| | | | | | | | | | | |
+| **ArrayClone** | **100** | **115.18 ns** | **0.865 ns** | **0.810 ns** | **baseline** | **** | **0.2019** | **-** | **-** | **424 B** |
+| SpanToArray | 100 | 38.58 ns | 0.355 ns | 0.297 ns | 2.98x faster | 0.03x | 0.2027 | - | - | 424 B |
+| SpanCopyTo | 100 | 40.01 ns | 0.462 ns | 0.432 ns | 2.88x faster | 0.03x | 0.2027 | - | - | 424 B |
+| CollectionCopyTo | 100 | 43.68 ns | 0.381 ns | 0.356 ns | 2.64x faster | 0.03x | 0.2027 | - | - | 424 B |
+| | | | | | | | | | | |
+| **ArrayClone** | **1000** | **310.98 ns** | **3.725 ns** | **3.302 ns** | **baseline** | **** | **1.9155** | **-** | **-** | **4,024 B** |
+| SpanToArray | 1000 | 308.84 ns | 1.502 ns | 1.254 ns | 1.01x faster | 0.01x | 1.9226 | - | - | 4,024 B |
+| SpanCopyTo | 1000 | 295.58 ns | 5.032 ns | 4.707 ns | 1.05x faster | 0.01x | 1.9155 | - | - | 4,024 B |
+| CollectionCopyTo | 1000 | 299.15 ns | 3.317 ns | 3.102 ns | 1.04x faster | 0.01x | 1.9155 | - | - | 4,024 B |
diff --git a/Benchmarks/ContainsBenchmarks.md b/Benchmarks/ContainsBenchmarks.md
index 1de327e5b..b079eda6c 100644
--- a/Benchmarks/ContainsBenchmarks.md
+++ b/Benchmarks/ContainsBenchmarks.md
@@ -4,28 +4,51 @@
[ContainsBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsBenchmarks.cs)
### References:
-- Linq: 5.0.2
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta34](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta34)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
-.NET Core SDK=5.0.200-preview.20614.14
- [Host] : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.0.1561-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ Job-PWZZUK : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0 Categories=Array
+Runtime=.NET 6.0
```
-| Method | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|-------------------- |------ |---------:|---------:|---------:|------:|--------:|------:|------:|------:|----------:|
-| Linq_Array | 100 | 55.27 ns | 1.138 ns | 1.479 ns | 1.00 | 0.00 | - | - | - | - |
-| Hyperlinq_Array | 100 | 49.53 ns | 1.536 ns | 4.528 ns | 0.89 | 0.04 | - | - | - | - |
-| Hyperlinq_Span | 100 | 96.52 ns | 1.965 ns | 3.442 ns | 1.76 | 0.09 | - | - | - | - |
-| Hyperlinq_Span_SIMD | 100 | 19.46 ns | 0.264 ns | 0.449 ns | 0.35 | 0.01 | - | - | - | - |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |------------:|----------:|----------:|-------------:|--------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 40.84 ns | 0.155 ns | 0.137 ns | baseline | | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 39.48 ns | 0.544 ns | 0.509 ns | 1.04x faster | 0.01x | - | - | - | - |
+| Hyperlinq_Array_SIMD | Array | 100 | 24.73 ns | 0.106 ns | 0.094 ns | 1.65x faster | 0.01x | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 698.87 ns | 4.071 ns | 3.808 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 131.79 ns | 0.836 ns | 0.699 ns | 5.30x faster | 0.04x | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 41.31 ns | 0.190 ns | 0.178 ns | baseline | | - | - | - | - |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 48.15 ns | 0.182 ns | 0.161 ns | 1.17x slower | 0.01x | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 42.47 ns | 0.369 ns | 0.327 ns | baseline | | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 48.39 ns | 0.315 ns | 0.263 ns | 1.14x slower | 0.01x | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,117.62 ns | 24.109 ns | 22.552 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,065.50 ns | 3.295 ns | 2.572 ns | 1.99x faster | 0.02x | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 701.55 ns | 11.099 ns | 9.839 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 723.25 ns | 3.170 ns | 2.965 ns | 1.03x slower | 0.01x | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 44.63 ns | 0.412 ns | 0.344 ns | baseline | | - | - | - | - |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 46.06 ns | 0.179 ns | 0.140 ns | 1.03x slower | 0.01x | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 44.93 ns | 0.386 ns | 0.342 ns | baseline | | - | - | - | - |
+| Hyperlinq_List_Reference | List_Reference | 100 | 47.14 ns | 0.188 ns | 0.167 ns | 1.05x slower | 0.01x | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,104.73 ns | 7.920 ns | 6.183 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,061.42 ns | 4.170 ns | 3.697 ns | 1.02x faster | 0.00x | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/ContainsComparerBenchmarks.md b/Benchmarks/ContainsComparerBenchmarks.md
index 7d6ad1322..16391d05b 100644
--- a/Benchmarks/ContainsComparerBenchmarks.md
+++ b/Benchmarks/ContainsComparerBenchmarks.md
@@ -4,49 +4,50 @@
[ContainsComparerBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsComparerBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.0.1561-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ Job-AXHCLI : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------- |-------------------------- |------ |-----------:|--------:|--------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 568.2 ns | 2.19 ns | 2.05 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Array | Array | 100 | 241.1 ns | 0.68 ns | 0.60 ns | 0.42 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 192.6 ns | 0.76 ns | 0.71 ns | 0.34 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 219.4 ns | 0.81 ns | 0.72 ns | 0.39 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 744.5 ns | 1.64 ns | 1.37 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 257.5 ns | 0.97 ns | 0.91 ns | 0.35 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 772.5 ns | 1.48 ns | 1.32 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 254.0 ns | 0.42 ns | 0.38 ns | 0.33 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 743.8 ns | 1.89 ns | 1.68 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Value | List_Value | 100 | 401.6 ns | 0.75 ns | 0.62 ns | 0.54 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,139.1 ns | 5.52 ns | 4.61 ns | 1.00 | 0.0191 | - | - | 40 B |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 563.4 ns | 1.60 ns | 1.25 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 564.5 ns | 1.90 ns | 1.78 ns | 1.00 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 563.9 ns | 2.11 ns | 1.87 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 565.1 ns | 1.37 ns | 1.22 ns | 1.00 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 562.8 ns | 1.59 ns | 1.41 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 376.3 ns | 1.97 ns | 1.75 ns | 0.67 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,030.0 ns | 3.80 ns | 3.37 ns | 1.00 | 0.0191 | - | - | 40 B |
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |------------:|-----------:|-----------:|------------:|--------------:|--------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 1,048.66 ns | 107.295 ns | 316.361 ns | 903.87 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_Array | Array | 100 | 268.14 ns | 2.061 ns | 1.827 ns | 267.28 ns | 4.81x faster | 1.19x | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 881.92 ns | 6.470 ns | 5.735 ns | 880.29 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 302.87 ns | 1.992 ns | 1.864 ns | 302.07 ns | 2.91x faster | 0.03x | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 938.13 ns | 9.760 ns | 9.129 ns | 936.36 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 48.95 ns | 0.239 ns | 0.212 ns | 48.90 ns | 19.18x faster | 0.20x | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 933.26 ns | 9.635 ns | 8.046 ns | 929.66 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Value | List_Value | 100 | 48.66 ns | 0.173 ns | 0.144 ns | 48.65 ns | 19.18x faster | 0.20x | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,158.84 ns | 9.131 ns | 8.542 ns | 2,155.35 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,191.03 ns | 3.012 ns | 2.670 ns | 1,189.75 ns | 1.81x faster | 0.01x | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 882.52 ns | 5.452 ns | 4.833 ns | 881.50 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 857.25 ns | 3.404 ns | 2.842 ns | 856.86 ns | 1.03x faster | 0.01x | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 889.74 ns | 13.979 ns | 12.392 ns | 887.60 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 47.00 ns | 0.515 ns | 0.457 ns | 46.82 ns | 18.93x faster | 0.31x | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 932.31 ns | 6.806 ns | 5.314 ns | 930.35 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 47.98 ns | 0.277 ns | 0.217 ns | 47.97 ns | 19.43x faster | 0.10x | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,159.99 ns | 7.158 ns | 6.695 ns | 2,158.15 ns | baseline | | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,157.65 ns | 6.057 ns | 5.369 ns | 2,156.09 ns | 1.00x faster | 0.00x | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/CountBenchmarks.md b/Benchmarks/CountBenchmarks.md
index 2f898d4bb..887ed8a21 100644
--- a/Benchmarks/CountBenchmarks.md
+++ b/Benchmarks/CountBenchmarks.md
@@ -4,58 +4,57 @@
[CountBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/CountBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
|------------------------------------ |-------------------------- |------ |--------------:|----------:|----------:|-------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 8.9989 ns | 0.0181 ns | 0.0141 ns | 1.000 | 0.00 | - | - | - | - |
-| StructLinq_Array | Array | 100 | 0.9332 ns | 0.0091 ns | 0.0081 ns | 0.104 | 0.00 | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 0.0000 ns | 0.0000 ns | 0.0000 ns | 0.000 | 0.00 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 0.2514 ns | 0.0047 ns | 0.0041 ns | 0.028 | 0.00 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 0.0000 ns | 0.0000 ns | 0.0000 ns | 0.000 | 0.00 | - | - | - | - |
+| Linq_Array | Array | 100 | 8.6538 ns | 0.0562 ns | 0.0498 ns | 1.00 | 0.00 | - | - | - | - |
+| StructLinq_Array | Array | 100 | 0.7170 ns | 0.0126 ns | 0.0112 ns | 0.08 | 0.00 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 7.9852 ns | 0.0270 ns | 0.0253 ns | 0.92 | 0.01 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 339.9804 ns | 0.7672 ns | 0.6801 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 591.7192 ns | 1.8374 ns | 1.6288 ns | 1.74 | 0.01 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 147.5369 ns | 0.3168 ns | 0.2963 ns | 0.43 | 0.00 | - | - | - | - |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 349.4069 ns | 2.8233 ns | 2.3575 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 619.7720 ns | 4.5373 ns | 4.0222 ns | 1.77 | 0.01 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 140.7260 ns | 0.2846 ns | 0.2523 ns | 0.40 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 4.6490 ns | 0.0391 ns | 0.0305 ns | 1.00 | 0.00 | - | - | - | - |
-| StructLinq_Collection_Value | Collection_Value | 100 | 619.6203 ns | 0.9017 ns | 0.7530 ns | 133.29 | 0.89 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 4.1855 ns | 0.0207 ns | 0.0184 ns | 0.90 | 0.01 | - | - | - | - |
+| Linq_Collection_Value | Collection_Value | 100 | 4.1117 ns | 0.0213 ns | 0.0199 ns | 1.00 | 0.00 | - | - | - | - |
+| StructLinq_Collection_Value | Collection_Value | 100 | 618.7262 ns | 3.1791 ns | 2.6547 ns | 150.49 | 0.88 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 7.5543 ns | 0.0264 ns | 0.0247 ns | 1.84 | 0.01 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 5.3257 ns | 0.0091 ns | 0.0085 ns | 1.00 | 0.00 | - | - | - | - |
-| StructLinq_List_Value | List_Value | 100 | 2.3656 ns | 0.0092 ns | 0.0086 ns | 0.44 | 0.00 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 1.5443 ns | 0.0211 ns | 0.0176 ns | 0.29 | 0.00 | - | - | - | - |
+| Linq_List_Value | List_Value | 100 | 4.9752 ns | 0.0545 ns | 0.0483 ns | 1.00 | 0.00 | - | - | - | - |
+| StructLinq_List_Value | List_Value | 100 | 2.3856 ns | 0.0229 ns | 0.0214 ns | 0.48 | 0.01 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 1.6012 ns | 0.0116 ns | 0.0109 ns | 0.32 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,041.1344 ns | 3.3812 ns | 2.8234 ns | 1.00 | 0.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,187.2774 ns | 1.6964 ns | 1.5038 ns | 0.58 | 0.00 | - | - | - | - |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,624.5794 ns | 6.4122 ns | 5.6842 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 778.0014 ns | 2.2398 ns | 1.9856 ns | 0.48 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 248.8358 ns | 1.4702 ns | 1.3033 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 384.4841 ns | 2.5870 ns | 2.1603 ns | 1.55 | 0.01 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 254.0431 ns | 0.7041 ns | 0.5880 ns | 1.02 | 0.01 | 0.0153 | - | - | 32 B |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 345.5721 ns | 1.6528 ns | 1.3802 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 622.3207 ns | 6.1665 ns | 5.4665 ns | 1.80 | 0.02 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 399.7432 ns | 3.6850 ns | 3.0771 ns | 1.16 | 0.01 | 0.0153 | - | - | 32 B |
| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 4.6522 ns | 0.0152 ns | 0.0127 ns | 1.00 | 0.00 | - | - | - | - |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 383.2519 ns | 0.8476 ns | 0.7928 ns | 82.37 | 0.32 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 1.5303 ns | 0.0101 ns | 0.0090 ns | 0.33 | 0.00 | - | - | - | - |
+| Linq_Collection_Reference | Collection_Reference | 100 | 4.1547 ns | 0.0307 ns | 0.0272 ns | 1.00 | 0.00 | - | - | - | - |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 617.2308 ns | 1.6776 ns | 1.4871 ns | 148.57 | 1.08 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 1.7886 ns | 0.0117 ns | 0.0104 ns | 0.43 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 5.4791 ns | 0.0141 ns | 0.0125 ns | 1.00 | 0.00 | - | - | - | - |
-| StructLinq_List_Reference | List_Reference | 100 | 383.6696 ns | 0.7411 ns | 0.6932 ns | 70.01 | 0.20 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 1.5162 ns | 0.0048 ns | 0.0043 ns | 0.28 | 0.00 | - | - | - | - |
+| Linq_List_Reference | List_Reference | 100 | 4.9597 ns | 0.0286 ns | 0.0268 ns | 1.00 | 0.00 | - | - | - | - |
+| StructLinq_List_Reference | List_Reference | 100 | 620.5949 ns | 3.4575 ns | 3.2342 ns | 125.13 | 0.90 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 1.7393 ns | 0.0310 ns | 0.0275 ns | 0.35 | 0.01 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,948.7201 ns | 7.2494 ns | 6.0535 ns | 1.00 | 0.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,786.5839 ns | 2.9349 ns | 2.6017 ns | 0.92 | 0.00 | 0.0191 | - | - | 40 B |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,630.2851 ns | 4.5997 ns | 4.3025 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,419.2966 ns | 3.7573 ns | 3.3308 ns | 0.87 | 0.00 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/DistinctBenchmarks.md b/Benchmarks/DistinctBenchmarks.md
index 18a3b1bee..0195213ec 100644
--- a/Benchmarks/DistinctBenchmarks.md
+++ b/Benchmarks/DistinctBenchmarks.md
@@ -4,58 +4,59 @@
[DistinctBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/DistinctBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |---------:|----------:|----------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 2.909 μs | 0.0101 μs | 0.0094 μs | 1.00 | 2.0599 | - | - | 4312 B |
-| StructLinq_Array | Array | 100 | 2.459 μs | 0.0091 μs | 0.0076 μs | 0.84 | 1.4000 | - | - | 2928 B |
-| Hyperlinq_Array | Array | 100 | 1.601 μs | 0.0039 μs | 0.0037 μs | 0.55 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 1.557 μs | 0.0034 μs | 0.0032 μs | 0.54 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 1.669 μs | 0.0026 μs | 0.0023 μs | 0.57 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 3.190 μs | 0.0064 μs | 0.0057 μs | 1.00 | 2.0599 | - | - | 4312 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 2.272 μs | 0.0076 μs | 0.0067 μs | 0.71 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 1.651 μs | 0.0029 μs | 0.0026 μs | 0.52 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 3.170 μs | 0.0118 μs | 0.0105 μs | 1.00 | 2.0599 | - | - | 4312 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 2.245 μs | 0.0123 μs | 0.0115 μs | 0.71 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 1.575 μs | 0.0047 μs | 0.0044 μs | 0.50 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 3.214 μs | 0.0092 μs | 0.0086 μs | 1.00 | 2.0599 | - | - | 4312 B |
-| StructLinq_List_Value | List_Value | 100 | 1.445 μs | 0.0041 μs | 0.0034 μs | 0.45 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 1.922 μs | 0.0041 μs | 0.0036 μs | 0.60 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 7.912 μs | 0.0213 μs | 0.0189 μs | 1.00 | 2.0905 | - | - | 4400 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 4.850 μs | 0.0157 μs | 0.0131 μs | 0.61 | 0.0305 | - | - | 72 B |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 2.891 μs | 0.0121 μs | 0.0113 μs | 1.00 | 2.0599 | - | - | 4312 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 1.594 μs | 0.0035 μs | 0.0031 μs | 0.55 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 2.134 μs | 0.0053 μs | 0.0049 μs | 0.74 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 2.885 μs | 0.0106 μs | 0.0094 μs | 1.00 | 2.0599 | - | - | 4312 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 1.584 μs | 0.0026 μs | 0.0024 μs | 0.55 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 2.126 μs | 0.0089 μs | 0.0083 μs | 0.74 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 2.869 μs | 0.0117 μs | 0.0098 μs | 1.00 | 2.0599 | - | - | 4312 B |
-| StructLinq_List_Reference | List_Reference | 100 | 1.589 μs | 0.0053 μs | 0.0047 μs | 0.55 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 1.879 μs | 0.0047 μs | 0.0042 μs | 0.65 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 7.882 μs | 0.0441 μs | 0.0368 μs | 1.00 | 2.0905 | - | - | 4400 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 5.114 μs | 0.0120 μs | 0.0113 μs | 0.65 | 0.0534 | - | - | 112 B |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |---------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 1.762 μs | 0.0060 μs | 0.0050 μs | 1.00 | 0.00 | 1.3294 | - | - | 2,784 B |
+| StructLinq_Array | Array | 100 | 1.253 μs | 0.0074 μs | 0.0061 μs | 0.71 | 0.00 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 1.468 μs | 0.0061 μs | 0.0054 μs | 0.83 | 0.00 | - | - | - | - |
+| Hyperlinq_Span | Array | 100 | 1.546 μs | 0.0082 μs | 0.0076 μs | 0.88 | 0.00 | - | - | - | - |
+| Hyperlinq_Memory | Array | 100 | 1.561 μs | 0.0080 μs | 0.0071 μs | 0.89 | 0.01 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 2.381 μs | 0.0472 μs | 0.0775 μs | 1.00 | 0.00 | 1.3275 | - | - | 2,784 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 2.206 μs | 0.0220 μs | 0.0206 μs | 0.95 | 0.04 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 1.495 μs | 0.0074 μs | 0.0069 μs | 0.65 | 0.02 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 2.249 μs | 0.0102 μs | 0.0096 μs | 1.00 | 0.00 | 1.3275 | - | - | 2,784 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 2.210 μs | 0.0175 μs | 0.0163 μs | 0.98 | 0.01 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 1.472 μs | 0.0064 μs | 0.0053 μs | 0.65 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 2.305 μs | 0.0117 μs | 0.0104 μs | 1.00 | 0.00 | 1.3275 | - | - | 2,784 B |
+| StructLinq_List_Value | List_Value | 100 | 1.490 μs | 0.0110 μs | 0.0102 μs | 0.65 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 2.725 μs | 0.0121 μs | 0.0113 μs | 1.18 | 0.01 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 7.732 μs | 0.0411 μs | 0.0364 μs | 1.00 | 0.00 | 2.0599 | - | - | 4,320 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 4.331 μs | 0.0281 μs | 0.0263 μs | 0.56 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 2.316 μs | 0.0227 μs | 0.0189 μs | 1.00 | 0.00 | 1.3275 | - | - | 2,784 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 2.209 μs | 0.0186 μs | 0.0174 μs | 0.95 | 0.01 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 2.636 μs | 0.0155 μs | 0.0137 μs | 1.14 | 0.01 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 2.250 μs | 0.0091 μs | 0.0085 μs | 1.00 | 0.00 | 1.3275 | - | - | 2,784 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 2.199 μs | 0.0201 μs | 0.0188 μs | 0.98 | 0.01 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 2.661 μs | 0.0150 μs | 0.0125 μs | 1.18 | 0.01 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 2.307 μs | 0.0134 μs | 0.0119 μs | 1.00 | 0.00 | 1.3275 | - | - | 2,784 B |
+| StructLinq_List_Reference | List_Reference | 100 | 2.175 μs | 0.0134 μs | 0.0125 μs | 0.94 | 0.01 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 2.781 μs | 0.0236 μs | 0.0209 μs | 1.21 | 0.01 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 7.339 μs | 0.1288 μs | 0.1888 μs | 1.00 | 0.00 | 2.0599 | - | - | 4,320 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 5.030 μs | 0.0163 μs | 0.0152 μs | 0.68 | 0.02 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/ElementAtBenchmarks.md b/Benchmarks/ElementAtBenchmarks.md
index 6710af6c0..f0ec761d7 100644
--- a/Benchmarks/ElementAtBenchmarks.md
+++ b/Benchmarks/ElementAtBenchmarks.md
@@ -4,49 +4,50 @@
[ElementAtBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ElementAtBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------- |-------------------------- |------ |-------------:|----------:|----------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 23.360 ns | 0.0504 ns | 0.0447 ns | 1.00 | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 5.306 ns | 0.0090 ns | 0.0084 ns | 0.23 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 5.032 ns | 0.0040 ns | 0.0031 ns | 0.22 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 6.595 ns | 0.0121 ns | 0.0113 ns | 0.28 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 359.232 ns | 0.5723 ns | 0.4779 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 137.595 ns | 0.2246 ns | 0.1991 ns | 0.38 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 317.957 ns | 5.4123 ns | 4.5195 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 143.821 ns | 0.2611 ns | 0.2443 ns | 0.45 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 10.390 ns | 0.0256 ns | 0.0227 ns | 1.00 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 6.672 ns | 0.0243 ns | 0.0215 ns | 0.64 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,078.866 ns | 4.3966 ns | 4.1125 ns | 1.00 | 0.0191 | - | - | 40 B |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 231.469 ns | 0.3659 ns | 0.3243 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 241.359 ns | 1.1134 ns | 1.0415 ns | 1.04 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 231.936 ns | 0.3911 ns | 0.3659 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 255.067 ns | 0.8164 ns | 0.7237 ns | 1.10 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 10.386 ns | 0.0318 ns | 0.0282 ns | 1.00 | - | - | - | - |
-| Hyperlinq_List_Reference | List_Reference | 100 | 6.670 ns | 0.0148 ns | 0.0132 ns | 0.64 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,945.874 ns | 4.9947 ns | 4.4276 ns | 1.00 | 0.0191 | - | - | 40 B |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |-------------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 16.456 ns | 0.0966 ns | 0.0904 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 12.952 ns | 0.0361 ns | 0.0320 ns | 0.79 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 321.772 ns | 2.7943 ns | 2.6138 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 131.436 ns | 0.4074 ns | 0.3611 ns | 0.41 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 320.549 ns | 5.2212 ns | 4.6284 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 136.995 ns | 0.5484 ns | 0.4861 ns | 0.43 | 0.01 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 9.673 ns | 0.0693 ns | 0.0648 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 330.177 ns | 2.9100 ns | 2.5796 ns | 34.15 | 0.38 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,620.433 ns | 4.6504 ns | 4.1224 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 805.497 ns | 3.5011 ns | 3.1036 ns | 0.50 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 322.075 ns | 1.6159 ns | 1.4324 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 335.420 ns | 2.7009 ns | 2.2554 ns | 1.04 | 0.01 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 319.994 ns | 3.3920 ns | 3.0069 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 364.654 ns | 1.4024 ns | 1.2432 ns | 1.14 | 0.01 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 9.695 ns | 0.0674 ns | 0.0527 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Reference | List_Reference | 100 | 328.172 ns | 1.9735 ns | 1.6480 ns | 33.84 | 0.28 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,627.227 ns | 6.8413 ns | 6.0646 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,412.723 ns | 7.4225 ns | 6.5799 ns | 0.87 | 0.00 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/EmptyBenchmarks.md b/Benchmarks/EmptyBenchmarks.md
index bd0c0f3c9..665678723 100644
--- a/Benchmarks/EmptyBenchmarks.md
+++ b/Benchmarks/EmptyBenchmarks.md
@@ -4,28 +4,29 @@
[EmptyBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/EmptyBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|---------------------- |------------ |----------:|----------:|----------:|------:|------:|------:|------:|----------:|
-| Linq_Empty | Empty | 6.261 ns | 0.0193 ns | 0.0151 ns | 1.00 | - | - | - | - |
-| Hyperlinq_Empty | Empty | 1.429 ns | 0.0070 ns | 0.0054 ns | 0.23 | - | - | - | - |
-| | | | | | | | | | |
-| Linq_Empty_Async | Empty_Async | 40.172 ns | 0.0809 ns | 0.0717 ns | 1.00 | - | - | - | - |
-| Hyperlinq_Empty_Async | Empty_Async | 21.537 ns | 0.0361 ns | 0.0282 ns | 0.54 | - | - | - | - |
+| Method | Categories | Mean | Error | StdDev | Median | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|---------------------- |------------ |-----------:|----------:|----------:|-----------:|------:|------:|------:|------:|----------:|
+| Linq_Empty | Empty | 6.4057 ns | 0.0357 ns | 0.0316 ns | 6.4039 ns | 1.000 | - | - | - | - |
+| Hyperlinq_Empty | Empty | 0.0060 ns | 0.0064 ns | 0.0053 ns | 0.0044 ns | 0.001 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Empty_Async | Empty_Async | 39.8805 ns | 0.1600 ns | 0.1418 ns | 39.8955 ns | 1.00 | - | - | - | - |
+| Hyperlinq_Empty_Async | Empty_Async | 20.9157 ns | 0.0982 ns | 0.0871 ns | 20.9092 ns | 0.52 | - | - | - | - |
diff --git a/Benchmarks/FirstBenchmarks.md b/Benchmarks/FirstBenchmarks.md
index 7838c85ea..32a10096e 100644
--- a/Benchmarks/FirstBenchmarks.md
+++ b/Benchmarks/FirstBenchmarks.md
@@ -4,49 +4,50 @@
[FirstBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/FirstBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------- |-------------------------- |------ |-----------:|----------:|----------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 21.426 ns | 0.0585 ns | 0.0547 ns | 1.00 | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 4.999 ns | 0.0220 ns | 0.0195 ns | 0.23 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 5.013 ns | 0.0061 ns | 0.0054 ns | 0.23 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 6.534 ns | 0.0105 ns | 0.0093 ns | 0.30 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 23.940 ns | 0.0419 ns | 0.0350 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 14.134 ns | 0.0313 ns | 0.0277 ns | 0.59 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 25.161 ns | 0.0654 ns | 0.0611 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 15.751 ns | 0.0248 ns | 0.0220 ns | 0.63 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 12.900 ns | 0.0202 ns | 0.0179 ns | 1.00 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 7.295 ns | 0.0195 ns | 0.0183 ns | 0.57 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 115.584 ns | 0.2322 ns | 0.1939 ns | 1.00 | 0.0191 | - | - | 40 B |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 20.376 ns | 0.0777 ns | 0.0689 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 24.218 ns | 0.0607 ns | 0.0538 ns | 1.19 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 21.360 ns | 0.0450 ns | 0.0399 ns | 1.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 16.310 ns | 0.1366 ns | 0.1066 ns | 0.76 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 12.909 ns | 0.0265 ns | 0.0222 ns | 1.00 | - | - | - | - |
-| Hyperlinq_List_Reference | List_Reference | 100 | 7.257 ns | 0.0133 ns | 0.0111 ns | 0.56 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 111.250 ns | 0.1898 ns | 0.1776 ns | 1.00 | 0.0191 | - | - | 40 B |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |----------:|---------:|---------:|------:|--------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 22.02 ns | 0.200 ns | 0.187 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 13.20 ns | 0.042 ns | 0.038 ns | 0.60 | 0.01 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 27.38 ns | 0.087 ns | 0.073 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 16.20 ns | 0.039 ns | 0.035 ns | 0.59 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 26.56 ns | 0.153 ns | 0.136 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 18.73 ns | 0.053 ns | 0.047 ns | 0.71 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 12.36 ns | 0.055 ns | 0.046 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 22.47 ns | 0.132 ns | 0.117 ns | 1.82 | 0.01 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 109.50 ns | 0.948 ns | 0.887 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 62.59 ns | 0.160 ns | 0.141 ns | 0.57 | 0.01 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 25.50 ns | 0.148 ns | 0.139 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 18.66 ns | 0.147 ns | 0.123 ns | 0.73 | 0.01 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 26.59 ns | 0.091 ns | 0.076 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 18.75 ns | 0.119 ns | 0.105 ns | 0.71 | 0.00 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 12.40 ns | 0.064 ns | 0.060 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Reference | List_Reference | 100 | 23.48 ns | 0.499 ns | 0.594 ns | 1.88 | 0.06 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 106.75 ns | 0.246 ns | 0.219 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 68.68 ns | 0.392 ns | 0.367 ns | 0.64 | 0.00 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/IterationBenchmarks.md b/Benchmarks/IterationBenchmarks.md
deleted file mode 100644
index e728f5c75..000000000
--- a/Benchmarks/IterationBenchmarks.md
+++ /dev/null
@@ -1,28 +0,0 @@
-## IterationBenchmarks
-
-### Source
-[IterationBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/IterationBenchmarks.cs)
-
-### References:
-- Linq: 4.8.4300.0
-- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
-- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
-- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
-
-### Results:
-``` ini
-
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
-
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
-
-```
-| Method | Count | Mean | Error | StdDev | Ratio |
-|------- |---------- |---------:|---------:|---------:|------:|
-| LT | 100000000 | 51.32 ms | 0.108 ms | 0.096 ms | 1.00 |
-| LTE | 100000000 | 51.30 ms | 0.079 ms | 0.066 ms | 1.00 |
diff --git a/Benchmarks/ListIterationBenchmarks.md b/Benchmarks/ListIterationBenchmarks.md
new file mode 100644
index 000000000..5e8bbd81b
--- /dev/null
+++ b/Benchmarks/ListIterationBenchmarks.md
@@ -0,0 +1,33 @@
+## ListIterationBenchmarks
+
+### Source
+[ListIterationBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ListIterationBenchmarks.cs)
+
+### References:
+- Linq: 6.0.0-preview.5.21301.5
+- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
+- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
+- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
+
+### Results:
+``` ini
+
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
+Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+
+Runtime=.NET 6.0
+
+```
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------- |-------------- |-------- |------------:|----------:|----------:|------------:|------:|--------:|------:|------:|------:|----------:|
+| List_Enumerable | List | 1000000 | 1,406.4 μs | 27.92 μs | 57.66 μs | 1,373.8 μs | 1.00 | 0.00 | - | - | - | - |
+| List_Indexer | List | 1000000 | 1,071.0 μs | 3.83 μs | 3.20 μs | 1,070.7 μs | 0.77 | 0.03 | - | - | - | 1 B |
+| List_Span | List | 1000000 | 487.5 μs | 15.26 μs | 44.99 μs | 459.3 μs | 0.35 | 0.03 | - | - | - | - |
+| | | | | | | | | | | | | |
+| ImmutableList_Enumerable | ImmutableList | 1000000 | 35,277.5 μs | 345.09 μs | 322.79 μs | 35,354.5 μs | 1.00 | 0.00 | - | - | - | 10 B |
+| ImmutableList_Indexer | ImmutableList | 1000000 | 63,181.9 μs | 315.41 μs | 295.03 μs | 63,129.3 μs | 1.79 | 0.02 | - | - | - | 55 B |
diff --git a/Benchmarks/RangeBenchmarks.md b/Benchmarks/RangeBenchmarks.md
index fd0b0484e..640a5a436 100644
--- a/Benchmarks/RangeBenchmarks.md
+++ b/Benchmarks/RangeBenchmarks.md
@@ -4,29 +4,30 @@
[RangeBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/RangeBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|---------------------- |------------ |------ |------------:|---------:|---------:|------:|-------:|------:|------:|----------:|
-| Linq_Range | Range | 100 | 417.46 ns | 1.612 ns | 1.258 ns | 1.00 | 0.0191 | - | - | 40 B |
-| StructLinq_Range | Range | 100 | 33.49 ns | 0.058 ns | 0.049 ns | 0.08 | - | - | - | - |
-| Hyperlinq_Range | Range | 100 | 43.61 ns | 0.065 ns | 0.061 ns | 0.10 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Range_Async | Range_Async | 100 | 4,228.69 ns | 9.630 ns | 8.042 ns | 1.00 | 0.0229 | - | - | 48 B |
-| Hyperlinq_Range_Async | Range_Async | 100 | 1,295.62 ns | 1.944 ns | 1.819 ns | 0.31 | 0.0153 | - | - | 32 B |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|---------------- |------------ |------ |------------:|----------:|----------:|------:|-------:|------:|------:|----------:|
+| Linq | Range | 100 | 372.51 ns | 2.888 ns | 2.254 ns | 1.00 | 0.0191 | - | - | 40 B |
+| StructLinq | Range | 100 | 33.64 ns | 0.143 ns | 0.112 ns | 0.09 | - | - | - | - |
+| Hyperlinq | Range | 100 | 41.45 ns | 0.259 ns | 0.318 ns | 0.11 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Async | Range_Async | 100 | 3,676.68 ns | 15.301 ns | 13.564 ns | 1.00 | 0.0229 | - | - | 48 B |
+| Hyperlinq_Async | Range_Async | 100 | 1,234.74 ns | 5.418 ns | 4.524 ns | 0.34 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/RangeToArrayBenchmarks.md b/Benchmarks/RangeToArrayBenchmarks.md
index 0a9b07ef3..f3a177647 100644
--- a/Benchmarks/RangeToArrayBenchmarks.md
+++ b/Benchmarks/RangeToArrayBenchmarks.md
@@ -4,31 +4,31 @@
[RangeToArrayBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/RangeToArrayBenchmarks.cs)
### References:
-- Linq: 5.0.2
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta34](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta34)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
-.NET Core SDK=5.0.200-preview.20614.14
- [Host] : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|---------------- |------------ |------ |----------:|---------:|---------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq | Range | 100 | 96.63 ns | 0.862 ns | 0.764 ns | 1.00 | 0.00 | 0.2218 | - | - | 464 B |
-| StructLinq | Range | 100 | 99.00 ns | 0.820 ns | 0.640 ns | 1.03 | 0.01 | 0.2142 | - | - | 448 B |
-| LinqFaster_SIMD | Range | 100 | 45.58 ns | 0.948 ns | 1.054 ns | 0.47 | 0.01 | 0.2027 | - | - | 424 B |
-| Hyperlinq | Range | 100 | 62.69 ns | 0.764 ns | 0.677 ns | 0.65 | 0.01 | 0.2027 | - | - | 424 B |
-| | | | | | | | | | | | |
-| Linq_Async | Range_Async | 100 | 119.78 ns | 2.043 ns | 1.911 ns | 1.00 | 0.00 | 0.2255 | - | - | 472 B |
-| Hyperlinq_Async | Range_Async | 100 | 122.04 ns | 0.868 ns | 0.769 ns | 1.02 | 0.02 | 0.2027 | - | - | 424 B |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Allocated |
+|---------------- |------------ |------ |----------:|---------:|---------:|-------------:|--------:|-------:|----------:|
+| Linq | Range | 100 | 98.10 ns | 0.503 ns | 0.393 ns | baseline | | 0.2217 | 464 B |
+| StructLinq | Range | 100 | 106.79 ns | 2.013 ns | 1.785 ns | 1.09x slower | 0.02x | 0.2142 | 448 B |
+| LinqFaster_SIMD | Range | 100 | 46.08 ns | 0.330 ns | 0.292 ns | 2.13x faster | 0.02x | 0.2027 | 424 B |
+| Hyperlinq | Range | 100 | 52.06 ns | 0.499 ns | 0.417 ns | 1.88x faster | 0.02x | 0.2027 | 424 B |
+| | | | | | | | | | |
+| Linq_Async | Range_Async | 100 | 129.59 ns | 1.059 ns | 0.884 ns | baseline | | 0.2255 | 472 B |
+| Hyperlinq_Async | Range_Async | 100 | 166.08 ns | 1.368 ns | 1.213 ns | 1.28x slower | 0.01x | 0.2027 | 424 B |
diff --git a/Benchmarks/ReadOnlyFieldsBenchmarks.md b/Benchmarks/ReadOnlyFieldsBenchmarks.md
new file mode 100644
index 000000000..daf553cd8
--- /dev/null
+++ b/Benchmarks/ReadOnlyFieldsBenchmarks.md
@@ -0,0 +1,30 @@
+## ReadOnlyFieldsBenchmarks
+
+### Source
+[ReadOnlyFieldsBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ReadOnlyFieldsBenchmarks.cs)
+
+### References:
+- Linq: 6.0.0-preview.5.21301.5
+- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
+- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
+- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
+
+### Results:
+``` ini
+
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
+Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+
+Runtime=.NET 6.0
+
+```
+| Method | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|---------------- |------ |---------:|--------:|--------:|------:|------:|------:|------:|----------:|
+| Baseline | 1000 | 545.7 ns | 1.41 ns | 1.25 ns | 1.00 | - | - | - | - |
+| ReadOnlyCurrent | 1000 | 545.6 ns | 1.20 ns | 1.12 ns | 1.00 | - | - | - | - |
+| ReadOnlyField | 1000 | 545.9 ns | 1.41 ns | 1.32 ns | 1.00 | - | - | - | - |
diff --git a/Benchmarks/RepeatBenchmarks.md b/Benchmarks/RepeatBenchmarks.md
index 8f62e2ef5..59c8e4232 100644
--- a/Benchmarks/RepeatBenchmarks.md
+++ b/Benchmarks/RepeatBenchmarks.md
@@ -4,30 +4,30 @@
[RepeatBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/RepeatBenchmarks.cs)
### References:
-- Linq: 5.0.2
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta34](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta34)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
-.NET Core SDK=5.0.200-preview.20614.14
- [Host] : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|---------------- |------------- |------ |------------:|----------:|----------:|------------:|------:|-------:|------:|------:|----------:|
-| Linq_Count | Repeat | 100 | 578.38 ns | 32.322 ns | 95.302 ns | 623.45 ns | 1.00 | 0.0153 | - | - | 32 B |
-| StructLinq | Repeat | 100 | 57.71 ns | 0.545 ns | 0.455 ns | 57.55 ns | 0.10 | - | - | - | - |
-| Hyperlinq | Repeat | 100 | 41.23 ns | 0.145 ns | 0.121 ns | 41.18 ns | 0.07 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_Async | Repeat_Async | 100 | 6,120.12 ns | 93.560 ns | 87.516 ns | 6,088.82 ns | 1.00 | 0.0229 | - | - | 48 B |
-| Hyperlinq_Async | Repeat_Async | 100 | 945.28 ns | 7.413 ns | 6.572 ns | 944.56 ns | 0.15 | - | - | - | - |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|---------------- |------------- |------ |------------:|----------:|----------:|------:|-------:|------:|------:|----------:|
+| Linq | Repeat | 100 | 392.90 ns | 4.207 ns | 3.285 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq | Repeat | 100 | 44.30 ns | 0.150 ns | 0.133 ns | 0.11 | - | - | - | - |
+| Hyperlinq | Repeat | 100 | 146.99 ns | 0.322 ns | 0.302 ns | 0.37 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Async | Repeat_Async | 100 | 4,732.19 ns | 47.740 ns | 39.865 ns | 1.00 | 0.0229 | - | - | 48 B |
+| Hyperlinq_Async | Repeat_Async | 100 | 769.57 ns | 1.426 ns | 1.265 ns | 0.16 | - | - | - | - |
diff --git a/Benchmarks/RepeatToArrayBenchmarks.md b/Benchmarks/RepeatToArrayBenchmarks.md
index 52589e6ab..68118ad44 100644
--- a/Benchmarks/RepeatToArrayBenchmarks.md
+++ b/Benchmarks/RepeatToArrayBenchmarks.md
@@ -4,32 +4,32 @@
[RepeatToArrayBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/RepeatToArrayBenchmarks.cs)
### References:
-- Linq: 5.0.2
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta34](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta34)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
-.NET Core SDK=5.0.200-preview.20614.14
- [Host] : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|---------------- |------------- |------ |----------:|---------:|---------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq | Repeat | 100 | 140.08 ns | 2.839 ns | 2.915 ns | 1.00 | 0.00 | 0.2179 | - | - | 456 B |
-| StructLinq | Repeat | 100 | 164.29 ns | 3.302 ns | 3.391 ns | 1.17 | 0.03 | 0.2141 | - | - | 448 B |
-| LinqFaster_SIMD | Repeat | 100 | 36.61 ns | 0.810 ns | 1.053 ns | 0.26 | 0.01 | 0.2027 | - | - | 424 B |
-| Hyperlinq | Repeat | 100 | 63.87 ns | 1.072 ns | 1.053 ns | 0.46 | 0.01 | 0.2027 | - | - | 424 B |
-| Hyperlinq_SIMD | Repeat | 100 | 52.59 ns | 0.871 ns | 0.815 ns | 0.38 | 0.01 | 0.2027 | - | - | 424 B |
-| | | | | | | | | | | | |
-| Linq_Async | Repeat_Async | 100 | 162.26 ns | 3.103 ns | 3.048 ns | 1.00 | 0.00 | 0.2255 | - | - | 472 B |
-| Hyperlinq_Async | Repeat_Async | 100 | 178.38 ns | 1.134 ns | 0.947 ns | 1.10 | 0.02 | 0.2027 | - | - | 424 B |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Allocated |
+|---------------- |------------- |------ |----------:|---------:|---------:|-------------:|--------:|-------:|----------:|
+| Linq | Repeat | 100 | 48.20 ns | 0.986 ns | 1.923 ns | baseline | | 0.2180 | 456 B |
+| StructLinq | Repeat | 100 | 87.02 ns | 0.783 ns | 0.694 ns | 1.72x slower | 0.06x | 0.2142 | 448 B |
+| LinqFaster_SIMD | Repeat | 100 | 40.09 ns | 0.580 ns | 0.542 ns | 1.25x faster | 0.05x | 0.2027 | 424 B |
+| Hyperlinq | Repeat | 100 | 42.98 ns | 0.979 ns | 1.690 ns | 1.12x faster | 0.05x | 0.2027 | 424 B |
+| Hyperlinq_SIMD | Repeat | 100 | 51.60 ns | 1.154 ns | 1.830 ns | 1.07x slower | 0.03x | 0.2027 | 424 B |
+| | | | | | | | | | |
+| Linq_Async | Repeat_Async | 100 | 120.20 ns | 1.425 ns | 1.333 ns | baseline | | 0.2255 | 472 B |
+| Hyperlinq_Async | Repeat_Async | 100 | 146.16 ns | 2.165 ns | 2.025 ns | 1.22x slower | 0.03x | 0.2027 | 424 B |
diff --git a/Benchmarks/ReturnBenchmarks.md b/Benchmarks/ReturnBenchmarks.md
index 142fef3ae..bcf875ded 100644
--- a/Benchmarks/ReturnBenchmarks.md
+++ b/Benchmarks/ReturnBenchmarks.md
@@ -4,28 +4,29 @@
[ReturnBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ReturnBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|----------------------- |------------- |----------:|----------:|----------:|------:|-------:|------:|------:|----------:|
-| Linq_Return | Return | 23.610 ns | 0.0936 ns | 0.0830 ns | 1.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_Return | Return | 8.642 ns | 0.0131 ns | 0.0116 ns | 0.37 | - | - | - | - |
-| | | | | | | | | | |
-| Linq_Return_Async | Return_Async | 54.968 ns | 0.1565 ns | 0.1387 ns | 1.00 | 0.0229 | - | - | 48 B |
-| Hyperlinq_Return_Async | Return_Async | 41.785 ns | 0.1437 ns | 0.1274 ns | 0.76 | - | - | - | - |
+| Method | Categories | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|----------------------- |------------- |----------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
+| Linq_Return | Return | 15.438 ns | 0.2360 ns | 0.2208 ns | 1.00 | 0.00 | 0.0191 | - | - | 40 B |
+| Hyperlinq_Return | Return | 8.734 ns | 0.0199 ns | 0.0177 ns | 0.57 | 0.01 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Return_Async | Return_Async | 59.871 ns | 1.1818 ns | 1.2645 ns | 1.00 | 0.00 | 0.0229 | - | - | 48 B |
+| Hyperlinq_Return_Async | Return_Async | 40.616 ns | 0.1893 ns | 0.1678 ns | 0.68 | 0.02 | - | - | - | - |
diff --git a/Benchmarks/SelectBenchmarks.md b/Benchmarks/SelectBenchmarks.md
index 7ab7f5911..8bf271f4e 100644
--- a/Benchmarks/SelectBenchmarks.md
+++ b/Benchmarks/SelectBenchmarks.md
@@ -4,32 +4,62 @@
[SelectBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/SelectBenchmarks.cs)
### References:
-- Linq: 5.0.2
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta33](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta33)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
-.NET Core SDK=5.0.200-preview.20614.14
- [Host] : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0 Categories=Array
+Runtime=.NET 6.0
```
-| Method | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------- |------ |---------:|--------:|--------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | 100 | 642.1 ns | 2.04 ns | 1.81 ns | 1.00 | 0.0229 | - | - | 48 B |
-| StructLinq_Array | 100 | 228.1 ns | 0.33 ns | 0.26 ns | 0.36 | - | - | - | - |
-| Hyperlinq_Span_For | 100 | 170.3 ns | 1.06 ns | 0.99 ns | 0.27 | - | - | - | - |
-| Hyperlinq_Span_Foreach | 100 | 202.8 ns | 0.68 ns | 0.60 ns | 0.32 | - | - | - | - |
-| Hyperlinq_Span_SIMD | 100 | 411.2 ns | 2.49 ns | 2.33 ns | 0.64 | - | - | - | - |
-| Hyperlinq_Memory_For | 100 | 344.4 ns | 2.31 ns | 2.05 ns | 0.54 | - | - | - | - |
-| Hyperlinq_Memory_Foreach | 100 | 231.5 ns | 1.13 ns | 0.88 ns | 0.36 | - | - | - | - |
-| Hyperlinq_Memory_SIMD | 100 | 451.4 ns | 2.79 ns | 2.61 ns | 0.70 | - | - | - | - |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 634.9 ns | 6.67 ns | 5.92 ns | 1.00 | 0.0229 | - | - | 48 B |
+| StructLinq_Array | Array | 100 | 206.7 ns | 1.40 ns | 1.17 ns | 0.33 | - | - | - | - |
+| Hyperlinq_Array_For | Array | 100 | 300.1 ns | 2.67 ns | 2.49 ns | 0.47 | - | - | - | - |
+| Hyperlinq_Array_Foreach | Array | 100 | 209.7 ns | 0.70 ns | 0.62 ns | 0.33 | - | - | - | - |
+| Hyperlinq_Span_For | Array | 100 | 196.8 ns | 1.09 ns | 1.02 ns | 0.31 | - | - | - | - |
+| Hyperlinq_Span_Foreach | Array | 100 | 230.9 ns | 0.87 ns | 0.81 ns | 0.36 | - | - | - | - |
+| Hyperlinq_Memory_For | Array | 100 | 350.3 ns | 2.06 ns | 1.72 ns | 0.55 | - | - | - | - |
+| Hyperlinq_Memory_Foreach | Array | 100 | 232.6 ns | 0.50 ns | 0.41 ns | 0.37 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,168.6 ns | 4.90 ns | 3.83 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 789.1 ns | 2.65 ns | 2.35 ns | 0.67 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 209.2 ns | 0.60 ns | 0.53 ns | 0.18 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 1,192.1 ns | 5.24 ns | 4.38 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 780.3 ns | 3.58 ns | 3.18 ns | 0.65 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 208.0 ns | 0.74 ns | 0.62 ns | 0.17 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 1,190.9 ns | 11.63 ns | 10.31 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_List_Value | List_Value | 100 | 440.0 ns | 1.36 ns | 1.27 ns | 0.37 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 743.3 ns | 5.20 ns | 4.61 ns | 0.62 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 6,530.2 ns | 23.55 ns | 20.88 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 4,789.9 ns | 24.40 ns | 22.82 ns | 0.73 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 1,157.4 ns | 6.61 ns | 6.19 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 789.6 ns | 5.00 ns | 4.44 ns | 0.68 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 758.0 ns | 4.30 ns | 3.81 ns | 0.66 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 1,158.5 ns | 4.83 ns | 3.77 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 789.2 ns | 4.96 ns | 4.40 ns | 0.68 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 761.8 ns | 3.01 ns | 2.81 ns | 0.66 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 1,178.0 ns | 8.81 ns | 8.24 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_List_Reference | List_Reference | 100 | 778.2 ns | 2.60 ns | 2.43 ns | 0.66 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 782.6 ns | 3.64 ns | 3.04 ns | 0.66 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 6,551.7 ns | 31.19 ns | 29.17 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 5,147.7 ns | 14.49 ns | 12.85 ns | 0.79 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/SelectCountBenchmarks.md b/Benchmarks/SelectCountBenchmarks.md
index 520b12d00..93d15f732 100644
--- a/Benchmarks/SelectCountBenchmarks.md
+++ b/Benchmarks/SelectCountBenchmarks.md
@@ -4,58 +4,57 @@
[SelectCountBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/SelectCountBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
|------------------------------------ |-------------------------- |------ |-------------:|-----------:|-----------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 219.134 ns | 0.8228 ns | 0.6870 ns | 1.00 | 0.00 | 0.0229 | - | - | 48 B |
-| StructLinq_Array | Array | 100 | 10.007 ns | 0.0146 ns | 0.0130 ns | 0.05 | 0.00 | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 8.946 ns | 0.0141 ns | 0.0125 ns | 0.04 | 0.00 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 8.940 ns | 0.0145 ns | 0.0135 ns | 0.04 | 0.00 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 9.489 ns | 0.0204 ns | 0.0170 ns | 0.04 | 0.00 | - | - | - | - |
+| Linq_Array | Array | 100 | 196.867 ns | 1.2466 ns | 1.1051 ns | 1.00 | 0.00 | 0.0229 | - | - | 48 B |
+| StructLinq_Array | Array | 100 | 10.218 ns | 0.0308 ns | 0.0273 ns | 0.05 | 0.00 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 15.495 ns | 0.0355 ns | 0.0314 ns | 0.08 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 803.504 ns | 3.4588 ns | 3.0661 ns | 1.00 | 0.00 | 0.0420 | - | - | 88 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 796.036 ns | 1.6843 ns | 1.4065 ns | 0.99 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 149.788 ns | 0.2333 ns | 0.2068 ns | 0.19 | 0.00 | - | - | - | - |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 817.248 ns | 4.7910 ns | 4.0007 ns | 1.00 | 0.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 763.890 ns | 5.3349 ns | 4.7292 ns | 0.94 | 0.01 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 146.331 ns | 0.3951 ns | 0.3696 ns | 0.18 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 805.356 ns | 2.4730 ns | 2.3133 ns | 1.00 | 0.00 | 0.0420 | - | - | 88 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 774.031 ns | 1.2887 ns | 1.0761 ns | 0.96 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 11.941 ns | 0.0139 ns | 0.0123 ns | 0.01 | 0.00 | - | - | - | - |
+| Linq_Collection_Value | Collection_Value | 100 | 809.252 ns | 4.1536 ns | 3.6821 ns | 1.00 | 0.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 736.884 ns | 1.7281 ns | 1.6165 ns | 0.91 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 16.493 ns | 0.0749 ns | 0.0625 ns | 0.02 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 379.943 ns | 0.8789 ns | 0.7791 ns | 1.00 | 0.00 | 0.0267 | - | - | 56 B |
-| StructLinq_List_Value | List_Value | 100 | 10.201 ns | 0.0244 ns | 0.0229 ns | 0.03 | 0.00 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 7.511 ns | 0.0271 ns | 0.0254 ns | 0.02 | 0.00 | - | - | - | - |
+| Linq_List_Value | List_Value | 100 | 439.698 ns | 2.2291 ns | 2.0851 ns | 1.00 | 0.00 | 0.0267 | - | - | 56 B |
+| StructLinq_List_Value | List_Value | 100 | 10.504 ns | 0.0398 ns | 0.0372 ns | 0.02 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 4.450 ns | 0.0275 ns | 0.0244 ns | 0.01 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 8,902.444 ns | 23.6333 ns | 19.7349 ns | 1.00 | 0.00 | 0.0458 | - | - | 104 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 8,968.740 ns | 17.1138 ns | 14.2908 ns | 1.01 | 0.00 | 0.0610 | - | - | 136 B |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 7,285.015 ns | 19.6921 ns | 17.4565 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 790.400 ns | 2.4782 ns | 2.1968 ns | 0.11 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 594.794 ns | 0.9684 ns | 0.8585 ns | 1.00 | 0.00 | 0.0420 | - | - | 88 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 566.260 ns | 0.9518 ns | 0.8903 ns | 0.95 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 258.161 ns | 0.8138 ns | 0.7613 ns | 0.43 | 0.00 | 0.0153 | - | - | 32 B |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 809.637 ns | 4.1360 ns | 3.8688 ns | 1.00 | 0.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 761.509 ns | 3.4922 ns | 3.2666 ns | 0.94 | 0.01 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 397.099 ns | 1.3983 ns | 1.2395 ns | 0.49 | 0.00 | 0.0153 | - | - | 32 B |
| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 597.569 ns | 3.9864 ns | 3.5338 ns | 1.000 | 0.00 | 0.0420 | - | - | 88 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 572.285 ns | 1.3061 ns | 1.2217 ns | 0.958 | 0.01 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 4.136 ns | 0.0051 ns | 0.0043 ns | 0.007 | 0.00 | - | - | - | - |
+| Linq_Collection_Reference | Collection_Reference | 100 | 809.793 ns | 6.4629 ns | 5.3968 ns | 1.000 | 0.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 738.381 ns | 2.5787 ns | 2.1533 ns | 0.912 | 0.01 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 4.726 ns | 0.0338 ns | 0.0299 ns | 0.006 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 360.074 ns | 1.2968 ns | 1.1495 ns | 1.00 | 0.00 | 0.0267 | - | - | 56 B |
-| StructLinq_List_Reference | List_Reference | 100 | 526.575 ns | 7.2842 ns | 8.0964 ns | 1.47 | 0.02 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 7.479 ns | 0.0248 ns | 0.0207 ns | 0.02 | 0.00 | - | - | - | - |
+| Linq_List_Reference | List_Reference | 100 | 430.338 ns | 4.9343 ns | 4.1204 ns | 1.00 | 0.00 | 0.0267 | - | - | 56 B |
+| StructLinq_List_Reference | List_Reference | 100 | 765.248 ns | 5.5823 ns | 4.9486 ns | 1.78 | 0.03 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 4.693 ns | 0.0246 ns | 0.0230 ns | 0.01 | 0.00 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 8,636.721 ns | 29.1881 ns | 24.3733 ns | 1.00 | 0.00 | 0.0458 | - | - | 104 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 8,940.788 ns | 23.7462 ns | 22.2122 ns | 1.04 | 0.00 | 0.0610 | - | - | 152 B |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 6,910.703 ns | 32.3418 ns | 30.2525 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,432.868 ns | 2.7418 ns | 2.5647 ns | 0.21 | 0.00 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/SelectManyBenchmarks.md b/Benchmarks/SelectManyBenchmarks.md
index f7e46be29..affe992dc 100644
--- a/Benchmarks/SelectManyBenchmarks.md
+++ b/Benchmarks/SelectManyBenchmarks.md
@@ -4,48 +4,49 @@
[SelectManyBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/SelectManyBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------- |-------------------------- |------ |----------:|----------:|----------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 3.416 μs | 0.0082 μs | 0.0073 μs | 1.00 | 1.9569 | - | - | 4096 B |
-| Hyperlinq_Array | Array | 100 | 1.270 μs | 0.0012 μs | 0.0010 μs | 0.37 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 1.361 μs | 0.0021 μs | 0.0019 μs | 0.40 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 3.631 μs | 0.0080 μs | 0.0067 μs | 1.00 | 1.9569 | - | - | 4096 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 3.505 μs | 0.0063 μs | 0.0053 μs | 0.97 | 2.3537 | - | - | 4928 B |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 3.730 μs | 0.0086 μs | 0.0080 μs | 1.00 | 1.9569 | - | - | 4096 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 3.454 μs | 0.0116 μs | 0.0103 μs | 0.93 | 2.3537 | - | - | 4928 B |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 3.725 μs | 0.0064 μs | 0.0054 μs | 1.00 | 1.9569 | - | - | 4096 B |
-| Hyperlinq_List_Value | List_Value | 100 | 1.331 μs | 0.0021 μs | 0.0016 μs | 0.36 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 13.882 μs | 0.0308 μs | 0.0273 μs | 1.00 | 2.3804 | - | - | 4984 B |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 3.428 μs | 0.0070 μs | 0.0062 μs | 1.00 | 1.9569 | - | - | 4096 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 1.497 μs | 0.0029 μs | 0.0026 μs | 0.44 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 3.426 μs | 0.0069 μs | 0.0058 μs | 1.00 | 1.9569 | - | - | 4096 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 1.487 μs | 0.0019 μs | 0.0017 μs | 0.43 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 3.430 μs | 0.0068 μs | 0.0061 μs | 1.00 | 1.9569 | - | - | 4096 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 1.327 μs | 0.0017 μs | 0.0016 μs | 0.39 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 13.511 μs | 0.0257 μs | 0.0215 μs | 1.00 | 2.3804 | - | - | 4984 B |
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------- |-------------------------- |------ |----------:|----------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 2.756 μs | 0.0184 μs | 0.0163 μs | 2.753 μs | 1.00 | 0.00 | 1.9569 | - | - | 4,096 B |
+| Hyperlinq_Array | Array | 100 | 1.225 μs | 0.0035 μs | 0.0033 μs | 1.224 μs | 0.44 | 0.00 | - | - | - | - |
+| Hyperlinq_Memory | Array | 100 | 1.381 μs | 0.0050 μs | 0.0042 μs | 1.380 μs | 0.50 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 2.968 μs | 0.0281 μs | 0.0262 μs | 2.964 μs | 1.00 | 0.00 | 1.9569 | - | - | 4,096 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 3.670 μs | 0.0176 μs | 0.0147 μs | 3.668 μs | 1.24 | 0.01 | 2.3575 | - | - | 4,936 B |
+| | | | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 3.216 μs | 0.0163 μs | 0.0144 μs | 3.217 μs | 1.00 | 0.00 | 1.9569 | - | - | 4,096 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 3.312 μs | 0.0209 μs | 0.0185 μs | 3.308 μs | 1.03 | 0.01 | 2.3575 | - | - | 4,936 B |
+| | | | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 2.993 μs | 0.0211 μs | 0.0187 μs | 2.989 μs | 1.00 | 0.00 | 1.9569 | - | - | 4,096 B |
+| Hyperlinq_List_Value | List_Value | 100 | 3.341 μs | 0.0109 μs | 0.0091 μs | 3.343 μs | 1.12 | 0.01 | 2.3499 | - | - | 4,920 B |
+| | | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 11.621 μs | 0.0627 μs | 0.0587 μs | 11.609 μs | 1.00 | 0.00 | 2.3346 | - | - | 4,904 B |
+| | | | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 3.008 μs | 0.0336 μs | 0.0298 μs | 2.996 μs | 1.00 | 0.00 | 1.9569 | - | - | 4,096 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 3.409 μs | 0.0669 μs | 0.1322 μs | 3.331 μs | 1.19 | 0.04 | 2.3499 | - | - | 4,920 B |
+| | | | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 3.076 μs | 0.0604 μs | 0.1120 μs | 3.004 μs | 1.00 | 0.00 | 1.9569 | - | - | 4,096 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 3.482 μs | 0.0154 μs | 0.0206 μs | 3.476 μs | 1.11 | 0.04 | 2.3499 | - | - | 4,920 B |
+| | | | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 3.222 μs | 0.0175 μs | 0.0163 μs | 3.216 μs | 1.00 | 0.00 | 1.9569 | - | - | 4,096 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 3.599 μs | 0.0149 μs | 0.0140 μs | 3.599 μs | 1.12 | 0.01 | 2.3499 | - | - | 4,920 B |
+| | | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 11.918 μs | 0.0477 μs | 0.0423 μs | 11.915 μs | 1.00 | 0.00 | 2.3346 | - | - | 4,904 B |
diff --git a/Benchmarks/SelectSumBenchmarks.md b/Benchmarks/SelectSumBenchmarks.md
index 2bae871ac..6df38da3a 100644
--- a/Benchmarks/SelectSumBenchmarks.md
+++ b/Benchmarks/SelectSumBenchmarks.md
@@ -4,29 +4,58 @@
[SelectSumBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/SelectSumBenchmarks.cs)
### References:
-- Linq: 5.0.2
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta34](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta34)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
-.NET Core SDK=5.0.200-preview.20614.14
- [Host] : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0 Categories=Array
+Runtime=.NET 6.0
```
-| Method | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|-------------------- |------ |----------:|---------:|---------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | 100 | 667.37 ns | 6.329 ns | 7.773 ns | 1.00 | 0.0229 | - | - | 48 B |
-| StructLinq_Array | 100 | 187.38 ns | 0.992 ns | 0.828 ns | 0.28 | - | - | - | - |
-| Hyperlinq_Array | 100 | 173.83 ns | 2.209 ns | 1.845 ns | 0.26 | - | - | - | - |
-| Hyperlinq_Span | 100 | 170.41 ns | 0.836 ns | 0.698 ns | 0.25 | - | - | - | - |
-| Hyperlinq_Span_SIMD | 100 | 63.81 ns | 1.143 ns | 1.013 ns | 0.10 | - | - | - | - |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |------------:|----------:|----------:|------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 649.45 ns | 5.100 ns | 4.770 ns | 1.00 | 0.0229 | - | - | 48 B |
+| StructLinq_Array | Array | 100 | 215.68 ns | 0.939 ns | 0.784 ns | 0.33 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 222.11 ns | 0.351 ns | 0.311 ns | 0.34 | - | - | - | - |
+| Hyperlinq_Array_SIMD | Array | 100 | 64.66 ns | 0.289 ns | 0.271 ns | 0.10 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,153.23 ns | 5.437 ns | 4.820 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 760.14 ns | 6.392 ns | 5.666 ns | 0.66 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 203.58 ns | 0.543 ns | 0.454 ns | 0.18 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 1,188.28 ns | 11.234 ns | 10.509 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 733.31 ns | 3.357 ns | 3.140 ns | 0.62 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 210.94 ns | 1.034 ns | 0.807 ns | 0.18 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 1,170.55 ns | 10.191 ns | 7.957 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_List_Value | List_Value | 100 | 392.49 ns | 1.152 ns | 1.021 ns | 0.34 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 767.69 ns | 2.820 ns | 2.638 ns | 0.66 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 6,939.54 ns | 31.039 ns | 27.515 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,004.69 ns | 7.381 ns | 6.543 ns | 0.29 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 1,201.44 ns | 6.594 ns | 5.845 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 762.89 ns | 3.737 ns | 3.312 ns | 0.63 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 788.19 ns | 4.610 ns | 4.312 ns | 0.66 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 1,201.80 ns | 6.314 ns | 5.906 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 733.73 ns | 4.762 ns | 4.221 ns | 0.61 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 792.80 ns | 3.573 ns | 3.167 ns | 0.66 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 1,225.54 ns | 14.180 ns | 12.571 ns | 1.00 | 0.0420 | - | - | 88 B |
+| StructLinq_List_Reference | List_Reference | 100 | 758.23 ns | 4.108 ns | 3.207 ns | 0.62 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 771.48 ns | 4.268 ns | 3.784 ns | 0.63 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 6,894.63 ns | 27.438 ns | 24.323 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,798.15 ns | 4.396 ns | 3.897 ns | 0.41 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/SelectToArrayBenchmarks.md b/Benchmarks/SelectToArrayBenchmarks.md
index a3b139a00..d78393d54 100644
--- a/Benchmarks/SelectToArrayBenchmarks.md
+++ b/Benchmarks/SelectToArrayBenchmarks.md
@@ -4,61 +4,59 @@
[SelectToArrayBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/SelectToArrayBenchmarks.cs)
### References:
-- Linq: 5.0.3
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta39](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta39)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
-.NET Core SDK=6.0.100-preview.1.21103.13
- [Host] : .NET Core 5.0.3 (CoreCLR 5.0.321.7212, CoreFX 5.0.321.7212), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.3 (CoreCLR 5.0.321.7212, CoreFX 5.0.321.7212), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |------------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 267.88 ns | 2.668 ns | 2.365 ns | 1.00 | 0.00 | 0.2255 | - | - | 472 B |
-| StructLinq_Array | Array | 100 | 273.06 ns | 4.607 ns | 4.084 ns | 1.02 | 0.01 | 0.2027 | - | - | 424 B |
-| LinqFasterSIMD_Array | Array | 100 | 99.65 ns | 1.953 ns | 1.827 ns | 0.37 | 0.01 | 0.2027 | - | - | 424 B |
-| Hyperlinq_Array | Array | 100 | 269.94 ns | 4.902 ns | 4.585 ns | 1.01 | 0.02 | 0.2027 | - | - | 424 B |
-| Hyperlinq_Span | Array | 100 | 239.28 ns | 2.553 ns | 2.388 ns | 0.89 | 0.01 | 0.2027 | - | - | 424 B |
-| Hyperlinq_Span_SIMD | Array | 100 | 109.47 ns | 1.910 ns | 1.693 ns | 0.41 | 0.01 | 0.2027 | - | - | 424 B |
-| Hyperlinq_Memory | Array | 100 | 274.17 ns | 5.390 ns | 5.991 ns | 1.02 | 0.02 | 0.2027 | - | - | 424 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,285.51 ns | 25.581 ns | 26.270 ns | 1.00 | 0.00 | 0.5913 | - | - | 1240 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,129.23 ns | 8.712 ns | 7.723 ns | 0.88 | 0.02 | 0.2174 | - | - | 456 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 663.26 ns | 6.979 ns | 6.528 ns | 0.52 | 0.01 | 0.2022 | - | - | 424 B |
-| Hyperlinq_Enumerable_Value_SIMD | Enumerable_Value | 100 | 700.52 ns | 9.899 ns | 10.591 ns | 0.55 | 0.01 | 0.2289 | - | - | 480 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 1,273.49 ns | 18.642 ns | 16.526 ns | 1.00 | 0.00 | 0.5913 | - | - | 1240 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 1,153.21 ns | 6.918 ns | 6.133 ns | 0.91 | 0.01 | 0.2174 | - | - | 456 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 406.46 ns | 6.649 ns | 6.219 ns | 0.32 | 0.01 | 0.2027 | - | - | 424 B |
-| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 468.99 ns | 4.210 ns | 3.516 ns | 1.00 | 0.00 | 0.2294 | - | - | 480 B |
-| StructLinq_List_Value | List_Value | 100 | 445.91 ns | 5.327 ns | 4.159 ns | 0.95 | 0.01 | 0.2027 | - | - | 424 B |
-| Hyperlinq_List_Value | List_Value | 100 | 511.99 ns | 5.562 ns | 4.931 ns | 1.09 | 0.01 | 0.2027 | - | - | 424 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 964.21 ns | 17.884 ns | 15.854 ns | 1.00 | 0.00 | 0.5922 | - | - | 1240 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 936.40 ns | 10.404 ns | 8.688 ns | 0.97 | 0.02 | 0.2174 | - | - | 456 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 1,000.13 ns | 5.117 ns | 4.273 ns | 1.04 | 0.02 | 0.2174 | - | - | 456 B |
-| Hyperlinq_Enumerable_Reference_SIMD | Enumerable_Reference | 100 | 978.08 ns | 6.965 ns | 6.515 ns | 1.02 | 0.02 | 0.2441 | - | - | 512 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 958.07 ns | 11.892 ns | 9.930 ns | 1.00 | 0.00 | 0.5922 | - | - | 1240 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 938.89 ns | 9.194 ns | 7.178 ns | 0.98 | 0.01 | 0.2174 | - | - | 456 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 645.53 ns | 8.129 ns | 7.604 ns | 0.67 | 0.01 | 0.2174 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 470.57 ns | 6.943 ns | 6.155 ns | 1.00 | 0.00 | 0.2294 | - | - | 480 B |
-| StructLinq_List_Reference | List_Reference | 100 | 942.82 ns | 5.208 ns | 4.066 ns | 2.01 | 0.02 | 0.2174 | - | - | 456 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 483.23 ns | 3.540 ns | 3.312 ns | 1.03 | 0.01 | 0.2027 | - | - | 424 B |
-| | | | | | | | | | | | |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 9,811.24 ns | 52.535 ns | 49.142 ns | ? | ? | 0.8087 | - | - | 1712 B |
-| | | | | | | | | | | | |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 9,564.61 ns | 61.404 ns | 57.437 ns | ? | ? | 0.8240 | - | - | 1728 B |
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Allocated |
+|------------------------------------ |-------------------------- |------ |------------:|-----------:|-----------:|------------:|-------------:|--------:|-------:|----------:|
+| Linq_Array | Array | 100 | 473.47 ns | 8.574 ns | 13.093 ns | 474.67 ns | baseline | | 0.2251 | 472 B |
+| StructLinq_Array | Array | 100 | 279.61 ns | 4.617 ns | 4.093 ns | 282.23 ns | 1.72x faster | 0.04x | 0.2027 | 424 B |
+| LinqFasterSIMD_Array | Array | 100 | 85.80 ns | 1.640 ns | 2.455 ns | 85.24 ns | 5.53x faster | 0.21x | 0.2027 | 424 B |
+| Hyperlinq_Array | Array | 100 | 280.63 ns | 5.198 ns | 7.115 ns | 277.93 ns | 1.70x faster | 0.05x | 0.2027 | 424 B |
+| Hyperlinq_Array_SIMD | Array | 100 | 102.08 ns | 1.429 ns | 1.336 ns | 102.36 ns | 4.70x faster | 0.09x | 0.2027 | 424 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,201.02 ns | 102.339 ns | 298.527 ns | 1,025.14 ns | baseline | | 0.5913 | 1,240 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 805.17 ns | 3.606 ns | 3.011 ns | 804.47 ns | 1.52x faster | 0.38x | 0.2174 | 456 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 715.93 ns | 14.451 ns | 14.840 ns | 711.77 ns | 1.63x faster | 0.42x | 0.2022 | 424 B |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 1,183.52 ns | 77.980 ns | 229.924 ns | 1,133.48 ns | baseline | | 0.5913 | 1,240 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 805.63 ns | 3.765 ns | 3.522 ns | 804.45 ns | 1.39x faster | 0.27x | 0.2174 | 456 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 289.68 ns | 1.739 ns | 1.542 ns | 289.81 ns | 3.86x faster | 0.78x | 0.2027 | 424 B |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 394.66 ns | 27.126 ns | 75.166 ns | 353.41 ns | baseline | | 0.2289 | 480 B |
+| StructLinq_List_Value | List_Value | 100 | 403.84 ns | 8.158 ns | 7.631 ns | 404.80 ns | 1.21x faster | 0.06x | 0.2027 | 424 B |
+| Hyperlinq_List_Value | List_Value | 100 | 524.14 ns | 10.475 ns | 11.643 ns | 524.80 ns | 1.09x slower | 0.07x | 0.2174 | 456 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 8,846.07 ns | 165.241 ns | 176.806 ns | 8,888.90 ns | baseline | | 0.7935 | 1,672 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 3,086.01 ns | 8.120 ns | 7.198 ns | 3,083.77 ns | 2.87x faster | 0.06x | 0.5646 | 1,184 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 702.52 ns | 14.093 ns | 18.814 ns | 695.92 ns | baseline | | 0.5922 | 1,240 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 805.96 ns | 12.195 ns | 12.523 ns | 802.69 ns | 1.15x slower | 0.03x | 0.2174 | 456 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 872.85 ns | 14.855 ns | 13.895 ns | 871.81 ns | 1.25x slower | 0.04x | 0.2174 | 456 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 692.92 ns | 13.428 ns | 17.925 ns | 690.88 ns | baseline | | 0.5922 | 1,240 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 804.78 ns | 2.292 ns | 2.032 ns | 804.27 ns | 1.16x slower | 0.04x | 0.2174 | 456 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 439.96 ns | 7.570 ns | 7.081 ns | 442.66 ns | 1.57x faster | 0.05x | 0.2179 | 456 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 336.83 ns | 1.248 ns | 1.106 ns | 336.54 ns | baseline | | 0.2294 | 480 B |
+| StructLinq_List_Reference | List_Reference | 100 | 870.21 ns | 30.533 ns | 89.066 ns | 817.73 ns | 3.07x slower | 0.10x | 0.2174 | 456 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 523.11 ns | 10.507 ns | 12.904 ns | 520.44 ns | 1.56x slower | 0.04x | 0.2174 | 456 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 8,857.84 ns | 146.367 ns | 136.912 ns | 8,931.34 ns | baseline | | 0.7935 | 1,672 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 3,237.06 ns | 56.426 ns | 50.020 ns | 3,214.50 ns | 2.73x faster | 0.07x | 0.5798 | 1,216 B |
diff --git a/Benchmarks/SelectToListBenchmarks.md b/Benchmarks/SelectToListBenchmarks.md
index ebc17ede4..a74b7e096 100644
--- a/Benchmarks/SelectToListBenchmarks.md
+++ b/Benchmarks/SelectToListBenchmarks.md
@@ -4,56 +4,58 @@
[SelectToListBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/SelectToListBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_List | Array | 100 | 313.9 ns | 0.99 ns | 0.87 ns | 1.00 | 0.00 | 0.2408 | - | - | 504 B |
-| StructLinq_List | Array | 100 | 259.8 ns | 0.65 ns | 0.61 ns | 0.83 | 0.00 | 0.2179 | - | - | 456 B |
-| Hyperlinq_List | Array | 100 | 222.9 ns | 0.43 ns | 0.36 ns | 0.71 | 0.00 | 0.2179 | - | - | 456 B |
-| Hyperlinq_Span | Array | 100 | 221.4 ns | 0.86 ns | 0.77 ns | 0.71 | 0.00 | 0.2179 | - | - | 456 B |
-| Hyperlinq_Memory | Array | 100 | 202.7 ns | 0.68 ns | 0.57 ns | 0.65 | 0.00 | 0.2179 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,079.1 ns | 2.63 ns | 2.46 ns | 1.00 | 0.00 | 0.6065 | - | - | 1272 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,032.1 ns | 3.91 ns | 3.47 ns | 0.96 | 0.00 | 0.2327 | - | - | 488 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 617.7 ns | 0.95 ns | 0.88 ns | 0.57 | 0.00 | 0.2174 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 1,117.5 ns | 3.96 ns | 3.31 ns | 1.00 | 0.00 | 0.6065 | - | - | 1272 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 1,029.1 ns | 3.21 ns | 3.00 ns | 0.92 | 0.00 | 0.2327 | - | - | 488 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 252.1 ns | 1.15 ns | 1.08 ns | 0.23 | 0.00 | 0.2179 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 504.9 ns | 1.24 ns | 1.03 ns | 1.00 | 0.00 | 0.2441 | - | - | 512 B |
-| StructLinq_List_Value | List_Value | 100 | 442.3 ns | 0.88 ns | 0.78 ns | 0.88 | 0.00 | 0.2179 | - | - | 456 B |
-| Hyperlinq_List_Value | List_Value | 100 | 385.6 ns | 1.02 ns | 0.91 ns | 0.76 | 0.00 | 0.2179 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 883.2 ns | 2.55 ns | 2.26 ns | 1.00 | 0.00 | 0.6075 | - | - | 1272 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 872.5 ns | 1.61 ns | 1.43 ns | 0.99 | 0.00 | 0.2327 | - | - | 488 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 953.2 ns | 1.67 ns | 1.39 ns | 1.08 | 0.00 | 0.2327 | - | - | 488 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 919.5 ns | 1.37 ns | 1.07 ns | 1.00 | 0.00 | 0.6075 | - | - | 1272 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 857.0 ns | 1.77 ns | 1.65 ns | 0.93 | 0.00 | 0.2327 | - | - | 488 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 604.9 ns | 4.90 ns | 4.34 ns | 0.66 | 0.01 | 0.2327 | - | - | 488 B |
-| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 458.1 ns | 1.16 ns | 1.03 ns | 1.00 | 0.00 | 0.2446 | - | - | 512 B |
-| StructLinq_List_Reference | List_Reference | 100 | 875.1 ns | 1.77 ns | 1.48 ns | 1.91 | 0.00 | 0.2327 | - | - | 488 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 389.0 ns | 1.96 ns | 1.64 ns | 0.85 | 0.00 | 0.2179 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 9,480.1 ns | 14.18 ns | 12.57 ns | ? | ? | 0.6256 | - | - | 1320 B |
-| | | | | | | | | | | | |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 9,036.1 ns | 22.12 ns | 19.61 ns | ? | ? | 0.6256 | - | - | 1336 B |
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Allocated |
+|------------------------------------ |-------------------------- |------ |------------:|----------:|------------:|------------:|-------------:|--------:|-------:|----------:|
+| Linq_Array | Array | 100 | 499.4 ns | 42.91 ns | 126.52 ns | 424.5 ns | baseline | | 0.2403 | 504 B |
+| StructLinq_Array | Array | 100 | 447.4 ns | 37.68 ns | 111.09 ns | 375.6 ns | 1.16x faster | 0.32x | 0.2179 | 456 B |
+| Hyperlinq_Array | Array | 100 | 395.9 ns | 27.26 ns | 80.39 ns | 353.2 ns | 1.31x faster | 0.42x | 0.2179 | 456 B |
+| Hyperlinq_Array_SIMD | Array | 100 | 152.7 ns | 11.64 ns | 34.13 ns | 131.7 ns | 3.47x faster | 1.26x | 0.2179 | 456 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 963.8 ns | 83.58 ns | 246.45 ns | 827.4 ns | baseline | | 0.6075 | 1,272 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 838.4 ns | 9.00 ns | 7.03 ns | 836.9 ns | 1.05x faster | 0.26x | 0.2327 | 488 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 977.0 ns | 75.52 ns | 222.68 ns | 837.1 ns | 1.09x slower | 0.39x | 0.2174 | 456 B |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 884.4 ns | 63.72 ns | 186.87 ns | 770.8 ns | baseline | | 0.6075 | 1,272 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 1,093.3 ns | 87.91 ns | 259.22 ns | 1,007.2 ns | 1.29x slower | 0.42x | 0.2327 | 488 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 347.6 ns | 6.99 ns | 6.86 ns | 347.5 ns | 2.48x faster | 0.47x | 0.2179 | 456 B |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 595.9 ns | 49.90 ns | 147.13 ns | 544.4 ns | baseline | | 0.2446 | 512 B |
+| StructLinq_List_Value | List_Value | 100 | 566.4 ns | 41.64 ns | 122.78 ns | 485.8 ns | 1.01x slower | 0.35x | 0.2174 | 456 B |
+| Hyperlinq_List_Value | List_Value | 100 | 703.2 ns | 60.70 ns | 178.02 ns | 592.7 ns | 1.24x slower | 0.41x | 0.2327 | 488 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 11,551.1 ns | 633.63 ns | 1,868.27 ns | 11,329.3 ns | baseline | | 0.6104 | 1,280 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 4,334.4 ns | 252.18 ns | 743.57 ns | 4,145.6 ns | 2.72x faster | 0.54x | 0.5798 | 1,216 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 901.0 ns | 64.70 ns | 190.76 ns | 782.3 ns | baseline | | 0.6075 | 1,272 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 994.9 ns | 62.26 ns | 183.58 ns | 877.2 ns | 1.15x slower | 0.31x | 0.2327 | 488 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 1,237.7 ns | 104.77 ns | 307.28 ns | 1,124.8 ns | 1.43x slower | 0.46x | 0.2327 | 488 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 736.4 ns | 9.91 ns | 9.74 ns | 733.0 ns | baseline | | 0.6065 | 1,272 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 856.6 ns | 17.26 ns | 21.19 ns | 852.4 ns | 1.16x slower | 0.04x | 0.2327 | 488 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 631.3 ns | 54.20 ns | 159.81 ns | 524.5 ns | 1.18x faster | 0.34x | 0.2327 | 488 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 573.6 ns | 45.82 ns | 135.10 ns | 510.4 ns | baseline | | 0.2441 | 512 B |
+| StructLinq_List_Reference | List_Reference | 100 | 1,082.1 ns | 87.71 ns | 258.61 ns | 972.5 ns | 2.00x slower | 0.69x | 0.2327 | 488 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 724.9 ns | 66.44 ns | 195.91 ns | 606.8 ns | 1.30x slower | 0.34x | 0.2327 | 488 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 11,006.0 ns | 599.34 ns | 1,748.30 ns | 10,037.5 ns | baseline | | 0.6104 | 1,280 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 3,231.7 ns | 10.46 ns | 8.73 ns | 3,229.7 ns | 3.40x faster | 0.33x | 0.5951 | 1,248 B |
diff --git a/Benchmarks/SingleBenchmarks.md b/Benchmarks/SingleBenchmarks.md
index cb629839e..b11f4ae92 100644
--- a/Benchmarks/SingleBenchmarks.md
+++ b/Benchmarks/SingleBenchmarks.md
@@ -4,55 +4,48 @@
[SingleBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/SingleBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |----------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 1 | 11.192 ns | 0.0386 ns | 0.0322 ns | 1.00 | 0.00 | - | - | - | - |
-| Hyperlinq_Array | Array | 1 | 5.163 ns | 0.0090 ns | 0.0084 ns | 0.46 | 0.00 | - | - | - | - |
-| Hyperlinq_Span | Array | 1 | 5.743 ns | 0.0095 ns | 0.0085 ns | 0.51 | 0.00 | - | - | - | - |
-| Hyperlinq_Memory | Array | 1 | 7.674 ns | 0.0115 ns | 0.0096 ns | 0.69 | 0.00 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 1 | 22.396 ns | 0.0761 ns | 0.0635 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 1 | 15.166 ns | 0.0283 ns | 0.0236 ns | 0.68 | 0.00 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 1 | 22.736 ns | 0.0904 ns | 0.0845 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 1 | 22.084 ns | 0.0493 ns | 0.0437 ns | 0.97 | 0.00 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 1 | 7.208 ns | 0.0328 ns | 0.0291 ns | 1.00 | 0.00 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 1 | 7.339 ns | 0.0142 ns | 0.0133 ns | 1.02 | 0.00 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 1 | 86.784 ns | 0.1634 ns | 0.1448 ns | 1.00 | 0.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 1 | NA | NA | NA | ? | ? | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 1 | 18.076 ns | 0.1049 ns | 0.0930 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 1 | 19.090 ns | 0.0687 ns | 0.0643 ns | 1.06 | 0.01 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 1 | 18.010 ns | 0.1005 ns | 0.0891 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 1 | 19.315 ns | 0.0738 ns | 0.0654 ns | 1.07 | 0.01 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 1 | 7.222 ns | 0.0207 ns | 0.0183 ns | 1.00 | 0.00 | - | - | - | - |
-| Hyperlinq_List_Reference | List_Reference | 1 | 7.424 ns | 0.0126 ns | 0.0099 ns | 1.03 | 0.00 | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 1 | 85.182 ns | 0.0826 ns | 0.0772 ns | 1.00 | 0.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 1 | NA | NA | NA | ? | ? | - | - | - | - |
-
-Benchmarks with issues:
- SingleBenchmarks.Hyperlinq_AsyncEnumerable_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=1]
- SingleBenchmarks.Hyperlinq_AsyncEnumerable_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=1]
+| Method | Categories | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------- |-------------------------- |----------:|----------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 12.526 ns | 0.0206 ns | 0.0172 ns | 12.529 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_Array | Array | 14.608 ns | 0.0273 ns | 0.0228 ns | 14.603 ns | 1.17 | 0.00 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 27.451 ns | 0.5681 ns | 0.9174 ns | 26.928 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 16.618 ns | 0.0609 ns | 0.0540 ns | 16.613 ns | 0.59 | 0.02 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 27.694 ns | 0.5846 ns | 1.0690 ns | 27.020 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 19.865 ns | 0.0745 ns | 0.0697 ns | 19.860 ns | 0.68 | 0.01 | - | - | - | - |
+| | | | | | | | | | | | |
+| Linq_List_Value | List_Value | 8.626 ns | 0.0731 ns | 0.0684 ns | 8.596 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 21.742 ns | 0.1679 ns | 0.1488 ns | 21.691 ns | 2.52 | 0.03 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 75.792 ns | 0.5077 ns | 0.4749 ns | 75.774 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 26.768 ns | 0.2276 ns | 0.2018 ns | 26.724 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 22.935 ns | 0.4758 ns | 0.7266 ns | 23.214 ns | 0.84 | 0.03 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 28.074 ns | 0.5883 ns | 1.1334 ns | 27.380 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 18.836 ns | 0.4056 ns | 0.3596 ns | 18.713 ns | 0.68 | 0.02 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 8.563 ns | 0.0461 ns | 0.0408 ns | 8.560 ns | 1.00 | 0.00 | - | - | - | - |
+| Hyperlinq_List_Reference | List_Reference | 24.796 ns | 0.5120 ns | 0.5478 ns | 24.930 ns | 2.89 | 0.08 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 79.490 ns | 0.3291 ns | 0.2917 ns | 79.473 ns | 1.00 | 0.00 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/SkipTakeBenchmarks.md b/Benchmarks/SkipTakeBenchmarks.md
index d3bb7b8bc..c0b7c0148 100644
--- a/Benchmarks/SkipTakeBenchmarks.md
+++ b/Benchmarks/SkipTakeBenchmarks.md
@@ -4,63 +4,64 @@
[SkipTakeBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/SkipTakeBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
| Method | Categories | Skip | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
|------------------------------------ |-------------------------- |----- |------ |------------:|----------:|----------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 100 | 828.46 ns | 1.483 ns | 1.238 ns | 1.00 | 0.0458 | - | - | 96 B |
-| StructLinq_Array | Array | 100 | 100 | 110.94 ns | 0.191 ns | 0.160 ns | 0.13 | - | - | - | - |
-| Hyperlinq_Array_For | Array | 100 | 100 | 61.62 ns | 0.086 ns | 0.081 ns | 0.07 | - | - | - | - |
-| Hyperlinq_Array_Foreach | Array | 100 | 100 | 297.77 ns | 0.490 ns | 0.458 ns | 0.36 | - | - | - | - |
-| Hyperlinq_Span_For | Array | 100 | 100 | 61.64 ns | 0.112 ns | 0.094 ns | 0.07 | - | - | - | - |
-| Hyperlinq_Span_Foreach | Array | 100 | 100 | 49.31 ns | 0.293 ns | 0.259 ns | 0.06 | - | - | - | - |
-| Hyperlinq_Memory_For | Array | 100 | 100 | 59.74 ns | 0.183 ns | 0.153 ns | 0.07 | - | - | - | - |
-| Hyperlinq_Memory_Foreach | Array | 100 | 100 | 60.51 ns | 0.166 ns | 0.156 ns | 0.07 | - | - | - | - |
+| Linq_Array | Array | 100 | 100 | 845.25 ns | 3.560 ns | 3.330 ns | 1.00 | 0.0458 | - | - | 96 B |
+| StructLinq_Array | Array | 100 | 100 | 50.19 ns | 0.296 ns | 0.262 ns | 0.06 | - | - | - | - |
+| Hyperlinq_Array_For | Array | 100 | 100 | 227.75 ns | 0.798 ns | 0.707 ns | 0.27 | - | - | - | - |
+| Hyperlinq_Array_Foreach | Array | 100 | 100 | 181.95 ns | 0.795 ns | 0.744 ns | 0.22 | - | - | - | - |
+| Hyperlinq_Span_For | Array | 100 | 100 | 81.07 ns | 0.268 ns | 0.237 ns | 0.10 | - | - | - | - |
+| Hyperlinq_Span_Foreach | Array | 100 | 100 | 172.28 ns | 0.457 ns | 0.427 ns | 0.20 | - | - | - | - |
+| Hyperlinq_Memory_For | Array | 100 | 100 | 227.28 ns | 1.257 ns | 1.115 ns | 0.27 | - | - | - | - |
+| Hyperlinq_Memory_Foreach | Array | 100 | 100 | 177.62 ns | 1.639 ns | 1.533 ns | 0.21 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 100 | 1,523.79 ns | 2.700 ns | 2.394 ns | 1.00 | 0.0687 | - | - | 144 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 100 | 968.79 ns | 2.805 ns | 2.342 ns | 0.64 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 100 | 498.73 ns | 1.486 ns | 1.390 ns | 0.33 | - | - | - | - |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 100 | 1,451.84 ns | 4.117 ns | 3.649 ns | 1.00 | 0.0687 | - | - | 144 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 100 | 1,044.34 ns | 10.380 ns | 9.202 ns | 0.72 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 100 | 444.77 ns | 1.408 ns | 1.317 ns | 0.31 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 100 | 1,532.42 ns | 5.043 ns | 4.717 ns | 1.00 | 0.0687 | - | - | 144 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 100 | 967.60 ns | 3.050 ns | 2.704 ns | 0.63 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 100 | 610.03 ns | 2.245 ns | 1.990 ns | 0.40 | - | - | - | - |
+| Linq_Collection_Value | Collection_Value | 100 | 100 | 1,456.82 ns | 8.496 ns | 7.531 ns | 1.00 | 0.0687 | - | - | 144 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 100 | 1,009.74 ns | 6.760 ns | 5.992 ns | 0.69 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 100 | 599.00 ns | 2.087 ns | 1.743 ns | 0.41 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 100 | 834.17 ns | 2.057 ns | 1.924 ns | 1.00 | 0.0458 | - | - | 96 B |
-| StructLinq_List_Value | List_Value | 100 | 100 | 222.05 ns | 0.326 ns | 0.272 ns | 0.27 | - | - | - | - |
-| Hyperlinq_List_Value_For | List_Value | 100 | 100 | 401.71 ns | 0.787 ns | 0.697 ns | 0.48 | - | - | - | - |
-| Hyperlinq_List_Value_Foreach | List_Value | 100 | 100 | 248.95 ns | 1.327 ns | 1.176 ns | 0.30 | - | - | - | - |
+| Linq_List_Value | List_Value | 100 | 100 | 795.57 ns | 8.248 ns | 7.312 ns | 1.00 | 0.0458 | - | - | 96 B |
+| StructLinq_List_Value | List_Value | 100 | 100 | 224.50 ns | 0.712 ns | 0.594 ns | 0.28 | - | - | - | - |
+| Hyperlinq_List_Value_For | List_Value | 100 | 100 | 652.01 ns | 3.322 ns | 2.944 ns | 0.82 | - | - | - | - |
+| Hyperlinq_List_Value_Foreach | List_Value | 100 | 100 | 219.90 ns | 0.867 ns | 0.769 ns | 0.28 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 100 | 9,571.18 ns | 42.371 ns | 37.561 ns | 1.00 | 0.1221 | - | - | 256 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 100 | 5,312.43 ns | 16.175 ns | 14.338 ns | 0.56 | 0.0305 | - | - | 72 B |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 100 | 8,059.23 ns | 34.660 ns | 30.725 ns | 1.00 | 0.0763 | - | - | 176 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 100 | 4,271.00 ns | 11.989 ns | 10.628 ns | 0.53 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 100 | 1,172.66 ns | 4.419 ns | 3.917 ns | 1.00 | 0.0687 | - | - | 144 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 100 | 706.05 ns | 1.648 ns | 1.542 ns | 0.60 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 100 | 826.26 ns | 3.009 ns | 2.349 ns | 0.70 | 0.0153 | - | - | 32 B |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 100 | 1,497.90 ns | 5.207 ns | 4.616 ns | 1.00 | 0.0687 | - | - | 144 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 100 | 1,047.97 ns | 6.071 ns | 5.679 ns | 0.70 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 100 | 1,103.82 ns | 4.664 ns | 4.362 ns | 0.74 | 0.0153 | - | - | 32 B |
| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 100 | 1,148.65 ns | 3.342 ns | 2.963 ns | 1.00 | 0.0687 | - | - | 144 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 100 | 677.29 ns | 1.542 ns | 1.367 ns | 0.59 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 100 | 931.79 ns | 2.819 ns | 2.499 ns | 0.81 | 0.0153 | - | - | 32 B |
+| Linq_Collection_Reference | Collection_Reference | 100 | 100 | 1,450.03 ns | 5.975 ns | 5.296 ns | 1.00 | 0.0687 | - | - | 144 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 100 | 1,016.30 ns | 6.790 ns | 6.352 ns | 0.70 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 100 | 1,271.16 ns | 6.107 ns | 5.100 ns | 0.88 | 0.0153 | - | - | 32 B |
| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 100 | 835.78 ns | 2.241 ns | 1.986 ns | 1.00 | 0.0458 | - | - | 96 B |
-| StructLinq_List_Reference | List_Reference | 100 | 100 | 704.07 ns | 1.353 ns | 1.130 ns | 0.84 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference_For | List_Reference | 100 | 100 | 377.01 ns | 0.775 ns | 0.687 ns | 0.45 | - | - | - | - |
-| Hyperlinq_List_Reference_Foreach | List_Reference | 100 | 100 | 222.71 ns | 0.466 ns | 0.389 ns | 0.27 | - | - | - | - |
+| Linq_List_Reference | List_Reference | 100 | 100 | 846.45 ns | 3.989 ns | 3.536 ns | 1.00 | 0.0458 | - | - | 96 B |
+| StructLinq_List_Reference | List_Reference | 100 | 100 | 1,040.79 ns | 3.616 ns | 3.206 ns | 1.23 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference_For | List_Reference | 100 | 100 | 651.21 ns | 3.925 ns | 3.672 ns | 0.77 | - | - | - | - |
+| Hyperlinq_List_Reference_Foreach | List_Reference | 100 | 100 | 219.32 ns | 1.068 ns | 0.892 ns | 0.26 | - | - | - | - |
| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 100 | 9,561.55 ns | 38.920 ns | 36.406 ns | 1.00 | 0.1221 | - | - | 256 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 100 | 6,122.13 ns | 14.826 ns | 13.869 ns | 0.64 | 0.0534 | - | - | 112 B |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 100 | 8,265.76 ns | 36.451 ns | 30.438 ns | 1.00 | 0.0763 | - | - | 176 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 100 | 5,275.23 ns | 18.599 ns | 17.397 ns | 0.64 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/SumBenchmarks.md b/Benchmarks/SumBenchmarks.md
index eb0ebf6ae..b9fbe9ee0 100644
--- a/Benchmarks/SumBenchmarks.md
+++ b/Benchmarks/SumBenchmarks.md
@@ -4,29 +4,58 @@
[SumBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/SumBenchmarks.cs)
### References:
-- Linq: 5.0.2
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta34](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta34)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
-.NET Core SDK=5.0.200-preview.20614.14
- [Host] : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0 Categories=Array
+Runtime=.NET 6.0
```
-| Method | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|--------------------- |------ |----------:|---------:|---------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | 100 | 445.32 ns | 2.467 ns | 4.753 ns | 1.00 | 0.0153 | - | - | 32 B |
-| StructLinq_Array | 100 | 62.74 ns | 0.297 ns | 0.248 ns | 0.14 | - | - | - | - |
-| LinqFasterSIMD_Array | 100 | 12.16 ns | 0.072 ns | 0.067 ns | 0.03 | - | - | - | - |
-| Hyperlinq_Array | 100 | 19.54 ns | 0.143 ns | 0.134 ns | 0.04 | - | - | - | - |
-| Hyperlinq_Span | 100 | 19.53 ns | 0.138 ns | 0.129 ns | 0.04 | - | - | - | - |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |------------:|---------:|---------:|------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 413.92 ns | 2.660 ns | 2.221 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Array | Array | 100 | 60.74 ns | 0.200 ns | 0.187 ns | 0.15 | - | - | - | - |
+| LinqFasterSIMD_Array | Array | 100 | 10.63 ns | 0.075 ns | 0.071 ns | 0.03 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 22.32 ns | 0.077 ns | 0.068 ns | 0.05 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 624.83 ns | 5.028 ns | 4.457 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 574.83 ns | 2.941 ns | 2.607 ns | 0.92 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 202.11 ns | 0.557 ns | 0.493 ns | 0.32 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 616.91 ns | 4.091 ns | 3.627 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 573.70 ns | 4.680 ns | 3.908 ns | 0.93 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 208.10 ns | 0.371 ns | 0.347 ns | 0.34 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 607.47 ns | 3.830 ns | 3.198 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_List_Value | List_Value | 100 | 223.68 ns | 0.839 ns | 0.744 ns | 0.37 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 635.26 ns | 2.463 ns | 2.057 ns | 1.05 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,612.14 ns | 6.534 ns | 5.793 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 830.85 ns | 2.255 ns | 1.999 ns | 0.52 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 616.47 ns | 2.313 ns | 2.164 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 573.38 ns | 2.951 ns | 2.616 ns | 0.93 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 597.88 ns | 3.175 ns | 2.814 ns | 0.97 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 616.39 ns | 3.075 ns | 2.726 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 575.50 ns | 3.010 ns | 2.514 ns | 0.93 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 627.72 ns | 2.465 ns | 2.306 ns | 1.02 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 620.51 ns | 3.599 ns | 3.191 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_List_Reference | List_Reference | 100 | 574.04 ns | 2.878 ns | 2.551 ns | 0.93 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 634.92 ns | 2.786 ns | 2.606 ns | 1.02 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,606.77 ns | 2.223 ns | 1.856 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,641.25 ns | 3.209 ns | 2.680 ns | 1.02 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/ToArrayBenchmarks.md b/Benchmarks/ToArrayBenchmarks.md
index 108cf7257..aa3e4d4e6 100644
--- a/Benchmarks/ToArrayBenchmarks.md
+++ b/Benchmarks/ToArrayBenchmarks.md
@@ -4,56 +4,66 @@
[ToArrayBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ToArrayBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |------------:|---------:|---------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 49.33 ns | 0.233 ns | 0.206 ns | 1.00 | 0.00 | 0.2027 | - | - | 424 B |
-| StructLinq_Array | Array | 100 | 79.71 ns | 0.426 ns | 0.398 ns | 1.62 | 0.01 | 0.2027 | - | - | 424 B |
-| Hyperlinq_Array | Array | 100 | 30.57 ns | 0.090 ns | 0.075 ns | 0.62 | 0.00 | 0.2027 | - | - | 424 B |
-| Hyperlinq_Span | Array | 100 | 28.22 ns | 0.294 ns | 0.275 ns | 0.57 | 0.01 | 0.2027 | - | - | 424 B |
-| Hyperlinq_Memory | Array | 100 | 30.64 ns | 0.181 ns | 0.160 ns | 0.62 | 0.00 | 0.2027 | - | - | 424 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 887.10 ns | 2.480 ns | 2.071 ns | 1.00 | 0.00 | 0.5655 | - | - | 1184 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 900.66 ns | 1.904 ns | 1.687 ns | 1.02 | 0.00 | 0.2174 | - | - | 456 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 517.63 ns | 1.854 ns | 1.644 ns | 0.58 | 0.00 | 0.2174 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 43.34 ns | 0.245 ns | 0.204 ns | 1.00 | 0.00 | 0.2027 | - | - | 424 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 893.50 ns | 2.616 ns | 2.184 ns | 20.62 | 0.10 | 0.2174 | - | - | 456 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 59.69 ns | 0.736 ns | 0.652 ns | 1.38 | 0.02 | 0.2180 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 45.11 ns | 0.201 ns | 0.168 ns | 1.00 | 0.00 | 0.2027 | - | - | 424 B |
-| StructLinq_List_Value | List_Value | 100 | 243.02 ns | 0.931 ns | 0.871 ns | 5.39 | 0.03 | 0.2027 | - | - | 424 B |
-| Hyperlinq_List_Value | List_Value | 100 | 42.65 ns | 0.234 ns | 0.196 ns | 0.95 | 0.01 | 0.2027 | - | - | 424 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 702.23 ns | 2.098 ns | 1.860 ns | 1.00 | 0.00 | 0.5655 | - | - | 1184 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 724.75 ns | 2.218 ns | 1.852 ns | 1.03 | 0.00 | 0.2174 | - | - | 456 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 789.74 ns | 2.514 ns | 2.099 ns | 1.12 | 0.00 | 0.2174 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 43.89 ns | 0.609 ns | 0.569 ns | 1.00 | 0.00 | 0.2027 | - | - | 424 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 725.74 ns | 2.660 ns | 2.488 ns | 16.54 | 0.22 | 0.2174 | - | - | 456 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 49.80 ns | 0.642 ns | 0.570 ns | 1.13 | 0.02 | 0.2142 | - | - | 448 B |
-| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 44.96 ns | 0.119 ns | 0.100 ns | 1.00 | 0.00 | 0.2027 | - | - | 424 B |
-| StructLinq_List_Reference | List_Reference | 100 | 719.31 ns | 2.610 ns | 2.442 ns | 16.00 | 0.07 | 0.2174 | - | - | 456 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 45.09 ns | 0.962 ns | 0.853 ns | 1.00 | 0.02 | 0.2027 | - | - | 424 B |
-| | | | | | | | | | | | |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,661.99 ns | 3.493 ns | 3.268 ns | ? | ? | 0.5646 | - | - | 1184 B |
-| | | | | | | | | | | | |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,308.43 ns | 6.064 ns | 5.375 ns | ? | ? | 0.5836 | - | - | 1224 B |
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Allocated |
+|---------------------------------------------- |-------------------------- |------ |------------:|-----------:|-----------:|------------:|--------------:|--------:|-------:|----------:|
+| Linq_Array | Array | 100 | 143.52 ns | 13.517 ns | 39.856 ns | 135.22 ns | baseline | | 0.2027 | 424 B |
+| StructLinq_Array | Array | 100 | 337.94 ns | 43.264 ns | 127.565 ns | 315.72 ns | 2.49x slower | 1.07x | 0.2027 | 424 B |
+| Hyperlinq_Array | Array | 100 | 100.89 ns | 6.689 ns | 19.722 ns | 94.25 ns | 1.47x faster | 0.49x | 0.2027 | 424 B |
+| Hyperlinq_Array_ArrayPool | Array | 100 | 109.18 ns | 8.605 ns | 25.373 ns | 94.61 ns | 1.36x faster | 0.43x | 0.0191 | 40 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,578.98 ns | 165.642 ns | 469.898 ns | 1,430.76 ns | baseline | | 0.5646 | 1,184 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,173.51 ns | 92.444 ns | 262.249 ns | 1,036.61 ns | 1.42x faster | 0.52x | 0.2174 | 456 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 1,057.32 ns | 78.396 ns | 229.922 ns | 922.84 ns | 1.56x faster | 0.59x | 0.2022 | 424 B |
+| Hyperlinq_Enumerable_ArrayPool_Value | Enumerable_Value | 100 | 863.26 ns | 62.616 ns | 184.625 ns | 754.90 ns | 1.92x faster | 0.70x | 0.0191 | 40 B |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 112.45 ns | 11.254 ns | 32.109 ns | 105.85 ns | baseline | | 0.2027 | 424 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 1,352.42 ns | 123.192 ns | 345.444 ns | 1,211.76 ns | 12.70x slower | 4.34x | 0.2174 | 456 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 110.51 ns | 10.345 ns | 30.178 ns | 92.61 ns | 1.08x slower | 0.43x | 0.2027 | 424 B |
+| Hyperlinq_Collection_ArrayPool_Value | Collection_Value | 100 | 108.14 ns | 7.474 ns | 22.038 ns | 96.64 ns | 1.04x slower | 0.36x | 0.0191 | 40 B |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 94.24 ns | 8.776 ns | 25.876 ns | 79.15 ns | baseline | | 0.2027 | 424 B |
+| StructLinq_List_Value | List_Value | 100 | 392.66 ns | 25.951 ns | 74.459 ns | 377.42 ns | 4.44x slower | 1.21x | 0.2022 | 424 B |
+| Hyperlinq_List_Value | List_Value | 100 | 110.82 ns | 10.011 ns | 29.361 ns | 92.98 ns | 1.25x slower | 0.44x | 0.2027 | 424 B |
+| Hyperlinq_List_ArrayPool_Value | List_Value | 100 | 81.42 ns | 1.743 ns | 1.630 ns | 80.92 ns | 1.20x faster | 0.21x | 0.0191 | 40 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,714.55 ns | 292.913 ns | 835.697 ns | 2,397.87 ns | baseline | | 0.7668 | 1,608 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,563.81 ns | 159.957 ns | 469.125 ns | 2,376.18 ns | 1.01x slower | 0.25x | 0.5646 | 1,184 B |
+| Hyperlinq_AsyncEnumerable_ArrayPool_Value | AsyncEnumerable_Value | 100 | 2,133.27 ns | 120.572 ns | 351.713 ns | 1,929.60 ns | 1.27x faster | 0.36x | 0.3815 | 800 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 1,663.20 ns | 164.639 ns | 467.054 ns | 1,632.07 ns | baseline | | 0.5646 | 1,184 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 915.42 ns | 17.757 ns | 28.674 ns | 906.22 ns | 1.69x faster | 0.47x | 0.2174 | 456 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 1,040.07 ns | 19.887 ns | 20.422 ns | 1,035.42 ns | 1.74x faster | 0.30x | 0.2174 | 456 B |
+| Hyperlinq_Enumerable_ArrayPool_Reference | Enumerable_Reference | 100 | 1,073.81 ns | 80.581 ns | 237.595 ns | 1,011.11 ns | 1.64x faster | 0.58x | 0.0343 | 72 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 133.93 ns | 18.396 ns | 53.369 ns | 113.57 ns | baseline | | 0.2027 | 424 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 1,227.66 ns | 126.655 ns | 373.445 ns | 1,033.16 ns | 10.45x slower | 4.47x | 0.2174 | 456 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 75.55 ns | 1.647 ns | 1.286 ns | 75.54 ns | 1.55x faster | 0.65x | 0.2027 | 424 B |
+| Hyperlinq_Collection_ArrayPool_Reference | Collection_Reference | 100 | 100.23 ns | 8.309 ns | 24.368 ns | 86.15 ns | 1.42x faster | 0.67x | 0.0191 | 40 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 142.59 ns | 16.619 ns | 46.051 ns | 139.86 ns | baseline | | 0.2027 | 424 B |
+| StructLinq_List_Reference | List_Reference | 100 | 1,186.00 ns | 93.311 ns | 275.128 ns | 1,228.39 ns | 9.24x slower | 4.30x | 0.2174 | 456 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 99.29 ns | 8.310 ns | 23.843 ns | 88.13 ns | 1.47x faster | 0.52x | 0.2027 | 424 B |
+| Hyperlinq_List_ArrayPool_Reference | List_Reference | 100 | 103.74 ns | 8.845 ns | 26.079 ns | 96.07 ns | 1.43x faster | 0.52x | 0.0191 | 40 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,852.49 ns | 227.110 ns | 636.839 ns | 2,728.24 ns | baseline | | 0.7668 | 1,608 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,577.52 ns | 161.290 ns | 473.037 ns | 2,409.79 ns | 1.13x faster | 0.32x | 0.5798 | 1,216 B |
+| Hyperlinq_AsyncEnumerable_ArrayPool_Reference | AsyncEnumerable_Reference | 100 | 2,069.28 ns | 40.575 ns | 35.969 ns | 2,055.59 ns | 1.52x faster | 0.35x | 0.3967 | 832 B |
diff --git a/Benchmarks/ToListBenchmarks.md b/Benchmarks/ToListBenchmarks.md
index 9ed5fe136..d2b4cc10b 100644
--- a/Benchmarks/ToListBenchmarks.md
+++ b/Benchmarks/ToListBenchmarks.md
@@ -4,56 +4,57 @@
[ToListBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/ToListBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |------------:|---------:|---------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 58.20 ns | 0.494 ns | 0.438 ns | 1.00 | 0.00 | 0.2180 | - | - | 456 B |
-| StructLinq_Array | Array | 100 | 114.10 ns | 0.325 ns | 0.272 ns | 1.96 | 0.01 | 0.2180 | - | - | 456 B |
-| Hyperlinq_Array | Array | 100 | 49.57 ns | 0.138 ns | 0.122 ns | 0.85 | 0.01 | 0.2334 | - | - | 488 B |
-| Hyperlinq_Span | Array | 100 | 160.62 ns | 0.449 ns | 0.420 ns | 2.76 | 0.02 | 0.2179 | - | - | 456 B |
-| Hyperlinq_Memory | Array | 100 | 40.54 ns | 0.383 ns | 0.340 ns | 0.70 | 0.01 | 0.2180 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 893.89 ns | 2.555 ns | 2.390 ns | 1.00 | 0.00 | 0.5808 | - | - | 1216 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 934.53 ns | 2.676 ns | 2.372 ns | 1.05 | 0.00 | 0.2327 | - | - | 488 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 578.02 ns | 1.782 ns | 1.580 ns | 0.65 | 0.00 | 0.2327 | - | - | 488 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 47.13 ns | 0.536 ns | 0.475 ns | 1.00 | 0.00 | 0.2180 | - | - | 456 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 937.11 ns | 2.386 ns | 2.115 ns | 19.89 | 0.23 | 0.2327 | - | - | 488 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 73.03 ns | 0.555 ns | 0.492 ns | 1.55 | 0.02 | 0.2333 | - | - | 488 B |
-| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 48.27 ns | 0.462 ns | 0.409 ns | 1.00 | 0.00 | 0.2180 | - | - | 456 B |
-| StructLinq_List_Value | List_Value | 100 | 249.82 ns | 2.383 ns | 2.230 ns | 5.18 | 0.05 | 0.2179 | - | - | 456 B |
-| Hyperlinq_List_Value | List_Value | 100 | 50.51 ns | 0.480 ns | 0.426 ns | 1.05 | 0.02 | 0.2180 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 647.78 ns | 1.861 ns | 1.650 ns | 1.00 | 0.00 | 0.5808 | - | - | 1216 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 736.91 ns | 1.475 ns | 1.380 ns | 1.14 | 0.00 | 0.2327 | - | - | 488 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 781.32 ns | 2.815 ns | 2.198 ns | 1.21 | 0.01 | 0.2327 | - | - | 488 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 48.58 ns | 0.450 ns | 0.399 ns | 1.00 | 0.00 | 0.2180 | - | - | 456 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 727.74 ns | 1.335 ns | 1.183 ns | 14.98 | 0.12 | 0.2327 | - | - | 488 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 97.13 ns | 0.461 ns | 0.432 ns | 2.00 | 0.02 | 0.2295 | - | - | 480 B |
-| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 48.85 ns | 0.489 ns | 0.434 ns | 1.00 | 0.00 | 0.2180 | - | - | 456 B |
-| StructLinq_List_Reference | List_Reference | 100 | 675.21 ns | 2.616 ns | 2.319 ns | 13.82 | 0.13 | 0.2327 | - | - | 488 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 50.82 ns | 0.335 ns | 0.297 ns | 1.04 | 0.01 | 0.2180 | - | - | 456 B |
-| | | | | | | | | | | | |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,688.26 ns | 3.145 ns | 2.788 ns | ? | ? | 0.5798 | - | - | 1216 B |
-| | | | | | | | | | | | |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,370.42 ns | 3.392 ns | 2.833 ns | ? | ? | 0.5989 | - | - | 1256 B |
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|----------:|----------:|------------:|--------------:|--------:|-------:|----------:|
+| Linq_Array | Array | 100 | 152.3 ns | 13.07 ns | 38.55 ns | 153.11 ns | baseline | | 0.2179 | 456 B |
+| StructLinq_Array | Array | 100 | 208.8 ns | 15.48 ns | 45.65 ns | 183.48 ns | 1.42x slower | 0.30x | 0.2179 | 456 B |
+| Hyperlinq_Array | Array | 100 | 108.0 ns | 9.94 ns | 29.29 ns | 89.70 ns | 1.49x faster | 0.48x | 0.2180 | 456 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 944.9 ns | 62.47 ns | 184.20 ns | 988.12 ns | baseline | | 0.5808 | 1,216 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,145.8 ns | 103.68 ns | 304.08 ns | 966.78 ns | 1.26x slower | 0.41x | 0.2327 | 488 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 1,059.8 ns | 77.40 ns | 228.23 ns | 933.82 ns | 1.17x slower | 0.35x | 0.2174 | 456 B |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 118.8 ns | 8.42 ns | 24.82 ns | 107.77 ns | baseline | | 0.2180 | 456 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 1,177.6 ns | 97.68 ns | 288.02 ns | 1,022.94 ns | 10.33x slower | 3.33x | 0.2327 | 488 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 128.4 ns | 14.08 ns | 40.84 ns | 106.17 ns | 1.11x slower | 0.38x | 0.2179 | 456 B |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 117.5 ns | 7.59 ns | 21.42 ns | 109.69 ns | baseline | | 0.2179 | 456 B |
+| StructLinq_List_Value | List_Value | 100 | 287.2 ns | 24.90 ns | 73.42 ns | 250.69 ns | 2.52x slower | 0.74x | 0.2179 | 456 B |
+| Hyperlinq_List_Value | List_Value | 100 | 127.9 ns | 12.46 ns | 36.53 ns | 107.50 ns | 1.13x slower | 0.37x | 0.2179 | 456 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,460.6 ns | 109.22 ns | 318.61 ns | 2,334.36 ns | baseline | | 0.5798 | 1,216 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,772.4 ns | 175.42 ns | 517.23 ns | 2,701.79 ns | 1.15x slower | 0.27x | 0.5798 | 1,216 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 950.9 ns | 76.10 ns | 224.39 ns | 836.78 ns | baseline | | 0.5798 | 1,216 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 1,052.6 ns | 67.60 ns | 198.25 ns | 943.04 ns | 1.17x slower | 0.35x | 0.2327 | 488 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 1,457.2 ns | 128.46 ns | 378.76 ns | 1,202.12 ns | 1.59x slower | 0.49x | 0.2327 | 488 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 114.2 ns | 11.38 ns | 33.02 ns | 94.32 ns | baseline | | 0.2180 | 456 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 1,181.8 ns | 103.00 ns | 302.08 ns | 1,018.63 ns | 10.90x slower | 3.58x | 0.2327 | 488 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 119.5 ns | 9.30 ns | 27.42 ns | 103.49 ns | 1.11x slower | 0.35x | 0.2179 | 456 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 144.3 ns | 14.33 ns | 41.36 ns | 137.96 ns | baseline | | 0.2180 | 456 B |
+| StructLinq_List_Reference | List_Reference | 100 | 1,162.4 ns | 114.20 ns | 336.71 ns | 955.59 ns | 8.67x slower | 3.17x | 0.2327 | 488 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 103.2 ns | 2.56 ns | 6.76 ns | 100.94 ns | 1.42x faster | 0.42x | 0.2179 | 456 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,565.5 ns | 129.56 ns | 382.00 ns | 2,416.41 ns | baseline | | 0.5798 | 1,216 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,867.6 ns | 191.57 ns | 564.84 ns | 2,539.05 ns | 1.14x slower | 0.29x | 0.5951 | 1,248 B |
diff --git a/Benchmarks/WhereBenchmarks.md b/Benchmarks/WhereBenchmarks.md
index bd7e15d15..5ed672ec5 100644
--- a/Benchmarks/WhereBenchmarks.md
+++ b/Benchmarks/WhereBenchmarks.md
@@ -4,52 +4,59 @@
[WhereBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/WhereBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|-------------------------------- |--------------------- |------ |-----------:|--------:|--------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 476.2 ns | 3.07 ns | 2.56 ns | 1.00 | 0.0229 | - | - | 48 B |
-| StructLinq_Array | Array | 100 | 265.0 ns | 0.52 ns | 0.44 ns | 0.56 | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 271.2 ns | 2.27 ns | 1.90 ns | 0.57 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 326.3 ns | 4.87 ns | 4.06 ns | 0.69 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 368.9 ns | 5.80 ns | 5.42 ns | 0.77 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,348.2 ns | 2.99 ns | 2.65 ns | 1.00 | 0.0420 | - | - | 88 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,202.2 ns | 2.45 ns | 2.29 ns | 0.89 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 262.4 ns | 0.87 ns | 0.82 ns | 0.19 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 1,386.8 ns | 2.80 ns | 2.34 ns | 1.00 | 0.0420 | - | - | 88 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 1,244.6 ns | 4.08 ns | 3.82 ns | 0.90 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 272.1 ns | 0.74 ns | 0.62 ns | 0.20 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 1,341.1 ns | 5.56 ns | 4.93 ns | 1.00 | 0.0420 | - | - | 88 B |
-| StructLinq_List_Value | List_Value | 100 | 660.3 ns | 3.05 ns | 2.71 ns | 0.49 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 592.8 ns | 1.64 ns | 1.54 ns | 0.44 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 1,003.0 ns | 2.76 ns | 2.45 ns | 1.00 | 0.0420 | - | - | 88 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 714.5 ns | 1.51 ns | 1.41 ns | 0.71 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 727.9 ns | 3.31 ns | 3.10 ns | 0.73 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 1,006.5 ns | 4.95 ns | 4.63 ns | 1.00 | 0.0420 | - | - | 88 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 694.3 ns | 1.96 ns | 1.73 ns | 0.69 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 727.1 ns | 3.24 ns | 2.87 ns | 0.72 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 1,006.5 ns | 2.92 ns | 2.58 ns | 1.00 | 0.0420 | - | - | 88 B |
-| StructLinq_List_Reference | List_Reference | 100 | 705.6 ns | 2.00 ns | 1.77 ns | 0.70 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 578.6 ns | 2.52 ns | 2.24 ns | 0.57 | - | - | - | - |
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|---------:|----------:|-----------:|-------------:|--------:|-------:|----------:|
+| Linq_Array | Array | 100 | 528.6 ns | 47.16 ns | 139.06 ns | 442.5 ns | baseline | | 0.0229 | 48 B |
+| StructLinq_Array | Array | 100 | 352.1 ns | 6.21 ns | 7.85 ns | 353.0 ns | 1.50x faster | 0.45x | - | - |
+| Hyperlinq_Array | Array | 100 | 342.8 ns | 4.60 ns | 4.30 ns | 341.9 ns | 1.69x faster | 0.51x | - | - |
+| Hyperlinq_Span | Array | 100 | 341.2 ns | 4.70 ns | 4.40 ns | 341.4 ns | 1.70x faster | 0.52x | - | - |
+| Hyperlinq_Memory | Array | 100 | 389.4 ns | 2.50 ns | 2.21 ns | 389.3 ns | 1.45x faster | 0.44x | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 700.4 ns | 60.47 ns | 177.33 ns | 589.6 ns | baseline | | 0.0420 | 88 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 484.1 ns | 6.15 ns | 5.14 ns | 482.3 ns | 1.21x faster | 0.13x | 0.0153 | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 331.4 ns | 4.30 ns | 4.02 ns | 332.4 ns | 1.77x faster | 0.21x | - | - |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 641.3 ns | 29.34 ns | 79.82 ns | 617.6 ns | baseline | | 0.0420 | 88 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 482.8 ns | 3.83 ns | 3.59 ns | 482.9 ns | 1.48x faster | 0.14x | 0.0153 | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 369.8 ns | 6.14 ns | 5.74 ns | 366.9 ns | 1.93x faster | 0.17x | - | - |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 506.5 ns | 6.73 ns | 6.30 ns | 505.0 ns | baseline | | 0.0420 | 88 B |
+| StructLinq_List_Value | List_Value | 100 | 341.2 ns | 2.57 ns | 2.41 ns | 340.5 ns | 1.48x faster | 0.02x | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 406.5 ns | 3.99 ns | 3.33 ns | 405.9 ns | 1.25x faster | 0.02x | 0.0153 | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 5,012.0 ns | 45.64 ns | 40.45 ns | 5,007.0 ns | baseline | | 0.0458 | 96 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 4,672.8 ns | 28.87 ns | 25.59 ns | 4,663.9 ns | 1.07x faster | 0.01x | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 525.5 ns | 14.55 ns | 42.21 ns | 502.9 ns | baseline | | 0.0420 | 88 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 475.2 ns | 8.83 ns | 7.83 ns | 472.5 ns | 1.23x faster | 0.07x | 0.0153 | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 423.4 ns | 8.31 ns | 11.92 ns | 425.0 ns | 1.38x faster | 0.08x | 0.0153 | 32 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 506.3 ns | 6.18 ns | 5.16 ns | 507.1 ns | baseline | | 0.0420 | 88 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 481.6 ns | 3.45 ns | 3.06 ns | 481.7 ns | 1.05x faster | 0.01x | 0.0153 | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 403.2 ns | 2.46 ns | 1.92 ns | 403.6 ns | 1.25x faster | 0.01x | 0.0153 | 32 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 509.9 ns | 7.13 ns | 6.67 ns | 506.9 ns | baseline | | 0.0420 | 88 B |
+| StructLinq_List_Reference | List_Reference | 100 | 486.1 ns | 4.01 ns | 3.75 ns | 485.3 ns | 1.05x faster | 0.02x | 0.0153 | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 405.0 ns | 1.29 ns | 1.14 ns | 404.9 ns | 1.26x faster | 0.02x | 0.0153 | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 5,000.2 ns | 37.85 ns | 35.41 ns | 4,984.2 ns | baseline | | 0.0458 | 96 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 4,690.6 ns | 53.19 ns | 47.15 ns | 4,666.9 ns | 1.07x faster | 0.01x | 0.0153 | 32 B |
diff --git a/Benchmarks/WhereCountBenchmarks.md b/Benchmarks/WhereCountBenchmarks.md
index 0a26f9f4e..aa5c6e18b 100644
--- a/Benchmarks/WhereCountBenchmarks.md
+++ b/Benchmarks/WhereCountBenchmarks.md
@@ -4,58 +4,59 @@
[WhereCountBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/WhereCountBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |-----------:|--------:|--------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 636.8 ns | 3.95 ns | 3.70 ns | 1.00 | 0.0153 | - | - | 32 B |
-| StructLinq_Array | Array | 100 | 234.2 ns | 0.35 ns | 0.28 ns | 0.37 | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 167.7 ns | 0.32 ns | 0.28 ns | 0.26 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 164.7 ns | 0.40 ns | 0.34 ns | 0.26 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 190.7 ns | 0.25 ns | 0.21 ns | 0.30 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,167.4 ns | 2.08 ns | 1.84 ns | 1.00 | 0.0153 | - | - | 32 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,069.0 ns | 2.98 ns | 2.79 ns | 0.92 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 204.2 ns | 0.33 ns | 0.29 ns | 0.17 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 1,167.7 ns | 3.31 ns | 2.77 ns | 1.00 | 0.0153 | - | - | 32 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 1,088.3 ns | 2.76 ns | 2.58 ns | 0.93 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 203.3 ns | 0.31 ns | 0.27 ns | 0.17 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 1,153.8 ns | 3.52 ns | 2.75 ns | 1.00 | 0.0153 | - | - | 32 B |
-| StructLinq_List_Value | List_Value | 100 | 397.2 ns | 3.08 ns | 2.88 ns | 0.34 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 358.9 ns | 1.94 ns | 1.82 ns | 0.31 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,165.8 ns | 5.26 ns | 4.66 ns | 1.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 5,691.8 ns | 8.07 ns | 7.16 ns | 2.63 | 0.0610 | - | - | 136 B |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 771.0 ns | 2.55 ns | 2.13 ns | 1.00 | 0.0153 | - | - | 32 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 599.0 ns | 2.97 ns | 2.48 ns | 0.78 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 565.4 ns | 2.37 ns | 1.85 ns | 0.73 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 772.4 ns | 3.35 ns | 2.97 ns | 1.00 | 0.0153 | - | - | 32 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 585.3 ns | 3.35 ns | 3.14 ns | 0.76 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 565.4 ns | 1.26 ns | 1.18 ns | 0.73 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 768.5 ns | 4.69 ns | 4.16 ns | 1.00 | 0.0153 | - | - | 32 B |
-| StructLinq_List_Reference | List_Reference | 100 | 585.7 ns | 3.06 ns | 2.86 ns | 0.76 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 372.9 ns | 0.55 ns | 0.49 ns | 0.49 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,064.2 ns | 4.18 ns | 3.70 ns | 1.00 | 0.0191 | - | - | 40 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 5,883.8 ns | 9.57 ns | 8.49 ns | 2.85 | 0.0687 | - | - | 152 B |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 878.8 ns | 5.36 ns | 5.01 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Array | Array | 100 | 226.8 ns | 1.00 ns | 0.93 ns | 0.26 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 173.6 ns | 0.35 ns | 0.31 ns | 0.20 | - | - | - | - |
+| Hyperlinq_Span | Array | 100 | 196.9 ns | 1.29 ns | 1.21 ns | 0.22 | - | - | - | - |
+| Hyperlinq_Memory | Array | 100 | 199.2 ns | 0.58 ns | 0.49 ns | 0.23 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,102.0 ns | 4.29 ns | 3.58 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,050.1 ns | 7.50 ns | 7.02 ns | 0.95 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 215.4 ns | 1.72 ns | 1.52 ns | 0.20 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 1,064.8 ns | 4.86 ns | 4.54 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 1,076.9 ns | 4.56 ns | 4.27 ns | 1.01 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 218.7 ns | 1.02 ns | 0.91 ns | 0.21 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 1,074.6 ns | 6.12 ns | 5.73 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_List_Value | List_Value | 100 | 439.7 ns | 8.58 ns | 8.02 ns | 0.41 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 823.4 ns | 12.20 ns | 10.19 ns | 0.77 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,698.2 ns | 5.19 ns | 4.34 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,514.1 ns | 6.20 ns | 5.80 ns | 1.48 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 1,066.2 ns | 6.23 ns | 5.52 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 1,082.7 ns | 5.31 ns | 4.97 ns | 1.02 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 773.4 ns | 2.93 ns | 2.60 ns | 0.73 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 1,098.8 ns | 6.60 ns | 5.85 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 1,116.5 ns | 5.08 ns | 4.24 ns | 1.02 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 737.4 ns | 4.95 ns | 4.63 ns | 0.67 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 1,101.2 ns | 3.21 ns | 3.00 ns | 1.00 | 0.0153 | - | - | 32 B |
+| StructLinq_List_Reference | List_Reference | 100 | 1,032.2 ns | 4.68 ns | 3.91 ns | 0.94 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 822.6 ns | 4.43 ns | 3.70 ns | 0.75 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,706.4 ns | 7.20 ns | 6.73 ns | 1.00 | 0.0153 | - | - | 32 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,844.8 ns | 4.59 ns | 4.07 ns | 1.67 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/WhereFirstBenchmarks.md b/Benchmarks/WhereFirstBenchmarks.md
index b514337ea..08d713ca2 100644
--- a/Benchmarks/WhereFirstBenchmarks.md
+++ b/Benchmarks/WhereFirstBenchmarks.md
@@ -4,64 +4,50 @@
[WhereFirstBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/WhereFirstBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |---------:|--------:|--------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 178.8 ns | 0.53 ns | 0.47 ns | ? | ? | 0.0305 | - | - | 64 B |
-| Hyperlinq_Span | Array | 100 | 200.7 ns | 0.37 ns | 0.33 ns | ? | ? | 0.0305 | - | - | 64 B |
-| Hyperlinq_Memory | Array | 100 | 206.9 ns | 0.52 ns | 0.49 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 241.9 ns | 0.74 ns | 0.62 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 241.4 ns | 0.61 ns | 0.51 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 359.5 ns | 0.46 ns | 0.38 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 549.6 ns | 1.22 ns | 1.14 ns | ? | ? | 0.0458 | - | - | 96 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 563.2 ns | 4.59 ns | 4.29 ns | ? | ? | 0.0458 | - | - | 96 B |
-| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_List_Reference | List_Reference | 100 | 359.1 ns | 1.21 ns | 1.01 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-
-Benchmarks with issues:
- WhereFirstBenchmarks.Linq_Array: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Linq_Enumerable_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Linq_Collection_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Linq_List_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Linq_AsyncEnumerable_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Hyperlinq_AsyncEnumerable_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Linq_Enumerable_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Linq_Collection_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Linq_List_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Linq_AsyncEnumerable_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereFirstBenchmarks.Hyperlinq_AsyncEnumerable_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|------:|--------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 628.3 ns | 3.00 ns | 2.50 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Array | Array | 100 | 211.0 ns | 1.17 ns | 0.97 ns | 0.34 | 0.00 | 0.0305 | - | - | 64 B |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 767.4 ns | 3.83 ns | 3.39 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 250.9 ns | 1.17 ns | 0.98 ns | 0.33 | 0.00 | 0.0305 | - | - | 64 B |
+| | | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 784.0 ns | 4.45 ns | 3.71 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 242.3 ns | 1.46 ns | 1.30 ns | 0.31 | 0.00 | 0.0305 | - | - | 64 B |
+| | | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 781.3 ns | 6.06 ns | 5.37 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_List_Value | List_Value | 100 | 788.1 ns | 6.22 ns | 5.19 ns | 1.01 | 0.01 | 0.0458 | - | - | 96 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,770.2 ns | 3.54 ns | 3.14 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,585.5 ns | 5.39 ns | 4.78 ns | 1.46 | 0.00 | 0.0305 | - | - | 64 B |
+| | | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 767.2 ns | 2.33 ns | 1.95 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 840.7 ns | 2.43 ns | 2.15 ns | 1.10 | 0.00 | 0.0458 | - | - | 96 B |
+| | | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 781.4 ns | 5.11 ns | 4.53 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 751.5 ns | 10.10 ns | 8.95 ns | 0.96 | 0.01 | 0.0458 | - | - | 96 B |
+| | | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 807.9 ns | 2.84 ns | 2.51 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 785.2 ns | 12.49 ns | 11.68 ns | 0.97 | 0.02 | 0.0458 | - | - | 96 B |
+| | | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,782.2 ns | 2.93 ns | 2.60 ns | 1.00 | 0.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,878.4 ns | 4.70 ns | 3.67 ns | 1.61 | 0.00 | 0.0458 | - | - | 96 B |
diff --git a/Benchmarks/WhereSelectBenchmarks.md b/Benchmarks/WhereSelectBenchmarks.md
index 2779023da..336e32ff5 100644
--- a/Benchmarks/WhereSelectBenchmarks.md
+++ b/Benchmarks/WhereSelectBenchmarks.md
@@ -4,52 +4,59 @@
[WhereSelectBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/WhereSelectBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|-------------------------------- |--------------------- |------ |-----------:|--------:|--------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 640.4 ns | 3.21 ns | 2.84 ns | 1.00 | 0.0496 | - | - | 104 B |
-| StructLinq_Array | Array | 100 | 381.8 ns | 1.63 ns | 1.36 ns | 0.60 | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 352.3 ns | 1.15 ns | 1.02 ns | 0.55 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 369.2 ns | 1.12 ns | 1.05 ns | 0.58 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 412.5 ns | 1.53 ns | 1.35 ns | 0.64 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,569.9 ns | 6.34 ns | 5.93 ns | 1.00 | 0.0725 | - | - | 152 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,353.8 ns | 3.07 ns | 2.87 ns | 0.86 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 385.8 ns | 0.86 ns | 0.80 ns | 0.25 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 1,516.2 ns | 2.88 ns | 2.69 ns | 1.00 | 0.0725 | - | - | 152 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 1,337.8 ns | 2.35 ns | 1.83 ns | 0.88 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 403.9 ns | 2.13 ns | 1.99 ns | 0.27 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 1,512.4 ns | 2.71 ns | 2.53 ns | 1.00 | 0.0725 | - | - | 152 B |
-| StructLinq_List_Value | List_Value | 100 | 773.6 ns | 2.41 ns | 2.01 ns | 0.51 | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 777.2 ns | 1.50 ns | 1.33 ns | 0.51 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 1,272.0 ns | 3.50 ns | 3.10 ns | 1.00 | 0.0725 | - | - | 152 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 844.9 ns | 1.79 ns | 1.59 ns | 0.66 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 875.6 ns | 1.50 ns | 1.25 ns | 0.69 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 1,268.0 ns | 4.18 ns | 3.70 ns | 1.00 | 0.0725 | - | - | 152 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 864.3 ns | 1.90 ns | 1.48 ns | 0.68 | 0.0153 | - | - | 32 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 820.6 ns | 2.38 ns | 2.11 ns | 0.65 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 1,233.5 ns | 4.33 ns | 3.61 ns | 1.00 | 0.0725 | - | - | 152 B |
-| StructLinq_List_Reference | List_Reference | 100 | 845.7 ns | 3.21 ns | 2.84 ns | 0.69 | 0.0153 | - | - | 32 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 743.3 ns | 1.70 ns | 1.42 ns | 0.60 | - | - | - | - |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 685.4 ns | 4.23 ns | 3.95 ns | 1.00 | 0.0496 | - | - | 104 B |
+| StructLinq_Array | Array | 100 | 372.2 ns | 2.24 ns | 2.10 ns | 0.54 | - | - | - | - |
+| Hyperlinq_Array | Array | 100 | 339.9 ns | 3.48 ns | 3.08 ns | 0.50 | - | - | - | - |
+| Hyperlinq_Span | Array | 100 | 330.2 ns | 1.31 ns | 1.16 ns | 0.48 | - | - | - | - |
+| Hyperlinq_Memory | Array | 100 | 334.4 ns | 2.05 ns | 1.92 ns | 0.49 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,453.1 ns | 5.39 ns | 5.05 ns | 1.00 | 0.0725 | - | - | 152 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,315.9 ns | 3.66 ns | 3.42 ns | 0.91 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 369.9 ns | 2.59 ns | 2.42 ns | 0.25 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 1,480.0 ns | 12.49 ns | 11.07 ns | 1.00 | 0.0725 | - | - | 152 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 1,273.0 ns | 2.84 ns | 2.21 ns | 0.86 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 335.4 ns | 1.45 ns | 1.13 ns | 0.23 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 1,486.9 ns | 13.11 ns | 11.62 ns | 1.00 | 0.0725 | - | - | 152 B |
+| StructLinq_List_Value | List_Value | 100 | 645.3 ns | 3.29 ns | 2.92 ns | 0.43 | - | - | - | - |
+| Hyperlinq_List_Value | List_Value | 100 | 1,294.9 ns | 7.31 ns | 6.84 ns | 0.87 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 4,577.4 ns | 28.26 ns | 23.60 ns | 1.00 | 0.0763 | - | - | 168 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 5,184.2 ns | 16.49 ns | 14.62 ns | 1.13 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 1,454.4 ns | 5.84 ns | 5.47 ns | 1.00 | 0.0725 | - | - | 152 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 1,282.4 ns | 2.51 ns | 2.22 ns | 0.88 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 1,318.3 ns | 4.86 ns | 3.79 ns | 0.91 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 1,492.2 ns | 5.79 ns | 4.84 ns | 1.00 | 0.0725 | - | - | 152 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 1,309.7 ns | 5.51 ns | 4.89 ns | 0.88 | 0.0153 | - | - | 32 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 1,289.3 ns | 6.39 ns | 5.67 ns | 0.86 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 1,474.0 ns | 7.21 ns | 6.40 ns | 1.00 | 0.0725 | - | - | 152 B |
+| StructLinq_List_Reference | List_Reference | 100 | 1,281.8 ns | 9.80 ns | 8.69 ns | 0.87 | 0.0153 | - | - | 32 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 1,285.7 ns | 8.78 ns | 8.21 ns | 0.87 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 4,546.7 ns | 24.51 ns | 21.73 ns | 1.00 | 0.0763 | - | - | 168 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 5,313.6 ns | 15.57 ns | 13.80 ns | 1.17 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/WhereSelectCountBenchmarks.md b/Benchmarks/WhereSelectCountBenchmarks.md
index d92939e9c..60aa63122 100644
--- a/Benchmarks/WhereSelectCountBenchmarks.md
+++ b/Benchmarks/WhereSelectCountBenchmarks.md
@@ -4,45 +4,50 @@
[WhereSelectCountBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/WhereSelectCountBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------- |--------------------- |------ |-----------:|--------:|--------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 364.1 ns | 1.84 ns | 1.72 ns | 1.00 | 0.0496 | - | - | 104 B |
-| Hyperlinq_Array | Array | 100 | 176.1 ns | 0.33 ns | 0.29 ns | 0.48 | - | - | - | - |
-| Hyperlinq_Span | Array | 100 | 220.7 ns | 0.39 ns | 0.34 ns | 0.61 | - | - | - | - |
-| Hyperlinq_Memory | Array | 100 | 176.2 ns | 0.28 ns | 0.26 ns | 0.48 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,221.4 ns | 2.74 ns | 2.43 ns | 1.00 | 0.0725 | - | - | 152 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 241.2 ns | 0.45 ns | 0.39 ns | 0.20 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 1,221.1 ns | 1.07 ns | 0.83 ns | 1.00 | 0.0725 | - | - | 152 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 263.9 ns | 1.00 ns | 0.94 ns | 0.22 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 1,203.9 ns | 2.59 ns | 2.16 ns | 1.00 | 0.0725 | - | - | 152 B |
-| Hyperlinq_List_Value | List_Value | 100 | 387.2 ns | 0.62 ns | 0.55 ns | 0.32 | - | - | - | - |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 874.0 ns | 4.20 ns | 3.72 ns | 1.00 | 0.0725 | - | - | 152 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 569.5 ns | 1.61 ns | 1.43 ns | 0.65 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 863.5 ns | 3.63 ns | 3.21 ns | 1.00 | 0.0725 | - | - | 152 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 517.9 ns | 0.95 ns | 0.89 ns | 0.60 | 0.0153 | - | - | 32 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 864.5 ns | 2.02 ns | 1.89 ns | 1.00 | 0.0725 | - | - | 152 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 365.0 ns | 1.01 ns | 0.94 ns | 0.42 | - | - | - | - |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 341.1 ns | 1.86 ns | 1.64 ns | 1.00 | 0.0496 | - | - | 104 B |
+| Hyperlinq_Array | Array | 100 | 182.3 ns | 0.69 ns | 0.61 ns | 0.53 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,186.7 ns | 7.67 ns | 6.80 ns | 1.00 | 0.0725 | - | - | 152 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 225.2 ns | 1.24 ns | 1.10 ns | 0.19 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 1,204.4 ns | 4.62 ns | 4.32 ns | 1.00 | 0.0725 | - | - | 152 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 232.3 ns | 1.38 ns | 1.22 ns | 0.19 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 1,189.7 ns | 6.41 ns | 5.68 ns | 1.00 | 0.0725 | - | - | 152 B |
+| Hyperlinq_List_Value | List_Value | 100 | 781.3 ns | 4.77 ns | 3.98 ns | 0.66 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 4,777.6 ns | 23.18 ns | 20.55 ns | 1.00 | 0.0763 | - | - | 168 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 2,521.2 ns | 7.22 ns | 6.40 ns | 0.53 | - | - | - | - |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 1,185.0 ns | 6.96 ns | 6.17 ns | 1.00 | 0.0725 | - | - | 152 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 749.3 ns | 4.88 ns | 4.33 ns | 0.63 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 1,193.0 ns | 13.44 ns | 11.91 ns | 1.00 | 0.0725 | - | - | 152 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 749.3 ns | 2.33 ns | 2.07 ns | 0.63 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 1,201.2 ns | 15.02 ns | 13.31 ns | 1.00 | 0.0725 | - | - | 152 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 808.6 ns | 3.81 ns | 3.38 ns | 0.67 | 0.0153 | - | - | 32 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 4,771.1 ns | 19.32 ns | 18.07 ns | 1.00 | 0.0763 | - | - | 168 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 2,855.6 ns | 12.53 ns | 11.72 ns | 0.60 | 0.0153 | - | - | 32 B |
diff --git a/Benchmarks/WhereSingleBenchmarks.md b/Benchmarks/WhereSingleBenchmarks.md
index 49041fc1e..4053fb11f 100644
--- a/Benchmarks/WhereSingleBenchmarks.md
+++ b/Benchmarks/WhereSingleBenchmarks.md
@@ -4,64 +4,48 @@
[WhereSingleBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/WhereSingleBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.5.21301.5
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.26.0](https://www.nuget.org/packages/StructLinq/0.26.0)
+- NetFabric.Hyperlinq: [3.0.0-beta44](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta44)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
+BenchmarkDotNet=v0.13.0.1555-nightly, OS=Windows 10.0.19043.1055 (21H1/May2021Update)
Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+.NET SDK=6.0.100-preview.5.21302.13
+ [Host] : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
+ Job-UNTOJZ : .NET 6.0.0 (6.0.21.30105), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |---------:|--------:|--------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Array | Array | 100 | 200.5 ns | 0.44 ns | 0.36 ns | ? | ? | 0.0305 | - | - | 64 B |
-| Hyperlinq_Span | Array | 100 | 200.5 ns | 0.72 ns | 0.67 ns | ? | ? | 0.0305 | - | - | 64 B |
-| Hyperlinq_Memory | Array | 100 | 204.3 ns | 0.36 ns | 0.30 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 218.4 ns | 0.90 ns | 0.75 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 242.9 ns | 0.80 ns | 0.75 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_List_Value | List_Value | 100 | 359.6 ns | 0.91 ns | 0.81 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 548.8 ns | 2.12 ns | 1.88 ns | ? | ? | 0.0458 | - | - | 96 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 524.4 ns | 1.42 ns | 1.33 ns | ? | ? | 0.0458 | - | - | 96 B |
-| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_List_Reference | List_Reference | 100 | 359.0 ns | 0.65 ns | 0.57 ns | ? | ? | 0.0305 | - | - | 64 B |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | NA | NA | NA | ? | ? | - | - | - | - |
-
-Benchmarks with issues:
- WhereSingleBenchmarks.Linq_Array: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Linq_Enumerable_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Linq_Collection_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Linq_List_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Linq_AsyncEnumerable_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Hyperlinq_AsyncEnumerable_Value: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Linq_Enumerable_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Linq_Collection_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Linq_List_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Linq_AsyncEnumerable_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
- WhereSingleBenchmarks.Hyperlinq_AsyncEnumerable_Reference: .NET Core 5.0(Runtime=.NET Core 5.0) [Count=100]
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
+|------------------------------- |-------------------------- |------ |-----------:|---------:|---------:|------:|-------:|------:|------:|----------:|
+| Linq_Array | Array | 100 | 607.0 ns | 9.12 ns | 8.09 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Array | Array | 100 | 208.4 ns | 0.67 ns | 0.52 ns | 0.34 | 0.0305 | - | - | 64 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 761.0 ns | 4.33 ns | 3.84 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 267.5 ns | 1.15 ns | 1.02 ns | 0.35 | 0.0305 | - | - | 64 B |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 778.2 ns | 2.81 ns | 2.49 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 262.0 ns | 1.08 ns | 1.01 ns | 0.34 | 0.0305 | - | - | 64 B |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 762.9 ns | 1.55 ns | 1.30 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_List_Value | List_Value | 100 | 798.4 ns | 3.46 ns | 2.89 ns | 1.05 | 0.0458 | - | - | 96 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 1,746.6 ns | 4.35 ns | 4.06 ns | 1.00 | 0.0458 | - | - | 96 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 725.9 ns | 7.94 ns | 7.04 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 751.0 ns | 3.70 ns | 3.28 ns | 1.03 | 0.0458 | - | - | 96 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 724.8 ns | 9.52 ns | 8.91 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 758.4 ns | 2.32 ns | 1.94 ns | 1.04 | 0.0458 | - | - | 96 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 716.9 ns | 3.26 ns | 2.89 ns | 1.00 | 0.0458 | - | - | 96 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 828.8 ns | 4.47 ns | 3.97 ns | 1.16 | 0.0458 | - | - | 96 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 1,726.4 ns | 13.14 ns | 12.29 ns | 1.00 | 0.0458 | - | - | 96 B |
diff --git a/Benchmarks/WhereToArrayBenchmarks.md b/Benchmarks/WhereToArrayBenchmarks.md
index 49ef34978..1e2b1d668 100644
--- a/Benchmarks/WhereToArrayBenchmarks.md
+++ b/Benchmarks/WhereToArrayBenchmarks.md
@@ -4,58 +4,57 @@
[WhereToArrayBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/WhereToArrayBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 408.4 ns | 0.82 ns | 0.68 ns | 1.00 | 0.3519 | - | - | 736 B |
-| StructLinq_Array | Array | 100 | 385.2 ns | 0.94 ns | 0.78 ns | 0.94 | 0.1144 | - | - | 240 B |
-| Hyperlinq_Array | Array | 100 | 471.4 ns | 1.16 ns | 1.03 ns | 1.15 | 0.1144 | - | - | 240 B |
-| Hyperlinq_Span | Array | 100 | 479.2 ns | 2.08 ns | 1.94 ns | 1.17 | 0.1144 | - | - | 240 B |
-| Hyperlinq_Memory | Array | 100 | 520.2 ns | 1.69 ns | 1.50 ns | 1.27 | 0.1144 | - | - | 240 B |
-| | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,344.1 ns | 1.97 ns | 1.75 ns | 1.00 | 0.3700 | - | - | 776 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,257.3 ns | 5.13 ns | 4.80 ns | 0.94 | 0.1297 | - | - | 272 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 506.3 ns | 3.55 ns | 3.33 ns | 0.38 | 0.1144 | - | - | 240 B |
-| | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 1,221.0 ns | 2.79 ns | 2.47 ns | 1.00 | 0.3700 | - | - | 776 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 1,252.3 ns | 3.72 ns | 3.30 ns | 1.03 | 0.1297 | - | - | 272 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 573.2 ns | 9.72 ns | 8.61 ns | 0.47 | 0.1144 | - | - | 240 B |
-| | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 1,205.2 ns | 2.78 ns | 2.46 ns | 1.00 | 0.3700 | - | - | 776 B |
-| StructLinq_List_Value | List_Value | 100 | 787.0 ns | 1.58 ns | 1.48 ns | 0.65 | 0.1144 | - | - | 240 B |
-| Hyperlinq_List_Value | List_Value | 100 | 864.1 ns | 5.16 ns | 4.57 ns | 0.72 | 0.1144 | - | - | 240 B |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 5,975.7 ns | 16.61 ns | 14.72 ns | 1.00 | 0.4578 | - | - | 960 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 6,089.1 ns | 13.45 ns | 11.92 ns | 1.02 | 0.4730 | - | - | 992 B |
-| | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 797.6 ns | 6.41 ns | 5.68 ns | 1.00 | 0.3710 | - | - | 776 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 806.1 ns | 1.28 ns | 1.07 ns | 1.01 | 0.1297 | - | - | 272 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 891.9 ns | 2.48 ns | 2.07 ns | 1.12 | 0.1297 | - | - | 272 B |
-| | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 792.7 ns | 12.23 ns | 9.55 ns | 1.00 | 0.3710 | - | - | 776 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 804.3 ns | 1.83 ns | 1.63 ns | 1.02 | 0.1297 | - | - | 272 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 895.5 ns | 1.64 ns | 1.46 ns | 1.13 | 0.1297 | - | - | 272 B |
-| | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 794.8 ns | 2.19 ns | 1.94 ns | 1.00 | 0.3710 | - | - | 776 B |
-| StructLinq_List_Reference | List_Reference | 100 | 810.0 ns | 2.25 ns | 2.11 ns | 1.02 | 0.1297 | - | - | 272 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 844.4 ns | 3.48 ns | 2.90 ns | 1.06 | 0.1144 | - | - | 240 B |
-| | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 5,921.5 ns | 18.56 ns | 15.49 ns | 1.00 | 0.4578 | - | - | 960 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 6,269.7 ns | 14.95 ns | 13.98 ns | 1.06 | 0.4807 | - | - | 1008 B |
+| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|-------------:|--------:|-------:|----------:|
+| Linq_Array | Array | 100 | 434.2 ns | 1.36 ns | 1.27 ns | baseline | | 0.3519 | 736 B |
+| StructLinq_Array | Array | 100 | 437.4 ns | 2.51 ns | 2.35 ns | 1.01x slower | 0.00x | 0.1144 | 240 B |
+| Hyperlinq_Array | Array | 100 | 577.6 ns | 6.89 ns | 6.11 ns | 1.33x slower | 0.02x | 0.1144 | 240 B |
+| | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 555.0 ns | 2.43 ns | 2.27 ns | baseline | | 0.3710 | 776 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 616.8 ns | 1.73 ns | 1.45 ns | 1.11x slower | 0.00x | 0.1297 | 272 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 614.7 ns | 3.39 ns | 3.00 ns | 1.11x slower | 0.01x | 0.1144 | 240 B |
+| | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 584.4 ns | 3.80 ns | 3.56 ns | baseline | | 0.3710 | 776 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 610.2 ns | 4.36 ns | 3.86 ns | 1.04x slower | 0.01x | 0.1297 | 272 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 596.2 ns | 5.27 ns | 4.11 ns | 1.02x slower | 0.01x | 0.1144 | 240 B |
+| | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 576.4 ns | 2.46 ns | 2.06 ns | baseline | | 0.3710 | 776 B |
+| StructLinq_List_Value | List_Value | 100 | 502.4 ns | 3.02 ns | 2.82 ns | 1.15x faster | 0.01x | 0.1144 | 240 B |
+| Hyperlinq_List_Value | List_Value | 100 | 750.1 ns | 5.04 ns | 4.72 ns | 1.30x slower | 0.01x | 0.1297 | 272 B |
+| | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 5,109.9 ns | 21.88 ns | 20.47 ns | baseline | | 0.4501 | 952 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 3,017.0 ns | 10.32 ns | 9.66 ns | 1.69x faster | 0.01x | 0.3433 | 720 B |
+| | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 555.3 ns | 2.73 ns | 2.56 ns | baseline | | 0.3710 | 776 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 616.8 ns | 8.58 ns | 8.02 ns | 1.11x slower | 0.02x | 0.1297 | 272 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 717.4 ns | 13.31 ns | 11.11 ns | 1.29x slower | 0.02x | 0.1297 | 272 B |
+| | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 585.6 ns | 11.67 ns | 23.58 ns | baseline | | 0.3710 | 776 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 612.1 ns | 11.94 ns | 14.66 ns | 1.03x slower | 0.06x | 0.1297 | 272 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 712.0 ns | 14.18 ns | 18.44 ns | 1.20x slower | 0.07x | 0.1297 | 272 B |
+| | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 577.9 ns | 3.49 ns | 3.09 ns | baseline | | 0.3710 | 776 B |
+| StructLinq_List_Reference | List_Reference | 100 | 601.2 ns | 0.76 ns | 0.60 ns | 1.04x slower | 0.01x | 0.1297 | 272 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 725.8 ns | 4.94 ns | 4.62 ns | 1.26x slower | 0.01x | 0.1297 | 272 B |
+| | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 5,201.5 ns | 24.53 ns | 22.94 ns | baseline | | 0.4501 | 952 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 3,198.6 ns | 10.74 ns | 8.97 ns | 1.63x faster | 0.01x | 0.3586 | 752 B |
diff --git a/Benchmarks/WhereToListBenchmarks.md b/Benchmarks/WhereToListBenchmarks.md
index dbab1aea2..a51bbca4b 100644
--- a/Benchmarks/WhereToListBenchmarks.md
+++ b/Benchmarks/WhereToListBenchmarks.md
@@ -4,58 +4,57 @@
[WhereToListBenchmarks.cs](../NetFabric.Hyperlinq.Benchmarks/Benchmarks/WhereToListBenchmarks.cs)
### References:
-- Linq: 4.8.4300.0
+- Linq: 6.0.0-preview.7.21377.19
- System.Linq.Async: [5.0.0](https://www.nuget.org/packages/System.Linq.Async/5.0.0)
- System.Interactive: [5.0.0](https://www.nuget.org/packages/System.Interactive/5.0.0)
- System.Interactive.Async: [5.0.0](https://www.nuget.org/packages/System.Interactive.Async/5.0.0)
-- StructLinq: [0.25.3](https://www.nuget.org/packages/StructLinq/0.25.3)
-- NetFabric.Hyperlinq: [3.0.0-beta29](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta29)
+- StructLinq: [0.27.0](https://www.nuget.org/packages/StructLinq/0.27.0)
+- NetFabric.Hyperlinq: [3.0.0-beta45](https://www.nuget.org/packages/NetFabric.Hyperlinq/3.0.0-beta45)
### Results:
``` ini
-BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
-Intel Core i7-7567U CPU 3.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
- [Host] : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT
- .NET Core 5.0 : .NET Core 5.0.2 (CoreCLR 5.0.220.61120, CoreFX 5.0.220.61120), X64 RyuJIT
+BenchmarkDotNet=v0.13.1.1606-nightly, OS=macOS Catalina 10.15.7 (19H1323) [Darwin 19.6.0]
+Intel Core i5-7360U CPU 2.30GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
+.NET SDK=6.0.100-preview.7.21379.14
+ [Host] : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
+ .NET 6 PGO : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
-Job=.NET Core 5.0 Runtime=.NET Core 5.0
+Job=.NET 6 PGO EnvironmentVariables=COMPlus_ReadyToRun=0,COMPlus_TC_QuickJitForLoops=1,COMPlus_TieredPGO=1 Runtime=.NET 6.0
```
-| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
-|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|------:|--------:|-------:|------:|------:|----------:|
-| Linq_Array | Array | 100 | 400.6 ns | 2.94 ns | 2.60 ns | 1.00 | 0.00 | 0.3328 | - | - | 696 B |
-| StructLinq_Array | Array | 100 | 431.3 ns | 5.80 ns | 4.85 ns | 1.08 | 0.01 | 0.1297 | - | - | 272 B |
-| Hyperlinq_Array | Array | 100 | 514.6 ns | 4.31 ns | 3.82 ns | 1.28 | 0.01 | 0.1297 | - | - | 272 B |
-| Hyperlinq_Span | Array | 100 | 505.9 ns | 5.18 ns | 4.85 ns | 1.26 | 0.01 | 0.1297 | - | - | 272 B |
-| Hyperlinq_Memory | Array | 100 | 484.4 ns | 5.52 ns | 4.90 ns | 1.21 | 0.01 | 0.1297 | - | - | 272 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Value | Enumerable_Value | 100 | 1,340.7 ns | 15.61 ns | 13.84 ns | 1.00 | 0.00 | 0.3510 | - | - | 736 B |
-| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 1,269.4 ns | 10.89 ns | 9.10 ns | 0.95 | 0.01 | 0.1450 | - | - | 304 B |
-| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 592.3 ns | 9.60 ns | 8.51 ns | 0.44 | 0.01 | 0.1297 | - | - | 272 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Value | Collection_Value | 100 | 1,246.4 ns | 11.41 ns | 10.68 ns | 1.00 | 0.00 | 0.3510 | - | - | 736 B |
-| StructLinq_Collection_Value | Collection_Value | 100 | 1,298.3 ns | 21.72 ns | 19.25 ns | 1.04 | 0.01 | 0.1450 | - | - | 304 B |
-| Hyperlinq_Collection_Value | Collection_Value | 100 | 553.5 ns | 8.56 ns | 8.00 ns | 0.44 | 0.01 | 0.1297 | - | - | 272 B |
-| | | | | | | | | | | | |
-| Linq_List_Value | List_Value | 100 | 1,228.4 ns | 4.36 ns | 3.86 ns | 1.00 | 0.00 | 0.3510 | - | - | 736 B |
-| StructLinq_List_Value | List_Value | 100 | 823.2 ns | 4.09 ns | 3.41 ns | 0.67 | 0.00 | 0.1297 | - | - | 272 B |
-| Hyperlinq_List_Value | List_Value | 100 | 912.7 ns | 6.66 ns | 6.23 ns | 0.74 | 0.00 | 0.1297 | - | - | 272 B |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 6,239.2 ns | 28.51 ns | 23.81 ns | 1.00 | 0.00 | 0.3586 | - | - | 752 B |
-| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 6,028.3 ns | 40.70 ns | 33.98 ns | 0.97 | 0.00 | 0.3738 | - | - | 784 B |
-| | | | | | | | | | | | |
-| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 923.7 ns | 9.56 ns | 8.94 ns | 1.00 | 0.00 | 0.3519 | - | - | 736 B |
-| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 870.5 ns | 6.22 ns | 4.86 ns | 0.94 | 0.01 | 0.1450 | - | - | 304 B |
-| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 951.5 ns | 12.88 ns | 12.05 ns | 1.03 | 0.02 | 0.1450 | - | - | 304 B |
-| | | | | | | | | | | | |
-| Linq_Collection_Reference | Collection_Reference | 100 | 825.7 ns | 6.73 ns | 6.30 ns | 1.00 | 0.00 | 0.3519 | - | - | 736 B |
-| StructLinq_Collection_Reference | Collection_Reference | 100 | 856.7 ns | 8.19 ns | 7.66 ns | 1.04 | 0.01 | 0.1450 | - | - | 304 B |
-| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 954.3 ns | 6.18 ns | 5.47 ns | 1.16 | 0.01 | 0.1450 | - | - | 304 B |
-| | | | | | | | | | | | |
-| Linq_List_Reference | List_Reference | 100 | 1,044.1 ns | 10.54 ns | 8.80 ns | 1.00 | 0.00 | 0.3510 | - | - | 736 B |
-| StructLinq_List_Reference | List_Reference | 100 | 868.8 ns | 14.72 ns | 13.05 ns | 0.83 | 0.01 | 0.1450 | - | - | 304 B |
-| Hyperlinq_List_Reference | List_Reference | 100 | 914.0 ns | 4.03 ns | 3.15 ns | 0.88 | 0.01 | 0.1297 | - | - | 272 B |
-| | | | | | | | | | | | |
-| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 6,083.8 ns | 25.51 ns | 21.30 ns | 1.00 | 0.00 | 0.3586 | - | - | 752 B |
-| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 6,889.0 ns | 23.42 ns | 20.76 ns | 1.13 | 0.00 | 0.3815 | - | - | 800 B |
+| Method | Categories | Count | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Allocated |
+|------------------------------------ |-------------------------- |------ |-----------:|---------:|---------:|-----------:|-------------:|--------:|-------:|----------:|
+| Linq_Array | Array | 100 | 397.0 ns | 1.32 ns | 1.10 ns | 396.7 ns | baseline | | 0.3328 | 696 B |
+| StructLinq_Array | Array | 100 | 467.5 ns | 6.04 ns | 5.35 ns | 466.2 ns | 1.18x slower | 0.01x | 0.1297 | 272 B |
+| Hyperlinq_Array | Array | 100 | 616.5 ns | 10.59 ns | 8.84 ns | 617.4 ns | 1.55x slower | 0.02x | 0.1297 | 272 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Value | Enumerable_Value | 100 | 516.6 ns | 5.42 ns | 5.07 ns | 515.2 ns | baseline | | 0.3519 | 736 B |
+| StructLinq_Enumerable_Value | Enumerable_Value | 100 | 611.8 ns | 6.76 ns | 6.00 ns | 610.1 ns | 1.18x slower | 0.02x | 0.1450 | 304 B |
+| Hyperlinq_Enumerable_Value | Enumerable_Value | 100 | 668.4 ns | 16.30 ns | 43.80 ns | 649.7 ns | 1.35x slower | 0.10x | 0.1297 | 272 B |
+| | | | | | | | | | | |
+| Linq_Collection_Value | Collection_Value | 100 | 525.4 ns | 5.74 ns | 5.37 ns | 523.4 ns | baseline | | 0.3519 | 736 B |
+| StructLinq_Collection_Value | Collection_Value | 100 | 576.8 ns | 4.23 ns | 3.54 ns | 576.6 ns | 1.10x slower | 0.01x | 0.1450 | 304 B |
+| Hyperlinq_Collection_Value | Collection_Value | 100 | 703.4 ns | 15.04 ns | 41.93 ns | 687.7 ns | 1.41x slower | 0.10x | 0.1297 | 272 B |
+| | | | | | | | | | | |
+| Linq_List_Value | List_Value | 100 | 517.3 ns | 5.27 ns | 4.67 ns | 515.5 ns | baseline | | 0.3519 | 736 B |
+| StructLinq_List_Value | List_Value | 100 | 536.5 ns | 3.80 ns | 3.37 ns | 535.7 ns | 1.04x slower | 0.01x | 0.1297 | 272 B |
+| Hyperlinq_List_Value | List_Value | 100 | 836.0 ns | 9.89 ns | 7.72 ns | 835.3 ns | 1.62x slower | 0.02x | 0.1450 | 304 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 5,264.3 ns | 17.15 ns | 14.32 ns | 5,263.1 ns | baseline | | 0.3510 | 744 B |
+| Hyperlinq_AsyncEnumerable_Value | AsyncEnumerable_Value | 100 | 3,202.6 ns | 56.35 ns | 47.05 ns | 3,200.3 ns | 1.64x faster | 0.03x | 0.3586 | 752 B |
+| | | | | | | | | | | |
+| Linq_Enumerable_Reference | Enumerable_Reference | 100 | 520.4 ns | 6.68 ns | 5.92 ns | 517.4 ns | baseline | | 0.3519 | 736 B |
+| StructLinq_Enumerable_Reference | Enumerable_Reference | 100 | 610.1 ns | 5.59 ns | 4.95 ns | 609.4 ns | 1.17x slower | 0.02x | 0.1450 | 304 B |
+| Hyperlinq_Enumerable_Reference | Enumerable_Reference | 100 | 770.1 ns | 15.17 ns | 19.72 ns | 768.2 ns | 1.47x slower | 0.04x | 0.1450 | 304 B |
+| | | | | | | | | | | |
+| Linq_Collection_Reference | Collection_Reference | 100 | 519.3 ns | 4.43 ns | 4.14 ns | 518.1 ns | baseline | | 0.3519 | 736 B |
+| StructLinq_Collection_Reference | Collection_Reference | 100 | 624.5 ns | 18.32 ns | 49.83 ns | 606.0 ns | 1.22x slower | 0.11x | 0.1450 | 304 B |
+| Hyperlinq_Collection_Reference | Collection_Reference | 100 | 754.0 ns | 11.22 ns | 9.37 ns | 753.6 ns | 1.45x slower | 0.02x | 0.1450 | 304 B |
+| | | | | | | | | | | |
+| Linq_List_Reference | List_Reference | 100 | 518.8 ns | 5.66 ns | 5.29 ns | 517.9 ns | baseline | | 0.3519 | 736 B |
+| StructLinq_List_Reference | List_Reference | 100 | 652.0 ns | 12.89 ns | 18.07 ns | 648.6 ns | 1.25x slower | 0.03x | 0.1450 | 304 B |
+| Hyperlinq_List_Reference | List_Reference | 100 | 815.1 ns | 16.32 ns | 27.71 ns | 809.2 ns | 1.58x slower | 0.06x | 0.1450 | 304 B |
+| | | | | | | | | | | |
+| Linq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 5,203.8 ns | 20.01 ns | 16.71 ns | 5,196.0 ns | baseline | | 0.3510 | 744 B |
+| Hyperlinq_AsyncEnumerable_Reference | AsyncEnumerable_Reference | 100 | 3,274.2 ns | 49.93 ns | 46.71 ns | 3,252.6 ns | 1.59x faster | 0.02x | 0.3738 | 784 B |
diff --git a/Directory.Build.props b/Directory.Build.props
index c658797b2..ce2d72bbe 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -4,8 +4,9 @@
Antao Almada
Copyright 2019-2021 Antao Almada
- 9.0
+ latest
strict
+ enable
diff --git a/Icon.png b/Icon.png
index 278ddc671..baf66818c 100644
Binary files a/Icon.png and b/Icon.png differ
diff --git a/NetFabric.Hyperlinq.Abstractions/AsyncFunctionWrapper.cs b/NetFabric.Hyperlinq.Abstractions/AsyncFunctionWrapper.cs
index 32621771c..866062a99 100644
--- a/NetFabric.Hyperlinq.Abstractions/AsyncFunctionWrapper.cs
+++ b/NetFabric.Hyperlinq.Abstractions/AsyncFunctionWrapper.cs
@@ -1,4 +1,5 @@
using System;
+using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
@@ -12,8 +13,12 @@ namespace NetFabric.Hyperlinq
public AsyncFunctionWrapper(Func> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ValueTask InvokeAsync(T arg, CancellationToken cancellationToken)
=> function(arg, cancellationToken);
+
+ public static implicit operator AsyncFunctionWrapper(Func> func)
+ => new(func);
}
public readonly struct AsyncFunctionWrapper
@@ -24,8 +29,12 @@ public ValueTask InvokeAsync(T arg, CancellationToken cancellationToken
public AsyncFunctionWrapper(Func> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ValueTask InvokeAsync(T1 arg1, T2 arg2, CancellationToken cancellationToken)
=> function(arg1, arg2, cancellationToken);
+
+ public static implicit operator AsyncFunctionWrapper(Func> func)
+ => new(func);
}
public readonly struct AsyncFunctionWrapper
@@ -36,8 +45,12 @@ public ValueTask InvokeAsync(T1 arg1, T2 arg2, CancellationToken cancel
public AsyncFunctionWrapper(Func> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, CancellationToken cancellationToken)
=> function(arg1, arg2, arg3, cancellationToken);
+
+ public static implicit operator AsyncFunctionWrapper(Func> func)
+ => new(func);
}
public readonly struct AsyncFunctionWrapper
@@ -48,8 +61,12 @@ public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, CancellationTok
public AsyncFunctionWrapper(Func> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, CancellationToken cancellationToken)
=> function(arg1, arg2, arg3, arg4, cancellationToken);
+
+ public static implicit operator AsyncFunctionWrapper(Func> func)
+ => new(func);
}
public readonly struct AsyncFunctionWrapper
@@ -60,8 +77,12 @@ public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, Cancel
public AsyncFunctionWrapper(Func> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, CancellationToken cancellationToken)
=> function(arg1, arg2, arg3, arg4, arg5, cancellationToken);
+
+ public static implicit operator AsyncFunctionWrapper(Func> func)
+ => new(func);
}
public readonly struct AsyncFunctionWrapper
@@ -72,8 +93,12 @@ public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg
public AsyncFunctionWrapper(Func> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, CancellationToken cancellationToken)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, cancellationToken);
+
+ public static implicit operator AsyncFunctionWrapper(Func> func)
+ => new(func);
}
public readonly struct AsyncFunctionWrapper
@@ -84,8 +109,12 @@ public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg
public AsyncFunctionWrapper(Func> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, CancellationToken cancellationToken)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, cancellationToken);
+
+ public static implicit operator AsyncFunctionWrapper(Func> func)
+ => new(func);
}
public readonly struct AsyncFunctionWrapper
@@ -96,8 +125,12 @@ public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg
public AsyncFunctionWrapper(Func> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, CancellationToken cancellationToken)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, cancellationToken);
+
+ public static implicit operator AsyncFunctionWrapper(Func> func)
+ => new(func);
}
public readonly struct AsyncFunctionWrapper
@@ -108,7 +141,11 @@ public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg
public AsyncFunctionWrapper(Func> function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public ValueTask InvokeAsync(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, CancellationToken cancellationToken)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, cancellationToken);
+
+ public static implicit operator AsyncFunctionWrapper(Func> func)
+ => new(func);
}
}
diff --git a/NetFabric.Hyperlinq.Abstractions/FunctionIn.cs b/NetFabric.Hyperlinq.Abstractions/FunctionIn.cs
index e4e4ab4ac..b10e4d3c8 100644
--- a/NetFabric.Hyperlinq.Abstractions/FunctionIn.cs
+++ b/NetFabric.Hyperlinq.Abstractions/FunctionIn.cs
@@ -2,5 +2,5 @@
{
public delegate TResult FunctionIn(in T arg);
- public delegate TResult FunctionIn(in T1 arg, T2 arg2);
+ public delegate TResult FunctionIn(in T1 arg, T2 arg2);
}
diff --git a/NetFabric.Hyperlinq.Abstractions/FunctionInWrapper.cs b/NetFabric.Hyperlinq.Abstractions/FunctionInWrapper.cs
index 535c84056..e91f77875 100644
--- a/NetFabric.Hyperlinq.Abstractions/FunctionInWrapper.cs
+++ b/NetFabric.Hyperlinq.Abstractions/FunctionInWrapper.cs
@@ -1,4 +1,5 @@
using System;
+using System.Runtime.CompilerServices;
namespace NetFabric.Hyperlinq
{
@@ -10,8 +11,12 @@ namespace NetFabric.Hyperlinq
public FunctionInWrapper(FunctionIn function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(in T arg)
=> function(arg);
+
+ public static implicit operator FunctionInWrapper(FunctionIn func)
+ => new(func);
}
public readonly struct FunctionInWrapper
@@ -22,7 +27,11 @@ public TResult Invoke(in T arg)
public FunctionInWrapper(FunctionIn function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(in T1 arg1, T2 arg2)
=> function(arg1, arg2);
+
+ public static implicit operator FunctionInWrapper(FunctionIn func)
+ => new(func);
}
}
diff --git a/NetFabric.Hyperlinq.Abstractions/FunctionWrapper.cs b/NetFabric.Hyperlinq.Abstractions/FunctionWrapper.cs
index 2802ed999..7cd133f9f 100644
--- a/NetFabric.Hyperlinq.Abstractions/FunctionWrapper.cs
+++ b/NetFabric.Hyperlinq.Abstractions/FunctionWrapper.cs
@@ -1,7 +1,24 @@
using System;
+using System.Runtime.CompilerServices;
namespace NetFabric.Hyperlinq
{
+ public readonly struct FunctionWrapper
+ : IFunction
+ {
+ readonly Func function;
+
+ public FunctionWrapper(Func function)
+ => this.function = function ?? throw new ArgumentNullException(nameof(function));
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public TResult Invoke()
+ => function();
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
+ }
+
public readonly struct FunctionWrapper
: IFunction
{
@@ -10,8 +27,12 @@ namespace NetFabric.Hyperlinq
public FunctionWrapper(Func function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T arg)
=> function(arg);
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
}
public readonly struct FunctionWrapper
@@ -22,8 +43,12 @@ public TResult Invoke(T arg)
public FunctionWrapper(Func function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2)
=> function(arg1, arg2);
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
}
public readonly struct FunctionWrapper
@@ -34,8 +59,12 @@ public TResult Invoke(T1 arg1, T2 arg2)
public FunctionWrapper(Func function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3)
=> function(arg1, arg2, arg3);
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
}
public readonly struct FunctionWrapper
@@ -46,8 +75,12 @@ public TResult Invoke(T1 arg1, T2 arg2, T3 arg3)
public FunctionWrapper(Func function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4)
=> function(arg1, arg2, arg3, arg4);
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
}
public readonly struct FunctionWrapper
@@ -58,8 +91,12 @@ public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4)
public FunctionWrapper(Func function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
=> function(arg1, arg2, arg3, arg4, arg5);
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
}
public readonly struct FunctionWrapper
@@ -70,8 +107,12 @@ public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
public FunctionWrapper(Func function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
=> function(arg1, arg2, arg3, arg4, arg5, arg6);
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
}
public readonly struct FunctionWrapper
@@ -82,8 +123,12 @@ public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
public FunctionWrapper(Func function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
}
public readonly struct FunctionWrapper
@@ -94,8 +139,12 @@ public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 a
public FunctionWrapper(Func function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
}
public readonly struct FunctionWrapper
@@ -106,7 +155,11 @@ public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 a
public FunctionWrapper(Func function)
=> this.function = function ?? throw new ArgumentNullException(nameof(function));
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)
=> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
+
+ public static implicit operator FunctionWrapper(Func func)
+ => new(func);
}
}
diff --git a/NetFabric.Hyperlinq.Abstractions/IEnumeratorRef.cs b/NetFabric.Hyperlinq.Abstractions/IEnumeratorRef.cs
deleted file mode 100644
index 8ca23bd73..000000000
--- a/NetFabric.Hyperlinq.Abstractions/IEnumeratorRef.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System;
-
-namespace NetFabric.Hyperlinq
-{
- public interface IEnumeratorRef
- {
- ref T Current { get; }
-
- bool MoveNext();
- }
-}
diff --git a/NetFabric.Hyperlinq.Abstractions/IFunction.cs b/NetFabric.Hyperlinq.Abstractions/IFunction.cs
index ee309ec5b..1133f3133 100644
--- a/NetFabric.Hyperlinq.Abstractions/IFunction.cs
+++ b/NetFabric.Hyperlinq.Abstractions/IFunction.cs
@@ -1,47 +1,64 @@
-namespace NetFabric.Hyperlinq
+using System.Diagnostics.Contracts;
+
+namespace NetFabric.Hyperlinq
{
+ public interface IFunction
+ {
+ [Pure]
+ TResult Invoke();
+ }
+
public interface IFunction
{
+ [Pure]
TResult Invoke(T arg);
}
public interface IFunction
{
+ [Pure]
TResult Invoke(T1 arg1, T2 arg2);
}
public interface IFunction
{
+ [Pure]
TResult Invoke(T1 arg1, T2 arg2, T3 arg3);
}
public interface IFunction
{
+ [Pure]
TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
}
public interface IFunction
{
+ [Pure]
TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);
}
public interface IFunction
{
+ [Pure]
TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6);
}
public interface IFunction
{
+ [Pure]
TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7);
}
public interface IFunction
{
+ [Pure]
TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);
}
public interface IFunction
{
+ [Pure]
TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9);
}
}
diff --git a/NetFabric.Hyperlinq.Abstractions/NetFabric.Hyperlinq.Abstractions.csproj b/NetFabric.Hyperlinq.Abstractions/NetFabric.Hyperlinq.Abstractions.csproj
index 35debdd98..a7ecc6c65 100644
--- a/NetFabric.Hyperlinq.Abstractions/NetFabric.Hyperlinq.Abstractions.csproj
+++ b/NetFabric.Hyperlinq.Abstractions/NetFabric.Hyperlinq.Abstractions.csproj
@@ -1,17 +1,18 @@
- net461;net5.0;netstandard2.0;netstandard2.1
+ net5.0;netstandard2.0;netstandard2.1
NetFabric.Hyperlinq.Abstractions
NetFabric.Hyperlinq.Abstractions
Abstractions for high performance enumeration.
- 1.1.0-beta01
+ 1.3.0
Icon.png
LICENSE
netfabric, hyperlinq, abstractions, linq, enumeration, performance
true
- Added IFunctionIn and related interfaces.
- enable
+ true
+ snupkg
+
diff --git a/NetFabric.Hyperlinq.Abstractions/ValueEnumerable.cs b/NetFabric.Hyperlinq.Abstractions/ValueEnumerable.cs
index 05a2cc620..d4078c94f 100644
--- a/NetFabric.Hyperlinq.Abstractions/ValueEnumerable.cs
+++ b/NetFabric.Hyperlinq.Abstractions/ValueEnumerable.cs
@@ -5,9 +5,7 @@ namespace NetFabric.Hyperlinq
{
public interface IValueEnumerable
: IEnumerable
- where TEnumerator
- : struct
- , IEnumerator
+ where TEnumerator : struct, IEnumerator
{
[return: NotNull] new TEnumerator GetEnumerator();
}
@@ -15,26 +13,14 @@ where TEnumerator
public interface IValueReadOnlyCollection
: IReadOnlyCollection
, IValueEnumerable
- where TEnumerator
- : struct
- , IEnumerator
+ where TEnumerator : struct, IEnumerator
{
}
public interface IValueReadOnlyList
: IReadOnlyList
, IValueReadOnlyCollection
- where TEnumerator
- : struct
- , IEnumerator
+ where TEnumerator : struct, IEnumerator
{
}
-
- public interface IValueEnumerableRef
- where TEnumerator
- : struct
- , IEnumeratorRef
- {
- [return: NotNull] TEnumerator GetEnumerator();
- }
}
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AggressiveInliningBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AggressiveInliningBenchmarks.cs
new file mode 100644
index 000000000..d33ec4e09
--- /dev/null
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AggressiveInliningBenchmarks.cs
@@ -0,0 +1,82 @@
+using BenchmarkDotNet.Attributes;
+using System;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+namespace NetFabric.Hyperlinq.Benchmarks.Benchmarks
+{
+ public class AggressiveInliningBenchmarks
+ {
+ const int seed = 2982;
+ int[]? array;
+
+ [Params(1_000)]
+ public int Count { get; set; }
+
+ [GlobalSetup]
+ public void GlobalSetup()
+ => array = Utils.GetRandomValues(seed, Count);
+
+ [Benchmark(Baseline = true)]
+ public int Baseline()
+ {
+ var enumerator = new Enumerator(array!);
+ var sum = 0;
+ while (enumerator.MoveNext())
+ sum += enumerator.Current;
+ return sum;
+ }
+
+ [Benchmark]
+ public int AggressiveInlining()
+ {
+ var enumerator = new AggressiveInliningEnumerator(array!);
+ var sum = 0;
+ while (enumerator.MoveNext())
+ sum += enumerator.Current;
+ return sum;
+ }
+
+ [StructLayout(LayoutKind.Auto)]
+ public struct Enumerator
+ {
+ readonly TSource[] source;
+ int index;
+
+ public Enumerator(TSource[] source)
+ {
+ this.source = source;
+ index = -1;
+ }
+
+ public readonly TSource Current
+ => source[index];
+
+ public bool MoveNext()
+ => ++index < source.Length;
+ }
+
+ [StructLayout(LayoutKind.Auto)]
+ public struct AggressiveInliningEnumerator
+ {
+ readonly TSource[] source;
+ int index;
+
+ public AggressiveInliningEnumerator(TSource[] source)
+ {
+ this.source = source;
+ index = -1;
+ }
+
+ public readonly TSource Current
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get => source[index];
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public bool MoveNext()
+ => ++index < source.Length;
+ }
+ }
+}
\ No newline at end of file
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AllBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AllBenchmarks.cs
index 57aa1d4aa..0658622f3 100644
--- a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AllBenchmarks.cs
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AllBenchmarks.cs
@@ -1,6 +1,5 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
-using System;
using System.Linq;
using System.Threading.Tasks;
@@ -13,75 +12,65 @@ public class AllBenchmarks : RandomBenchmarksBase
[BenchmarkCategory("Array")]
[Benchmark(Baseline = true)]
public bool Linq_Array()
- => Enumerable.All(array, _ => true);
+ => array.All(_ => true);
[BenchmarkCategory("Enumerable_Value")]
[Benchmark(Baseline = true)]
public bool Linq_Enumerable_Value()
- => Enumerable.All(enumerableValue, _ => true);
+ => enumerableValue.All(_ => true);
[BenchmarkCategory("Collection_Value")]
[Benchmark(Baseline = true)]
public bool Linq_Collection_Value()
- => Enumerable.All(collectionValue, _ => true);
+ => collectionValue.All(_ => true);
[BenchmarkCategory("List_Value")]
[Benchmark(Baseline = true)]
public bool Linq_List_Value()
- => Enumerable.All(listValue, _ => true);
+ => listValue.All(_ => true);
[BenchmarkCategory("AsyncEnumerable_Value")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Value()
- => AsyncEnumerable.AllAsync(asyncEnumerableValue, _ => true);
+ => asyncEnumerableValue.AllAsync(_ => true);
[BenchmarkCategory("Enumerable_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_Enumerable_Reference()
- => Enumerable.All(enumerableReference, _ => true);
+ => enumerableReference.All(_ => true);
[BenchmarkCategory("Collection_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_Collection_Reference()
- => Enumerable.All(collectionReference, _ => true);
+ => collectionReference.All(_ => true);
[BenchmarkCategory("List_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_List_Reference()
- => Enumerable.All(listReference, _ => true);
+ => listReference.All(_ => true);
[BenchmarkCategory("AsyncEnumerable_Reference")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Reference()
- => AsyncEnumerable.AllAsync(asyncEnumerableReference, _ => true);
+ => asyncEnumerableReference.AllAsync(_ => true);
// ---------------------------------------------------------------------
[BenchmarkCategory("Array")]
[Benchmark]
public bool Hyperlinq_Array()
- => array.All(_ => true);
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public bool Hyperlinq_Span()
- => array.AsSpan().All(_ => true);
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public bool Hyperlinq_Memory()
- => memory.AsValueEnumerable().All(_ => true);
+ => array.AsValueEnumerable().All(_ => true);
[BenchmarkCategory("Enumerable_Value")]
[Benchmark]
public bool Hyperlinq_Enumerable_Value()
- => EnumerableExtensions.AsValueEnumerable(enumerableValue, enumerable => enumerable.GetEnumerator())
+ => enumerableValue.AsValueEnumerable()
.All(_ => true);
[BenchmarkCategory("Collection_Value")]
[Benchmark]
public bool Hyperlinq_Collection_Value()
- => ReadOnlyCollectionExtensions.AsValueEnumerable(collectionValue, enumerable => enumerable.GetEnumerator())
+ => collectionValue.AsValueEnumerable()
.All(_ => true);
[BenchmarkCategory("List_Value")]
@@ -95,7 +84,7 @@ public bool Hyperlinq_List_Value()
[Benchmark]
public ValueTask Hyperlinq_AsyncEnumerable_Value()
=> asyncEnumerableValue
- .AsAsyncValueEnumerable((enumerable, cancellationToke) => enumerable.GetAsyncEnumerator(cancellationToke))
+ .AsAsyncValueEnumerable()
.AllAsync((item, _) => new ValueTask((item & 0x01) == 0));
[BenchmarkCategory("Enumerable_Reference")]
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyBenchmarks.cs
index d74f888b4..ac880e5ea 100644
--- a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyBenchmarks.cs
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyBenchmarks.cs
@@ -1,6 +1,5 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
-using System;
using System.Linq;
using System.Threading.Tasks;
@@ -13,75 +12,65 @@ public class AnyBenchmarks: RandomBenchmarksBase
[BenchmarkCategory("Array")]
[Benchmark(Baseline = true)]
public bool Linq_Array()
- => Enumerable.Any(array);
+ => array.Any();
[BenchmarkCategory("Enumerable_Value")]
[Benchmark(Baseline = true)]
public bool Linq_Enumerable_Value()
- => Enumerable.Any(enumerableValue);
+ => enumerableValue.Any();
[BenchmarkCategory("Collection_Value")]
[Benchmark(Baseline = true)]
public bool Linq_Collection_Value()
- => Enumerable.Any(collectionValue);
+ => collectionValue.Any();
[BenchmarkCategory("List_Value")]
[Benchmark(Baseline = true)]
public bool Linq_List_Value()
- => Enumerable.Any(listValue);
+ => listValue.Any();
[BenchmarkCategory("AsyncEnumerable_Value")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Value()
- => AsyncEnumerable.AnyAsync(asyncEnumerableValue);
+ => asyncEnumerableValue.AnyAsync();
[BenchmarkCategory("Enumerable_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_Enumerable_Reference()
- => Enumerable.Any(enumerableReference);
+ => enumerableReference.Any();
[BenchmarkCategory("Collection_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_Collection_Reference()
- => Enumerable.Any(collectionReference);
+ => collectionReference.Any();
[BenchmarkCategory("List_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_List_Reference()
- => Enumerable.Any(listReference);
+ => listReference.Any();
[BenchmarkCategory("AsyncEnumerable_Reference")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Reference()
- => AsyncEnumerable.AnyAsync(asyncEnumerableReference);
+ => asyncEnumerableReference.AnyAsync();
// ---------------------------------------------------------------------
[BenchmarkCategory("Array")]
[Benchmark]
public bool Hyperlinq_Array()
- => array.Any();
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public bool Hyperlinq_Span()
- => array.AsSpan().Any();
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public bool Hyperlinq_Memory()
- => memory.AsValueEnumerable().Any();
+ => array.AsValueEnumerable().Any();
[BenchmarkCategory("Enumerable_Value")]
[Benchmark]
public bool Hyperlinq_Enumerable_Value()
- => EnumerableExtensions.AsValueEnumerable(enumerableValue, enumerable => enumerable.GetEnumerator())
+ => enumerableValue.AsValueEnumerable()
.Any();
[BenchmarkCategory("Collection_Value")]
[Benchmark]
public bool Hyperlinq_Collection_Value()
- => ReadOnlyCollectionExtensions.AsValueEnumerable(collectionValue, enumerable => enumerable.GetEnumerator())
+ => collectionValue.AsValueEnumerable()
.Any();
[BenchmarkCategory("List_Value")]
@@ -95,7 +84,7 @@ public bool Hyperlinq_List_Value()
[Benchmark]
public ValueTask Hyperlinq_AsyncEnumerable_Value()
=> asyncEnumerableValue
- .AsAsyncValueEnumerable((enumerable, cancellationToke) => enumerable.GetAsyncEnumerator(cancellationToke))
+ .AsAsyncValueEnumerable()
.AnyAsync();
[BenchmarkCategory("Enumerable_Reference")]
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyPredicateBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyPredicateBenchmarks.cs
index c2d2c288b..2debd4f30 100644
--- a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyPredicateBenchmarks.cs
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/AnyPredicateBenchmarks.cs
@@ -1,6 +1,5 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
-using System;
using System.Linq;
using System.Threading.Tasks;
@@ -13,75 +12,65 @@ public class AnyPredicateBenchmarks: RandomBenchmarksBase
[BenchmarkCategory("Array")]
[Benchmark(Baseline = true)]
public bool Linq_Array()
- => Enumerable.Any(array, _ => false);
+ => array.Any(_ => false);
[BenchmarkCategory("Enumerable_Value")]
[Benchmark(Baseline = true)]
public bool Linq_Enumerable_Value()
- => Enumerable.Any(enumerableValue, _ => false);
+ => enumerableValue.Any(_ => false);
[BenchmarkCategory("Collection_Value")]
[Benchmark(Baseline = true)]
public bool Linq_Collection_Value()
- => Enumerable.Any(collectionValue, _ => false);
+ => collectionValue.Any(_ => false);
[BenchmarkCategory("List_Value")]
[Benchmark(Baseline = true)]
public bool Linq_List_Value()
- => Enumerable.Any(listValue, _ => false);
+ => listValue.Any(_ => false);
[BenchmarkCategory("AsyncEnumerable_Value")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Value()
- => AsyncEnumerable.AnyAsync(asyncEnumerableValue, _ => false);
+ => asyncEnumerableValue.AnyAsync(_ => false);
[BenchmarkCategory("Enumerable_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_Enumerable_Reference()
- => Enumerable.Any(enumerableReference, _ => false);
+ => enumerableReference.Any(_ => false);
[BenchmarkCategory("Collection_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_Collection_Reference()
- => Enumerable.Any(collectionReference, _ => false);
+ => collectionReference.Any(_ => false);
[BenchmarkCategory("List_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_List_Reference()
- => Enumerable.Any(listReference, _ => false);
+ => listReference.Any(_ => false);
[BenchmarkCategory("AsyncEnumerable_Reference")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Reference()
- => AsyncEnumerable.AnyAsync(asyncEnumerableReference, _ => false);
+ => asyncEnumerableReference.AnyAsync(_ => false);
// ---------------------------------------------------------------------
[BenchmarkCategory("Array")]
[Benchmark]
public bool Hyperlinq_Array()
- => array.Any(_ => false);
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public bool Hyperlinq_Span()
- => array.AsSpan().Any(_ => false);
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public bool Hyperlinq_Memory()
- => memory.AsValueEnumerable().Any(_ => false);
+ => array.AsValueEnumerable().Any(_ => false);
[BenchmarkCategory("Enumerable_Value")]
[Benchmark]
public bool Hyperlinq_Enumerable_Value()
- => EnumerableExtensions.AsValueEnumerable(enumerableValue, enumerable => enumerable.GetEnumerator())
+ => enumerableValue.AsValueEnumerable()
.Any(_ => false);
[BenchmarkCategory("Collection_Value")]
[Benchmark]
public bool Hyperlinq_Collection_Value()
- => ReadOnlyCollectionExtensions.AsValueEnumerable(collectionValue, enumerable => enumerable.GetEnumerator())
+ => collectionValue.AsValueEnumerable()
.Any(_ => false);
[BenchmarkCategory("List_Value")]
@@ -95,8 +84,8 @@ public bool Hyperlinq_List_Value()
[Benchmark]
public ValueTask Hyperlinq_AsyncEnumerable_Value()
=> asyncEnumerableValue
- .AsAsyncValueEnumerable((enumerable, cancellationToke) => enumerable.GetAsyncEnumerator(cancellationToke))
- .AnyAsync((item, _) => new ValueTask((item & 0x01) == 0));
+ .AsAsyncValueEnumerable()
+ .AnyAsync((_, _) => default);
[BenchmarkCategory("Enumerable_Reference")]
[Benchmark]
@@ -124,6 +113,6 @@ public bool Hyperlinq_List_Reference()
public ValueTask Hyperlinq_AsyncEnumerable_Reference()
=> asyncEnumerableReference
.AsAsyncValueEnumerable()
- .AnyAsync((item, _) => new ValueTask((item & 0x01) == 0));
+ .AnyAsync((_, _) => default);
}
}
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ArrayIterationBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ArrayIterationBenchmarks.cs
index 748e6e068..b74b4255f 100644
--- a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ArrayIterationBenchmarks.cs
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ArrayIterationBenchmarks.cs
@@ -1,27 +1,25 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using System;
-using System.Collections.Generic;
+using System.Numerics;
using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
namespace NetFabric.Hyperlinq.Benchmarks.Benchmarks
{
- [SimpleJob(RuntimeMoniker.NetCoreApp50)]
public class ArrayIterationBenchmarks
{
const int seed = 2982;
- int[] array;
- ReadOnlyMemory memory;
+ int[]? array;
ArraySegment segment;
- [Params(10_000_000)]
+ [Params(1_000_000)]
public int Count { get; set; }
[GlobalSetup]
public void GlobalSetup()
{
array = Utils.GetRandomValues(seed, Count);
- memory = Utils.GetRandomValues(seed, Count).AsMemory();
segment = new ArraySegment(Utils.GetRandomValues(seed, Count));
}
@@ -29,168 +27,164 @@ public void GlobalSetup()
public int Foreach()
{
var sum = 0;
- foreach (var item in array)
+ // ReSharper disable once LoopCanBeConvertedToQuery
+ foreach (var item in array!)
sum += item;
return sum;
}
-
+
[Benchmark]
public int For()
{
- var source = array;
+ var source = array!;
var sum = 0;
- for (var index = 0; index < source.Length; index++)
+ // ReSharper disable once ForCanBeConvertedToForeach
+ // ReSharper disable once LoopCanBeConvertedToQuery
+ for (var index = 0; index <= source.Length - 1; index++)
{
- var item = array[index];
+ var item = source[index];
sum += item;
}
return sum;
}
-
+
[Benchmark]
public unsafe int For_Unsafe()
{
- var end = array.Length;
+ var len = array!.Length - 1;
var sum = 0;
fixed (int* source = array)
{
- for (var index = 0; index < end; index++)
+ for (var index = 0; index <= len; index++)
{
- var item = array[index];
+ var item = source[index];
sum += item;
}
}
return sum;
}
-
+
[Benchmark]
public int ForAdamczewski()
{
- var source = array;
- var len = array.Length;
+ var source = array!;
var sum1 = 0;
var sum2 = 0;
- for (var index = 0; index < len; index += 2)
+ for (var index = 0; index <= source.Length - 2; index += 2)
{
- long i1 = index + 0;
- long i2 = index + 1;
- var c = source[i1];
- var d = source[i2];
+ var c = source[index + 0];
+ var d = source[index + 1];
sum1 += c;
sum2 += d;
}
+ if ((source.Length & 0x01) != 0)
+ {
+ sum1 += source[source.Length - 1];
+ }
return sum1 + sum2;
}
-
+
[Benchmark]
public unsafe int ForAdamczewskiUnsafe()
{
fixed (int* source = array)
{
- var len = array.Length;
+ var len = array!.Length - 2;
var sum1 = 0;
var sum2 = 0;
- for (var index = 0; index < len; index += 2)
+ for (var index = 0; index <= len; index += 2)
{
- long i1 = index + 0;
- long i2 = index + 1;
- var c = source[i1];
- var d = source[i2];
-
+ var c = source[index + 0];
+ var d = source[index + 1];
+
sum1 += c;
sum2 += d;
}
+ if ((array.Length & 0x01) != 0)
+ {
+ sum1 += source[array!.Length - 1];
+ }
return sum1 + sum2;
}
}
-
+
[Benchmark]
public int Span()
{
var source = array.AsSpan();
var sum = 0;
- for (var index = 0; index < source.Length; index++)
- {
- var item = source[index];
- sum += item;
- }
- return sum;
- }
-
- [Benchmark]
- public int Memory()
- {
- var source = memory.Span;
- var sum = 0;
- for (var index = 0; index < source.Length; index++)
- {
- var item = source[index];
+ foreach (var item in source)
sum += item;
- }
return sum;
}
-
+
[Benchmark]
public int ArraySegment_Foreach()
{
var sum = 0;
+ // ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator
foreach (var item in segment)
sum += item;
return sum;
}
-
+
[Benchmark]
public int ArraySegment_For()
{
- var source = segment.Array;
- var start = segment.Offset;
- var end = start + segment.Count;
+ var source = segment;
var sum = 0;
- for (var index = start; index < end; index++)
+ // ReSharper disable once LoopCanBeConvertedToQuery
+ // ReSharper disable once ForCanBeConvertedToForeach
+ for (var index = 0; index < source.Count; index++)
{
var item = source[index];
sum += item;
}
return sum;
}
-
+
[Benchmark]
- public int ArraySegment_Wrapper_Foreach()
+ public int ArraySegment_AsSpan()
{
- var source = new ArraySegmentWrapper(segment);
var sum = 0;
- foreach (var item in source)
+ // ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator
+ foreach (var item in segment.AsSpan())
sum += item;
return sum;
}
+
+ [Benchmark]
+ public int ArraySegment_AsArray()
+ {
+ var source = segment.Array!;
+ var end = segment.Offset + segment.Count;
+ var sum = 0;
+ for (var index = segment.Offset; index < end; index++)
+ sum += source[index];
+ return sum;
+ }
- readonly struct ArraySegmentWrapper
+ [Benchmark]
+ public int Vector()
{
- readonly ArraySegment source;
+ var source = array!;
+ var sum = 0;
+ var vectors = MemoryMarshal.Cast>(source);
+ var vectorSum = Vector.Zero;
- public ArraySegmentWrapper(in ArraySegment source)
- => this.source = source;
+ foreach (var vector in vectors)
+ vectorSum += vector;
- public Enumerator GetEnumerator()
- => new(source);
+ for (var index = 0; index < Vector.Count; index++)
+ sum += vectorSum[index];
- public struct Enumerator
+ for (var index = source.Length - (source.Length % Vector.Count); index < source.Length; index++)
{
- readonly TSource[] array;
- readonly int end;
- int current;
-
- public Enumerator(in ArraySegment source)
- => (array, end, current) = (source.Array!, source.Offset + source.Count - 1, -1);
-
- public TSource Current
- => array[current];
-
- public bool MoveNext()
- => ++current <= end;
+ var item = source[index];
+ sum += item;
}
- }
-
+ return sum;
+ }
}
}
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ArrayToArrayBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ArrayToArrayBenchmarks.cs
new file mode 100644
index 000000000..5182ff7db
--- /dev/null
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ArrayToArrayBenchmarks.cs
@@ -0,0 +1,43 @@
+using BenchmarkDotNet.Attributes;
+using System;
+using System.Collections.Generic;
+
+namespace NetFabric.Hyperlinq.Benchmarks.Benchmarks
+{
+ public class ArrayToArrayBenchmarks
+ {
+ const int seed = 2982;
+ int[]? array;
+
+ [Params(10, 100, 1000)]
+ public int Count { get; set; }
+
+ [GlobalSetup]
+ public void GlobalSetup()
+ => array = Utils.GetRandomValues(seed, Count);
+
+ [Benchmark(Baseline = true)]
+ public int[] ArrayClone()
+ => (int[])array!.Clone();
+
+ [Benchmark]
+ public int[] SpanToArray()
+ => array.AsSpan().ToArray();
+
+ [Benchmark]
+ public int[] SpanCopyTo()
+ {
+ var result = GC.AllocateUninitializedArray(Count);
+ array.AsSpan().CopyTo(result);
+ return result;
+ }
+
+ [Benchmark]
+ public int[] CollectionCopyTo()
+ {
+ var result = GC.AllocateUninitializedArray(Count);
+ ((ICollection)array!).CopyTo(result, 0);
+ return result;
+ }
+ }
+}
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsBenchmarks.cs
index 4a9ce38e4..acd3ad7e4 100644
--- a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsBenchmarks.cs
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsBenchmarks.cs
@@ -1,6 +1,5 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
-using System;
using System.Linq;
using System.Threading.Tasks;
@@ -13,47 +12,47 @@ public class ContainsBenchmarks : SequentialBenchmarksBase
[BenchmarkCategory("Array")]
[Benchmark(Baseline = true)]
public bool Linq_Array()
- => Enumerable.Contains(array, Count - 1);
-
- //[BenchmarkCategory("Enumerable_Value")]
- //[Benchmark(Baseline = true)]
- //public bool Linq_Enumerable_Value()
- // => Enumerable.Contains(enumerableValue, Count - 1);
-
- //[BenchmarkCategory("Collection_Value")]
- //[Benchmark(Baseline = true)]
- //public bool Linq_Collection_Value()
- // => Enumerable.Contains(collectionValue, Count - 1);
-
- //[BenchmarkCategory("List_Value")]
- //[Benchmark(Baseline = true)]
- //public bool Linq_List_Value()
- // => Enumerable.Contains(listValue, Count - 1);
-
- //[BenchmarkCategory("AsyncEnumerable_Value")]
- //[Benchmark(Baseline = true)]
- //public ValueTask Linq_AsyncEnumerable_Value()
- // => AsyncEnumerable.ContainsAsync(asyncEnumerableValue, Count - 1);
-
- //[BenchmarkCategory("Enumerable_Reference")]
- //[Benchmark(Baseline = true)]
- //public bool Linq_Enumerable_Reference()
- // => Enumerable.Contains(enumerableReference, Count - 1);
-
- //[BenchmarkCategory("Collection_Reference")]
- //[Benchmark(Baseline = true)]
- //public bool Linq_Collection_Reference()
- // => Enumerable.Contains(collectionReference, Count - 1);
-
- //[BenchmarkCategory("List_Reference")]
- //[Benchmark(Baseline = true)]
- //public bool Linq_List_Reference()
- // => Enumerable.Contains(listReference, Count - 1);
-
- //[BenchmarkCategory("AsyncEnumerable_Reference")]
- //[Benchmark(Baseline = true)]
- //public ValueTask Linq_AsyncEnumerable_Reference()
- // => AsyncEnumerable.ContainsAsync(asyncEnumerableReference, Count - 1);
+ => array.Contains(Count - 1);
+
+ [BenchmarkCategory("Enumerable_Value")]
+ [Benchmark(Baseline = true)]
+ public bool Linq_Enumerable_Value()
+ => enumerableValue.Contains(Count - 1);
+
+ [BenchmarkCategory("Collection_Value")]
+ [Benchmark(Baseline = true)]
+ public bool Linq_Collection_Value()
+ => collectionValue.Contains(Count - 1);
+
+ [BenchmarkCategory("List_Value")]
+ [Benchmark(Baseline = true)]
+ public bool Linq_List_Value()
+ => Enumerable.Contains(listValue, Count - 1);
+
+ [BenchmarkCategory("AsyncEnumerable_Value")]
+ [Benchmark(Baseline = true)]
+ public ValueTask Linq_AsyncEnumerable_Value()
+ => asyncEnumerableValue.ContainsAsync(Count - 1);
+
+ [BenchmarkCategory("Enumerable_Reference")]
+ [Benchmark(Baseline = true)]
+ public bool Linq_Enumerable_Reference()
+ => enumerableReference.Contains(Count - 1);
+
+ [BenchmarkCategory("Collection_Reference")]
+ [Benchmark(Baseline = true)]
+ public bool Linq_Collection_Reference()
+ => collectionReference.Contains(Count - 1);
+
+ [BenchmarkCategory("List_Reference")]
+ [Benchmark(Baseline = true)]
+ public bool Linq_List_Reference()
+ => listReference.Contains(Count - 1);
+
+ [BenchmarkCategory("AsyncEnumerable_Reference")]
+ [Benchmark(Baseline = true)]
+ public ValueTask Linq_AsyncEnumerable_Reference()
+ => asyncEnumerableReference.ContainsAsync(Count - 1);
// ---------------------------------------------------------------------
@@ -64,57 +63,61 @@ public bool Hyperlinq_Array()
[BenchmarkCategory("Array")]
[Benchmark]
- public bool Hyperlinq_Span()
- => array.AsSpan().Contains(Count - 1);
+ public bool Hyperlinq_Array_SIMD()
+ => array.AsValueEnumerable().ContainsVector(Count - 1);
- [BenchmarkCategory("Array")]
+ [BenchmarkCategory("Enumerable_Value")]
+ [Benchmark]
+ public bool Hyperlinq_Enumerable_Value()
+ => enumerableValue.AsValueEnumerable()
+ .Contains(Count - 1);
+
+ [BenchmarkCategory("Collection_Value")]
+ [Benchmark]
+ public bool Hyperlinq_Collection_Value()
+ => collectionValue.AsValueEnumerable()
+ .Contains(Count - 1);
+
+ [BenchmarkCategory("List_Value")]
+ [Benchmark]
+ public bool Hyperlinq_List_Value()
+ => listValue
+ .AsValueEnumerable()
+ .Contains(Count - 1);
+
+ [BenchmarkCategory("AsyncEnumerable_Value")]
+ [Benchmark]
+ public ValueTask Hyperlinq_AsyncEnumerable_Value()
+ => asyncEnumerableValue
+ .AsAsyncValueEnumerable()
+ .ContainsAsync(Count - 1);
+
+ [BenchmarkCategory("Enumerable_Reference")]
+ [Benchmark]
+ public bool Hyperlinq_Enumerable_Reference()
+ => enumerableReference
+ .AsValueEnumerable()
+ .Contains(Count - 1);
+
+ [BenchmarkCategory("Collection_Reference")]
+ [Benchmark]
+ public bool Hyperlinq_Collection_Reference()
+ => collectionReference
+ .AsValueEnumerable()
+ .Contains(Count - 1);
+
+ [BenchmarkCategory("List_Reference")]
+ [Benchmark]
+ public bool Hyperlinq_List_Reference()
+ => listReference
+ .AsValueEnumerable()
+ .Contains(Count - 1);
+
+ [BenchmarkCategory("AsyncEnumerable_Reference")]
[Benchmark]
- public bool Hyperlinq_Span_SIMD()
- => array.AsSpan().ContainsVector(Count - 1);
-
- //[BenchmarkCategory("Array")]
- //[Benchmark]
- //public bool Hyperlinq_Memory()
- // => memory.AsValueEnumerable().Contains(Count - 1);
-
- //[BenchmarkCategory("Enumerable_Value")]
- //[Benchmark]
- //public bool Hyperlinq_Enumerable_Value()
- // => EnumerableExtensions.AsValueEnumerable(enumerableValue, enumerable => enumerable.GetEnumerator())
- // .Contains(Count - 1);
-
- //[BenchmarkCategory("Collection_Value")]
- //[Benchmark]
- //public bool Hyperlinq_Collection_Value()
- // => ReadOnlyCollectionExtensions.AsValueEnumerable(collectionValue, enumerable => enumerable.GetEnumerator())
- // .Contains(Count - 1);
-
- //[BenchmarkCategory("List_Value")]
- //[Benchmark]
- //public bool Hyperlinq_List_Value()
- // => listValue
- // .AsValueEnumerable()
- // .Contains(Count - 1);
-
- //[BenchmarkCategory("Enumerable_Reference")]
- //[Benchmark]
- //public bool Hyperlinq_Enumerable_Reference()
- // => enumerableReference
- // .AsValueEnumerable()
- // .Contains(Count - 1);
-
- //[BenchmarkCategory("Collection_Reference")]
- //[Benchmark]
- //public bool Hyperlinq_Collection_Reference()
- // => collectionReference
- // .AsValueEnumerable()
- // .Contains(Count - 1);
-
- //[BenchmarkCategory("List_Reference")]
- //[Benchmark]
- //public bool Hyperlinq_List_Reference()
- // => listReference
- // .AsValueEnumerable()
- // .Contains(Count - 1);
+ public ValueTask Hyperlinq_AsyncEnumerable_Reference()
+ => asyncEnumerableReference
+ .AsAsyncValueEnumerable()
+ .ContainsAsync(Count - 1);
}
}
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsComparerBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsComparerBenchmarks.cs
index 3b6058aa3..61e6bfd9e 100644
--- a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsComparerBenchmarks.cs
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ContainsComparerBenchmarks.cs
@@ -1,6 +1,5 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
-using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@@ -14,75 +13,65 @@ public class ContainsComparerBenchmarks: SequentialBenchmarksBase, IEqualityComp
[BenchmarkCategory("Array")]
[Benchmark(Baseline = true)]
public bool Linq_Array()
- => Enumerable.Contains(array, Count - 1, this);
+ => array.Contains(Count - 1, this);
[BenchmarkCategory("Enumerable_Value")]
[Benchmark(Baseline = true)]
public bool Linq_Enumerable_Value()
- => Enumerable.Contains(enumerableValue, Count - 1, this);
+ => enumerableValue.Contains(Count - 1, this);
[BenchmarkCategory("Collection_Value")]
[Benchmark(Baseline = true)]
public bool Linq_Collection_Value()
- => Enumerable.Contains(collectionValue, Count - 1, this);
+ => collectionValue.Contains(Count - 1, this);
[BenchmarkCategory("List_Value")]
[Benchmark(Baseline = true)]
public bool Linq_List_Value()
- => Enumerable.Contains(listValue, Count - 1, this);
+ => listValue.Contains(Count - 1, this);
[BenchmarkCategory("AsyncEnumerable_Value")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Value()
- => AsyncEnumerable.ContainsAsync(asyncEnumerableValue, Count - 1, this);
+ => asyncEnumerableValue.ContainsAsync(Count - 1, this);
[BenchmarkCategory("Enumerable_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_Enumerable_Reference()
- => Enumerable.Contains(enumerableReference, Count - 1, this);
+ => enumerableReference.Contains(Count - 1, this);
[BenchmarkCategory("Collection_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_Collection_Reference()
- => Enumerable.Contains(collectionReference, Count - 1, this);
+ => collectionReference.Contains(Count - 1, this);
[BenchmarkCategory("List_Reference")]
[Benchmark(Baseline = true)]
public bool Linq_List_Reference()
- => Enumerable.Contains(listReference, Count - 1, this);
+ => listReference.Contains(Count - 1, this);
[BenchmarkCategory("AsyncEnumerable_Reference")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Reference()
- => AsyncEnumerable.ContainsAsync(asyncEnumerableReference, Count - 1, this);
+ => asyncEnumerableReference.ContainsAsync(Count - 1, this);
// ---------------------------------------------------------------------
[BenchmarkCategory("Array")]
[Benchmark]
public bool Hyperlinq_Array()
- => array.Contains(Count - 1, this);
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public bool Hyperlinq_Span()
- => array.AsSpan().Contains(Count - 1, this);
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public bool Hyperlinq_Memory()
- => memory.AsValueEnumerable().Contains(Count - 1, this);
+ => array.AsValueEnumerable().Contains(Count - 1, this);
[BenchmarkCategory("Enumerable_Value")]
[Benchmark]
public bool Hyperlinq_Enumerable_Value()
- => EnumerableExtensions.AsValueEnumerable(enumerableValue, enumerable => enumerable.GetEnumerator())
+ => enumerableValue.AsValueEnumerable()
.Contains(Count - 1, this);
[BenchmarkCategory("Collection_Value")]
[Benchmark]
public bool Hyperlinq_Collection_Value()
- => ReadOnlyCollectionExtensions.AsValueEnumerable(collectionValue, enumerable => enumerable.GetEnumerator())
+ => collectionValue.AsValueEnumerable()
.Contains(Count - 1, this);
[BenchmarkCategory("List_Value")]
@@ -92,6 +81,13 @@ public bool Hyperlinq_List_Value()
.AsValueEnumerable()
.Contains(Count - 1, this);
+ [BenchmarkCategory("AsyncEnumerable_Value")]
+ [Benchmark]
+ public ValueTask Hyperlinq_AsyncEnumerable_Value()
+ => asyncEnumerableValue
+ .AsAsyncValueEnumerable()
+ .ContainsAsync(Count - 1, this);
+
[BenchmarkCategory("Enumerable_Reference")]
[Benchmark]
public bool Hyperlinq_Enumerable_Reference()
@@ -113,6 +109,13 @@ public bool Hyperlinq_List_Reference()
.AsValueEnumerable()
.Contains(Count - 1, this);
+ [BenchmarkCategory("AsyncEnumerable_Reference")]
+ [Benchmark]
+ public ValueTask Hyperlinq_AsyncEnumerable_Reference()
+ => asyncEnumerableReference
+ .AsAsyncValueEnumerable()
+ .ContainsAsync(Count - 1, this);
+
// ---------------------------------------------------------------------
public bool Equals(int x, int y)
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/CountBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/CountBenchmarks.cs
index 64c86f155..42cafd441 100644
--- a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/CountBenchmarks.cs
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/CountBenchmarks.cs
@@ -1,7 +1,6 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using StructLinq;
-using System;
using System.Linq;
using System.Threading.Tasks;
@@ -14,47 +13,47 @@ public class CountBenchmarks : RandomBenchmarksBase
[BenchmarkCategory("Array")]
[Benchmark(Baseline = true)]
public int Linq_Array()
- => Enumerable.Count(array);
+ => array.Count();
[BenchmarkCategory("Enumerable_Value")]
[Benchmark(Baseline = true)]
public int Linq_Enumerable_Value()
- => Enumerable.Count(enumerableValue);
+ => enumerableValue.Count();
[BenchmarkCategory("Collection_Value")]
[Benchmark(Baseline = true)]
public int Linq_Collection_Value()
- => Enumerable.Count(collectionValue);
+ => collectionValue.Count();
[BenchmarkCategory("List_Value")]
[Benchmark(Baseline = true)]
public int Linq_List_Value()
- => Enumerable.Count(listValue);
+ => listValue.Count();
[BenchmarkCategory("AsyncEnumerable_Value")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Value()
- => AsyncEnumerable.CountAsync(asyncEnumerableValue);
+ => asyncEnumerableValue.CountAsync();
[BenchmarkCategory("Enumerable_Reference")]
[Benchmark(Baseline = true)]
public int Linq_Enumerable_Reference()
- => Enumerable.Count(enumerableReference);
+ => enumerableReference.Count();
[BenchmarkCategory("Collection_Reference")]
[Benchmark(Baseline = true)]
public int Linq_Collection_Reference()
- => Enumerable.Count(collectionReference);
+ => collectionReference.Count();
[BenchmarkCategory("List_Reference")]
[Benchmark(Baseline = true)]
public int Linq_List_Reference()
- => Enumerable.Count(listReference);
+ => listReference.Count();
[BenchmarkCategory("AsyncEnumerable_Reference")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Reference()
- => AsyncEnumerable.CountAsync(asyncEnumerableReference);
+ => asyncEnumerableReference.CountAsync();
// ---------------------------------------------------------------------
@@ -112,28 +111,22 @@ public int StructLinq_List_Reference()
[BenchmarkCategory("Array")]
[Benchmark]
public int Hyperlinq_Array()
- => array.Count();
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public int Hyperlinq_Span()
- => array.AsSpan().Count();
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public int Hyperlinq_Memory()
- => memory.AsValueEnumerable().Count();
+ => array
+ .AsValueEnumerable()
+ .Count();
[BenchmarkCategory("Enumerable_Value")]
[Benchmark]
public int Hyperlinq_Enumerable_Value()
- => EnumerableExtensions.AsValueEnumerable(enumerableValue, enumerable => enumerable.GetEnumerator())
+ => enumerableValue
+ .AsValueEnumerable()
.Count();
[BenchmarkCategory("Collection_Value")]
[Benchmark]
public int Hyperlinq_Collection_Value()
- => ReadOnlyCollectionExtensions.AsValueEnumerable(collectionValue, enumerable => enumerable.GetEnumerator())
+ => collectionValue
+ .AsValueEnumerable()
.Count();
[BenchmarkCategory("List_Value")]
@@ -147,7 +140,7 @@ public int Hyperlinq_List_Value()
[Benchmark]
public ValueTask Hyperlinq_AsyncEnumerable_Value()
=> asyncEnumerableValue
- .AsAsyncValueEnumerable((enumerable, cancellationToke) => enumerable.GetAsyncEnumerator(cancellationToke))
+ .AsAsyncValueEnumerable()
.CountAsync();
[BenchmarkCategory("Enumerable_Reference")]
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/DistinctBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/DistinctBenchmarks.cs
index 6bffda85d..ede1a3a8d 100644
--- a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/DistinctBenchmarks.cs
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/DistinctBenchmarks.cs
@@ -4,6 +4,8 @@
using System;
using System.Linq;
using System.Threading.Tasks;
+// ReSharper disable ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator
+// ReSharper disable LoopCanBeConvertedToQuery
namespace NetFabric.Hyperlinq.Benchmarks
{
@@ -16,7 +18,7 @@ public class DistinctBenchmarks : RandomBenchmarksBase
public int Linq_Array()
{
var sum = 0;
- foreach (var item in Enumerable.Distinct(array))
+ foreach (var item in array.Distinct())
sum += item;
return sum;
}
@@ -26,7 +28,7 @@ public int Linq_Array()
public int Linq_Enumerable_Value()
{
var sum = 0;
- foreach (var item in Enumerable.Distinct(enumerableValue))
+ foreach (var item in enumerableValue.Distinct())
sum += item;
return sum;
}
@@ -36,7 +38,7 @@ public int Linq_Enumerable_Value()
public int Linq_Collection_Value()
{
var sum = 0;
- foreach (var item in Enumerable.Distinct(collectionValue))
+ foreach (var item in collectionValue.Distinct())
sum += item;
return sum;
}
@@ -46,17 +48,17 @@ public int Linq_Collection_Value()
public int Linq_List_Value()
{
var sum = 0;
- foreach (var item in Enumerable.Distinct(listValue))
+ foreach (var item in listValue.Distinct())
sum += item;
return sum;
}
[BenchmarkCategory("AsyncEnumerable_Value")]
[Benchmark(Baseline = true)]
- public async Task Linq_AsyncEnumerable_Value()
+ public async ValueTask Linq_AsyncEnumerable_Value()
{
var sum = 0;
- await foreach (var item in AsyncEnumerable.Distinct(asyncEnumerableValue))
+ await foreach (var item in asyncEnumerableValue.Distinct())
sum += item;
return sum;
}
@@ -66,7 +68,7 @@ await foreach (var item in AsyncEnumerable.Distinct(asyncEnumerableValue))
public int Linq_Enumerable_Reference()
{
var sum = 0;
- foreach (var item in Enumerable.Distinct(enumerableReference))
+ foreach (var item in enumerableReference.Distinct())
sum += item;
return sum;
}
@@ -76,7 +78,7 @@ public int Linq_Enumerable_Reference()
public int Linq_Collection_Reference()
{
var sum = 0;
- foreach (var item in Enumerable.Distinct(collectionReference))
+ foreach (var item in collectionReference.Distinct())
sum += item;
return sum;
}
@@ -86,17 +88,17 @@ public int Linq_Collection_Reference()
public int Linq_List_Reference()
{
var sum = 0;
- foreach (var item in Enumerable.Distinct(listReference))
+ foreach (var item in listReference.Distinct())
sum += item;
return sum;
}
[BenchmarkCategory("AsyncEnumerable_Reference")]
[Benchmark(Baseline = true)]
- public async Task Linq_AsyncEnumerable_Reference()
+ public async ValueTask Linq_AsyncEnumerable_Reference()
{
var sum = 0;
- await foreach (var item in AsyncEnumerable.Distinct(asyncEnumerableReference))
+ await foreach (var item in asyncEnumerableReference.Distinct())
sum += item;
return sum;
}
@@ -108,7 +110,7 @@ await foreach (var item in AsyncEnumerable.Distinct(asyncEnumerableReference))
public int StructLinq_Array()
{
var sum = 0;
- foreach (var item in array.Distinct(x => x))
+ foreach (var item in array.ToStructEnumerable().Distinct(x => x))
sum += item;
return sum;
}
@@ -180,7 +182,7 @@ public int StructLinq_List_Reference()
public int Hyperlinq_Array()
{
var sum = 0;
- foreach (var item in array.Distinct())
+ foreach (var item in array.AsValueEnumerable().Distinct())
sum += item;
return sum;
}
@@ -190,7 +192,7 @@ public int Hyperlinq_Array()
public int Hyperlinq_Span()
{
var sum = 0;
- foreach (ref readonly var item in array.AsSpan().Distinct())
+ foreach (ref readonly var item in array.AsSpan().AsValueEnumerable().Distinct())
sum += item;
return sum;
}
@@ -210,7 +212,7 @@ public int Hyperlinq_Memory()
public int Hyperlinq_Enumerable_Value()
{
var sum = 0;
- foreach (var item in EnumerableExtensions.AsValueEnumerable(enumerableValue, enumerable => enumerable.GetEnumerator()).Distinct())
+ foreach (var item in enumerableValue.AsValueEnumerable().Distinct())
sum += item;
return sum;
}
@@ -220,7 +222,7 @@ public int Hyperlinq_Enumerable_Value()
public int Hyperlinq_Collection_Value()
{
var sum = 0;
- foreach (var item in ReadOnlyCollectionExtensions.AsValueEnumerable(collectionValue, enumerable => enumerable.GetEnumerator()).Distinct())
+ foreach (var item in collectionValue.AsValueEnumerable().Distinct())
sum += item;
return sum;
}
@@ -237,10 +239,12 @@ public int Hyperlinq_List_Value()
[BenchmarkCategory("AsyncEnumerable_Value")]
[Benchmark]
- public async Task Hyperlinq_AsyncEnumerable_Value()
+ public async ValueTask Hyperlinq_AsyncEnumerable_Value()
{
var sum = 0;
- await foreach (var item in asyncEnumerableValue.AsAsyncValueEnumerable((enumerable, cancellationToke) => enumerable.GetAsyncEnumerator(cancellationToke)).Distinct())
+ await foreach (var item in asyncEnumerableValue
+ .AsAsyncValueEnumerable()
+ .Distinct())
sum += item;
return sum;
}
@@ -277,7 +281,7 @@ public int Hyperlinq_List_Reference()
[BenchmarkCategory("AsyncEnumerable_Reference")]
[Benchmark]
- public async Task Hyperlinq_AsyncEnumerable_Reference()
+ public async ValueTask Hyperlinq_AsyncEnumerable_Reference()
{
var sum = 0;
await foreach (var item in asyncEnumerableReference.AsAsyncValueEnumerable().Distinct())
diff --git a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ElementAtBenchmarks.cs b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ElementAtBenchmarks.cs
index 6a12cf57f..1d525448f 100644
--- a/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ElementAtBenchmarks.cs
+++ b/NetFabric.Hyperlinq.Benchmarks/Benchmarks/ElementAtBenchmarks.cs
@@ -1,6 +1,5 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
-using System;
using System.Linq;
using System.Threading.Tasks;
@@ -13,75 +12,69 @@ public class ElementAtBenchmarks: SequentialBenchmarksBase
[BenchmarkCategory("Array")]
[Benchmark(Baseline = true)]
public int Linq_Array()
- => Enumerable.ElementAt(array, Count - 1);
+ => array.ElementAt(Count - 1);
[BenchmarkCategory("Enumerable_Value")]
[Benchmark(Baseline = true)]
public int Linq_Enumerable_Value()
- => Enumerable.ElementAt(enumerableValue, Count - 1);
+ => enumerableValue.ElementAt(Count - 1);
[BenchmarkCategory("Collection_Value")]
[Benchmark(Baseline = true)]
public int Linq_Collection_Value()
- => Enumerable.ElementAt(collectionValue, Count - 1);
+ => collectionValue.ElementAt(Count - 1);
[BenchmarkCategory("List_Value")]
[Benchmark(Baseline = true)]
public int Linq_List_Value()
- => Enumerable.ElementAt(listValue, Count - 1);
+ => listValue.ElementAt(Count - 1);
[BenchmarkCategory("AsyncEnumerable_Value")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Value()
- => AsyncEnumerable.ElementAtAsync(asyncEnumerableValue, Count - 1);
+ => asyncEnumerableValue.ElementAtAsync(Count - 1);
[BenchmarkCategory("Enumerable_Reference")]
[Benchmark(Baseline = true)]
public int Linq_Enumerable_Reference()
- => Enumerable.ElementAt(enumerableReference, Count - 1);
+ => enumerableReference.ElementAt(Count - 1);
[BenchmarkCategory("Collection_Reference")]
[Benchmark(Baseline = true)]
public int Linq_Collection_Reference()
- => Enumerable.ElementAt(collectionReference, Count - 1);
+ => collectionReference.ElementAt(Count - 1);
[BenchmarkCategory("List_Reference")]
[Benchmark(Baseline = true)]
public int Linq_List_Reference()
- => Enumerable.ElementAt(listReference, Count - 1);
+ => listReference.ElementAt(Count - 1);
[BenchmarkCategory("AsyncEnumerable_Reference")]
[Benchmark(Baseline = true)]
public ValueTask Linq_AsyncEnumerable_Reference()
- => AsyncEnumerable.ElementAtAsync(asyncEnumerableReference, Count - 1);
+ => asyncEnumerableReference.ElementAtAsync(Count - 1);
// ---------------------------------------------------------------------
[BenchmarkCategory("Array")]
[Benchmark]
public Option Hyperlinq_Array()
- => array.AsValueEnumerable().ElementAt(Count - 1);
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public Option Hyperlinq_Span()
- => array.AsSpan().ElementAt(Count - 1);
-
- [BenchmarkCategory("Array")]
- [Benchmark]
- public Option Hyperlinq_Memory()
- => memory.AsValueEnumerable().ElementAt(Count - 1);
+ => array
+ .AsValueEnumerable()
+ .ElementAt(Count - 1);
[BenchmarkCategory("Enumerable_Value")]
[Benchmark]
public Option Hyperlinq_Enumerable_Value()
- => EnumerableExtensions.AsValueEnumerable(enumerableValue, enumerable => enumerable.GetEnumerator())
+ => enumerableValue
+ .AsValueEnumerable()
.ElementAt(Count - 1);
[BenchmarkCategory("Collection_Value")]
[Benchmark]
public Option Hyperlinq_Collection_Value()
- => ReadOnlyCollectionExtensions.AsValueEnumerable(collectionValue, enumerable => enumerable.GetEnumerator())
+ => collectionValue
+ .AsValueEnumerable()
.ElementAt(Count - 1);
[BenchmarkCategory("List_Value")]
@@ -91,6 +84,13 @@ public Option Hyperlinq_List_Value()
.AsValueEnumerable()
.ElementAt(Count - 1);
+ [BenchmarkCategory("AsyncEnumerable_Value")]
+ [Benchmark]
+ public ValueTask