mirror of https://github.com/microsoft/autogen.git
131 lines
3.6 KiB
C#
131 lines
3.6 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// FunctionExample.test.cs
|
|
|
|
using System.Text.Json;
|
|
using ApprovalTests;
|
|
using ApprovalTests.Namers;
|
|
using ApprovalTests.Reporters;
|
|
using AutoGen.OpenAI.Extension;
|
|
using FluentAssertions;
|
|
using OpenAI.Chat;
|
|
using Xunit;
|
|
|
|
namespace AutoGen.SourceGenerator.Tests;
|
|
|
|
public class FunctionExample
|
|
{
|
|
private readonly FunctionExamples functionExamples = new FunctionExamples();
|
|
private readonly JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions
|
|
{
|
|
WriteIndented = true,
|
|
};
|
|
|
|
[Fact]
|
|
public void Add_Test()
|
|
{
|
|
var args = new
|
|
{
|
|
a = 1,
|
|
b = 2,
|
|
};
|
|
|
|
this.VerifyFunction(functionExamples.AddWrapper, args, 3);
|
|
this.VerifyFunctionDefinition(functionExamples.AddFunctionContract.ToChatTool());
|
|
}
|
|
|
|
[Fact]
|
|
public void Sum_Test()
|
|
{
|
|
var args = new
|
|
{
|
|
args = new double[] { 1, 2, 3 },
|
|
};
|
|
|
|
this.VerifyFunction(functionExamples.SumWrapper, args, 6.0);
|
|
this.VerifyFunctionDefinition(functionExamples.SumFunctionContract.ToChatTool());
|
|
}
|
|
|
|
[Fact]
|
|
public async Task DictionaryToString_Test()
|
|
{
|
|
var args = new
|
|
{
|
|
xargs = new Dictionary<string, string>
|
|
{
|
|
{ "a", "1" },
|
|
{ "b", "2" },
|
|
},
|
|
};
|
|
|
|
await this.VerifyAsyncFunction(functionExamples.DictionaryToStringAsyncWrapper, args, JsonSerializer.Serialize(args.xargs, jsonSerializerOptions));
|
|
this.VerifyFunctionDefinition(functionExamples.DictionaryToStringAsyncFunctionContract.ToChatTool());
|
|
}
|
|
|
|
[Fact]
|
|
public async Task TopLevelFunctionExampleAddTestAsync()
|
|
{
|
|
var example = new TopLevelStatementFunctionExample();
|
|
var args = new
|
|
{
|
|
a = 1,
|
|
b = 2,
|
|
};
|
|
|
|
await this.VerifyAsyncFunction(example.AddWrapper, args, "3");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task FilescopeFunctionExampleAddTestAsync()
|
|
{
|
|
var example = new FilescopeNamespaceFunctionExample();
|
|
var args = new
|
|
{
|
|
a = 1,
|
|
b = 2,
|
|
};
|
|
|
|
await this.VerifyAsyncFunction(example.AddWrapper, args, "3");
|
|
}
|
|
|
|
[Fact]
|
|
public void Query_Test()
|
|
{
|
|
var args = new
|
|
{
|
|
query = "hello",
|
|
k = 3,
|
|
};
|
|
|
|
this.VerifyFunction(functionExamples.QueryWrapper, args, new[] { "hello", "hello", "hello" });
|
|
this.VerifyFunctionDefinition(functionExamples.QueryFunctionContract.ToChatTool());
|
|
}
|
|
|
|
[UseReporter(typeof(DiffReporter))]
|
|
[UseApprovalSubdirectory("ApprovalTests")]
|
|
private void VerifyFunctionDefinition(ChatTool function)
|
|
{
|
|
var func = new
|
|
{
|
|
name = function.FunctionName,
|
|
description = function.FunctionDescription.Replace(Environment.NewLine, ","),
|
|
parameters = function.FunctionParameters.ToObjectFromJson<object>(options: jsonSerializerOptions),
|
|
};
|
|
|
|
Approvals.Verify(JsonSerializer.Serialize(func, jsonSerializerOptions));
|
|
}
|
|
|
|
private void VerifyFunction<T, U>(Func<string, T> func, U args, T expected)
|
|
{
|
|
var str = JsonSerializer.Serialize(args, jsonSerializerOptions);
|
|
var res = func(str);
|
|
res.Should().BeEquivalentTo(expected);
|
|
}
|
|
|
|
private async Task VerifyAsyncFunction<T, U>(Func<string, Task<T>> func, U args, T expected)
|
|
{
|
|
var str = JsonSerializer.Serialize(args, jsonSerializerOptions);
|
|
var res = await func(str);
|
|
res.Should().BeEquivalentTo(expected);
|
|
}
|
|
}
|