From f84e5def6f3ed00ffb92d85cbd564231bb5bb264 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 30 Sep 2025 20:47:00 +0000 Subject: [PATCH 1/6] Initial plan From 8ff3d23513aa3ce8f2582d0771be43f97b84a14e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 30 Sep 2025 20:53:43 +0000 Subject: [PATCH 2/6] Add DeviceAuthorization field to OpenApiOAuthFlows with v3.2 support and v3.1/v3.0 extension Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> --- .../Models/OpenApiConstants.cs | 5 +++++ .../Models/OpenApiOAuthFlows.cs | 22 +++++++++++++++++++ .../V3/OpenApiOAuthFlowsDeserializer.cs | 1 + .../V31/OpenApiOAuthFlowsDeserializer.cs | 1 + .../V32/OpenApiOAuthFlowsDeserializer.cs | 3 ++- 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiConstants.cs b/src/Microsoft.OpenApi/Models/OpenApiConstants.cs index f79a6374c..d5c37d3d4 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiConstants.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiConstants.cs @@ -560,6 +560,11 @@ public static class OpenApiConstants /// public const string AuthorizationCode = "authorizationCode"; + /// + /// Field: DeviceAuthorization + /// + public const string DeviceAuthorization = "deviceAuthorization"; + /// /// Field: AuthorizationUrl /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs index 42c9cf935..a83670f39 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs @@ -31,6 +31,11 @@ public class OpenApiOAuthFlows : IOpenApiSerializable, IOpenApiExtensible /// public OpenApiOAuthFlow? AuthorizationCode { get; set; } + /// + /// Configuration for the OAuth Device Authorization flow. + /// + public OpenApiOAuthFlow? DeviceAuthorization { get; set; } + /// /// Specification Extensions. /// @@ -51,6 +56,7 @@ public OpenApiOAuthFlows(OpenApiOAuthFlows oAuthFlows) Password = oAuthFlows?.Password != null ? new(oAuthFlows.Password) : null; ClientCredentials = oAuthFlows?.ClientCredentials != null ? new(oAuthFlows.ClientCredentials) : null; AuthorizationCode = oAuthFlows?.AuthorizationCode != null ? new(oAuthFlows.AuthorizationCode) : null; + DeviceAuthorization = oAuthFlows?.DeviceAuthorization != null ? new(oAuthFlows.DeviceAuthorization) : null; Extensions = oAuthFlows?.Extensions != null ? new Dictionary(oAuthFlows.Extensions) : null; } @@ -106,6 +112,22 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version AuthorizationCode, callback); + // deviceAuthorization - only for v3.2+, otherwise as extension + if (version >= OpenApiSpecVersion.OpenApi3_2) + { + writer.WriteOptionalObject( + OpenApiConstants.DeviceAuthorization, + DeviceAuthorization, + callback); + } + else if (DeviceAuthorization is not null) + { + writer.WriteOptionalObject( + OpenApiConstants.ExtensionFieldNamePrefix + "oai-" + OpenApiConstants.DeviceAuthorization, + DeviceAuthorization, + callback); + } + // extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowsDeserializer.cs index 895a1225c..7c62177c0 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiOAuthFlowsDeserializer.cs @@ -23,6 +23,7 @@ internal static partial class OpenApiV3Deserializer private static readonly PatternFieldMap _oAuthFlowsPatternFields = new() { + {s => s.Equals("x-oai-deviceAuthorization", StringComparison.OrdinalIgnoreCase), (o, p, n, t) => o.DeviceAuthorization = LoadOAuthFlow(n, t)}, {s => s.StartsWith(OpenApiConstants.ExtensionFieldNamePrefix, StringComparison.OrdinalIgnoreCase), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowsDeserializer.cs index ea8444f1a..fd37a4032 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiOAuthFlowsDeserializer.cs @@ -20,6 +20,7 @@ internal static partial class OpenApiV31Deserializer private static readonly PatternFieldMap _oAuthFlowsPatternFields = new() { + {s => s.Equals("x-oai-deviceAuthorization", StringComparison.OrdinalIgnoreCase), (o, p, n, t) => o.DeviceAuthorization = LoadOAuthFlow(n, t)}, {s => s.StartsWith(OpenApiConstants.ExtensionFieldNamePrefix, StringComparison.OrdinalIgnoreCase), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))} }; diff --git a/src/Microsoft.OpenApi/Reader/V32/OpenApiOAuthFlowsDeserializer.cs b/src/Microsoft.OpenApi/Reader/V32/OpenApiOAuthFlowsDeserializer.cs index e6071400a..99f0fafca 100644 --- a/src/Microsoft.OpenApi/Reader/V32/OpenApiOAuthFlowsDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V32/OpenApiOAuthFlowsDeserializer.cs @@ -14,7 +14,8 @@ internal static partial class OpenApiV32Deserializer {"implicit", (o, n, t) => o.Implicit = LoadOAuthFlow(n, t)}, {"password", (o, n, t) => o.Password = LoadOAuthFlow(n, t)}, {"clientCredentials", (o, n, t) => o.ClientCredentials = LoadOAuthFlow(n, t)}, - {"authorizationCode", (o, n, t) => o.AuthorizationCode = LoadOAuthFlow(n, t)} + {"authorizationCode", (o, n, t) => o.AuthorizationCode = LoadOAuthFlow(n, t)}, + {"deviceAuthorization", (o, n, t) => o.DeviceAuthorization = LoadOAuthFlow(n, t)} }; private static readonly PatternFieldMap _oAuthFlowsPatternFields = From a2e7ef2125895044ad83487dfdacefe02a968669 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 30 Sep 2025 21:03:29 +0000 Subject: [PATCH 3/6] Add tests for DeviceAuthorization serialization and update public API Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> --- .../Models/OpenApiOAuthFlowsTests.cs | 95 +++++++++++++++++++ .../PublicApi/PublicApi.approved.txt | 2 + 2 files changed, 97 insertions(+) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs index 2b423e48a..f0b6af2b9 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs @@ -48,6 +48,20 @@ public class OpenApiOAuthFlowsTests } }; + public static OpenApiOAuthFlows OAuthFlowsWithDeviceAuthorization = new() + { + DeviceAuthorization = new() + { + TokenUrl = new("http://example.com/token"), + RefreshUrl = new("http://example.com/refresh"), + Scopes = new Dictionary + { + ["scopeName1"] = "description1", + ["scopeName2"] = "description2" + } + } + }; + [Fact] public async Task SerializeBasicOAuthFlowsAsV3JsonWorks() { @@ -139,5 +153,86 @@ public async Task SerializeOAuthFlowsWithMultipleFlowsAsV3JsonWorks() expected = expected.MakeLineBreaksEnvironmentNeutral(); Assert.Equal(expected, actual); } + + [Fact] + public async Task SerializeOAuthFlowsWithDeviceAuthorizationAsV32JsonWorks() + { + // Arrange + var expected = + """ + { + "deviceAuthorization": { + "tokenUrl": "http://example.com/token", + "refreshUrl": "http://example.com/refresh", + "scopes": { + "scopeName1": "description1", + "scopeName2": "description2" + } + } + } + """; + + // Act + var actual = await OAuthFlowsWithDeviceAuthorization.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_2); + + // Assert + actual = actual.MakeLineBreaksEnvironmentNeutral(); + expected = expected.MakeLineBreaksEnvironmentNeutral(); + Assert.Equal(expected, actual); + } + + [Fact] + public async Task SerializeOAuthFlowsWithDeviceAuthorizationAsV31JsonWorks() + { + // Arrange + var expected = + """ + { + "x-oai-deviceAuthorization": { + "tokenUrl": "http://example.com/token", + "refreshUrl": "http://example.com/refresh", + "scopes": { + "scopeName1": "description1", + "scopeName2": "description2" + } + } + } + """; + + // Act + var actual = await OAuthFlowsWithDeviceAuthorization.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1); + + // Assert + actual = actual.MakeLineBreaksEnvironmentNeutral(); + expected = expected.MakeLineBreaksEnvironmentNeutral(); + Assert.Equal(expected, actual); + } + + [Fact] + public async Task SerializeOAuthFlowsWithDeviceAuthorizationAsV3JsonWorks() + { + // Arrange + var expected = + """ + { + "x-oai-deviceAuthorization": { + "tokenUrl": "http://example.com/token", + "refreshUrl": "http://example.com/refresh", + "scopes": { + "scopeName1": "description1", + "scopeName2": "description2" + } + } + } + """; + + // Act + var actual = await OAuthFlowsWithDeviceAuthorization.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); + + // Assert + actual = actual.MakeLineBreaksEnvironmentNeutral(); + expected = expected.MakeLineBreaksEnvironmentNeutral(); + Assert.Equal(expected, actual); + } } } diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index f19136fe9..a26e3650f 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -454,6 +454,7 @@ namespace Microsoft.OpenApi public const string DependentRequired = "dependentRequired"; public const string Deprecated = "deprecated"; public const string Description = "description"; + public const string DeviceAuthorization = "deviceAuthorization"; public const string Discriminator = "discriminator"; public const string DollarRef = "$ref"; public const string DollarSchema = "$schema"; @@ -927,6 +928,7 @@ namespace Microsoft.OpenApi public OpenApiOAuthFlows(Microsoft.OpenApi.OpenApiOAuthFlows oAuthFlows) { } public Microsoft.OpenApi.OpenApiOAuthFlow? AuthorizationCode { get; set; } public Microsoft.OpenApi.OpenApiOAuthFlow? ClientCredentials { get; set; } + public Microsoft.OpenApi.OpenApiOAuthFlow? DeviceAuthorization { get; set; } public System.Collections.Generic.IDictionary? Extensions { get; set; } public Microsoft.OpenApi.OpenApiOAuthFlow? Implicit { get; set; } public Microsoft.OpenApi.OpenApiOAuthFlow? Password { get; set; } From 126c86fe19efa211001822856007c4e3062e2bf6 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 30 Sep 2025 21:24:56 -0400 Subject: [PATCH 4/6] chore: adds missing import --- test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs index f0b6af2b9..bc102681e 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System.Collections.Generic; +using System.Text.Json.Nodes; using System.Threading.Tasks; using Xunit; From f6a7b9e82c49edcd8b437133b8d3ad635d9bcf81 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 30 Sep 2025 21:25:51 -0400 Subject: [PATCH 5/6] Apply suggestions from code review --- .../Models/OpenApiOAuthFlowsTests.cs | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs index bc102681e..cba2e1c93 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOAuthFlowsTests.cs @@ -177,9 +177,7 @@ public async Task SerializeOAuthFlowsWithDeviceAuthorizationAsV32JsonWorks() var actual = await OAuthFlowsWithDeviceAuthorization.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_2); // Assert - actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - Assert.Equal(expected, actual); + Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expected), JsonNode.Parse(actual))); } [Fact] @@ -204,9 +202,7 @@ public async Task SerializeOAuthFlowsWithDeviceAuthorizationAsV31JsonWorks() var actual = await OAuthFlowsWithDeviceAuthorization.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1); // Assert - actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - Assert.Equal(expected, actual); + Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expected), JsonNode.Parse(actual))); } [Fact] @@ -231,9 +227,7 @@ public async Task SerializeOAuthFlowsWithDeviceAuthorizationAsV3JsonWorks() var actual = await OAuthFlowsWithDeviceAuthorization.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0); // Assert - actual = actual.MakeLineBreaksEnvironmentNeutral(); - expected = expected.MakeLineBreaksEnvironmentNeutral(); - Assert.Equal(expected, actual); + Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expected), JsonNode.Parse(actual))); } } } From 434cfc092454b10c1c22abca75eaf4101ebe1656 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 1 Oct 2025 08:34:51 -0400 Subject: [PATCH 6/6] chore: updates benchmark results --- .../performance.Descriptions-report-github.md | 12 ++-- .../performance.Descriptions-report.csv | 8 +-- .../performance.Descriptions-report.html | 12 ++-- .../performance.Descriptions-report.json | 2 +- .../performance.EmptyModels-report-github.md | 60 +++++++++---------- .../performance.EmptyModels-report.csv | 56 ++++++++--------- .../performance.EmptyModels-report.html | 58 +++++++++--------- .../performance.EmptyModels-report.json | 2 +- 8 files changed, 105 insertions(+), 105 deletions(-) diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md index ba4ba6917..92580f7a6 100644 --- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md +++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md @@ -10,9 +10,9 @@ Job=ShortRun IterationCount=3 LaunchCount=1 WarmupCount=3 ``` -| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | -|------------- |-------------:|------------:|------------:|-----------:|-----------:|----------:|-------------:| -| PetStoreYaml | 442.4 μs | 110.3 μs | 6.05 μs | 62.5000 | 11.7188 | - | 387.38 KB | -| PetStoreJson | 199.5 μs | 106.8 μs | 5.85 μs | 40.0391 | 8.7891 | - | 249.52 KB | -| GHESYaml | 959,128.1 μs | 77,233.5 μs | 4,233.43 μs | 66000.0000 | 22000.0000 | 4000.0000 | 384512.09 KB | -| GHESJson | 459,066.4 μs | 43,160.0 μs | 2,365.75 μs | 40000.0000 | 16000.0000 | 3000.0000 | 245982.3 KB | +| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | +|------------- |-------------:|-------------:|-------------:|-----------:|-----------:|----------:|-------------:| +| PetStoreYaml | 439.2 μs | 322.1 μs | 17.65 μs | 62.5000 | 11.7188 | - | 387.38 KB | +| PetStoreJson | 197.7 μs | 181.5 μs | 9.95 μs | 40.0391 | 8.7891 | - | 249.52 KB | +| GHESYaml | 912,587.8 μs | 748,677.7 μs | 41,037.55 μs | 66000.0000 | 22000.0000 | 4000.0000 | 384511.62 KB | +| GHESJson | 476,268.8 μs | 199,447.2 μs | 10,932.38 μs | 40000.0000 | 16000.0000 | 3000.0000 | 245982.3 KB | diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv index bc3e80912..77b5a12cf 100644 --- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv +++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv @@ -1,5 +1,5 @@ Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Gen0,Gen1,Gen2,Allocated -PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,442.4 μs,110.3 μs,6.05 μs,62.5000,11.7188,0.0000,387.38 KB -PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,199.5 μs,106.8 μs,5.85 μs,40.0391,8.7891,0.0000,249.52 KB -GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"959,128.1 μs","77,233.5 μs","4,233.43 μs",66000.0000,22000.0000,4000.0000,384512.09 KB -GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"459,066.4 μs","43,160.0 μs","2,365.75 μs",40000.0000,16000.0000,3000.0000,245982.3 KB +PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,439.2 μs,322.1 μs,17.65 μs,62.5000,11.7188,0.0000,387.38 KB +PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,197.7 μs,181.5 μs,9.95 μs,40.0391,8.7891,0.0000,249.52 KB +GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"912,587.8 μs","748,677.7 μs","41,037.55 μs",66000.0000,22000.0000,4000.0000,384511.62 KB +GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"476,268.8 μs","199,447.2 μs","10,932.38 μs",40000.0000,16000.0000,3000.0000,245982.3 KB diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html index d62f414ac..b887f40f0 100644 --- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html +++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html @@ -2,7 +2,7 @@ -performance.Descriptions-20250930-170442 +performance.Descriptions-20251001-082523