| File: ChatCompletion\ReasoningOptionsTests.cs | Web Access |
| Project: src\test\Libraries\Microsoft.Extensions.AI.Abstractions.Tests\Microsoft.Extensions.AI.Abstractions.Tests.csproj (Microsoft.Extensions.AI.Abstractions.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.Json; using Xunit; namespace Microsoft.Extensions.AI; public class ReasoningOptionsTests { [Fact] public void Constructor_Default_PropertiesAreNull() { ReasoningOptions options = new(); Assert.Null(options.Effort); Assert.Null(options.Output); } [Theory] [InlineData(ReasoningEffort.None)] [InlineData(ReasoningEffort.Low)] [InlineData(ReasoningEffort.Medium)] [InlineData(ReasoningEffort.High)] [InlineData(ReasoningEffort.ExtraHigh)] public void Effort_Roundtrips(ReasoningEffort effort) { ReasoningOptions options = new() { Effort = effort }; Assert.Equal(effort, options.Effort); } [Theory] [InlineData(ReasoningOutput.None)] [InlineData(ReasoningOutput.Summary)] [InlineData(ReasoningOutput.Full)] public void Output_Roundtrips(ReasoningOutput output) { ReasoningOptions options = new() { Output = output }; Assert.Equal(output, options.Output); } [Fact] public void JsonSerialization_Roundtrips() { ReasoningOptions options = new() { Effort = ReasoningEffort.High, Output = ReasoningOutput.Full, }; string json = JsonSerializer.Serialize(options, TestJsonSerializerContext.Default.ReasoningOptions); ReasoningOptions? deserialized = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.ReasoningOptions); Assert.NotNull(deserialized); Assert.Equal(options.Effort, deserialized.Effort); Assert.Equal(options.Output, deserialized.Output); } [Fact] public void JsonSerialization_NullProperties_Roundtrips() { ReasoningOptions options = new(); string json = JsonSerializer.Serialize(options, TestJsonSerializerContext.Default.ReasoningOptions); ReasoningOptions? deserialized = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.ReasoningOptions); Assert.NotNull(deserialized); Assert.Null(deserialized.Effort); Assert.Null(deserialized.Output); } [Fact] public void JsonSerialization_EffortOnly_Roundtrips() { ReasoningOptions options = new() { Effort = ReasoningEffort.Medium }; string json = JsonSerializer.Serialize(options, TestJsonSerializerContext.Default.ReasoningOptions); ReasoningOptions? deserialized = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.ReasoningOptions); Assert.NotNull(deserialized); Assert.Equal(ReasoningEffort.Medium, deserialized.Effort); Assert.Null(deserialized.Output); } [Fact] public void JsonSerialization_OutputOnly_Roundtrips() { ReasoningOptions options = new() { Output = ReasoningOutput.Summary }; string json = JsonSerializer.Serialize(options, TestJsonSerializerContext.Default.ReasoningOptions); ReasoningOptions? deserialized = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.ReasoningOptions); Assert.NotNull(deserialized); Assert.Null(deserialized.Effort); Assert.Equal(ReasoningOutput.Summary, deserialized.Output); } [Fact] public void JsonSerialization_AllEffortValues_SerializeAsStrings() { // Test all ReasoningEffort values serialize correctly foreach (ReasoningEffort effort in new[] { ReasoningEffort.None, ReasoningEffort.Low, ReasoningEffort.Medium, ReasoningEffort.High, ReasoningEffort.ExtraHigh }) { string json = JsonSerializer.Serialize(effort, TestJsonSerializerContext.Default.ReasoningEffort); ReasoningEffort? deserialized = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.ReasoningEffort); Assert.Equal(effort, deserialized); } } [Fact] public void JsonSerialization_AllOutputValues_SerializeAsStrings() { // Test all ReasoningOutput values serialize correctly foreach (ReasoningOutput output in new[] { ReasoningOutput.None, ReasoningOutput.Summary, ReasoningOutput.Full }) { string json = JsonSerializer.Serialize(output, TestJsonSerializerContext.Default.ReasoningOutput); ReasoningOutput? deserialized = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.ReasoningOutput); Assert.Equal(output, deserialized); } } }