WrapAsList debug

This commit is contained in:
melekhin
2026-06-10 16:05:42 +07:00
parent e1fffb1e94
commit dfdee6450a
7 changed files with 1641 additions and 1184 deletions

View File

@@ -1,10 +1,4 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Text;
using System.Collections.Immutable;
using System.Linq;
using System.Text;
namespace G;
namespace G;
[Generator]
public class TestsGenerator : IIncrementalGenerator
@@ -67,8 +61,7 @@ public class TestsGenerator : IIncrementalGenerator
var typeName = type.Name;
var propName = baseProp.Name;
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_SystemTextJson_SerializeDeserialize()");
sb.AppendLine($" [Fact] public void {typeName}_SystemTextJson_SerializeDeserialize()");
sb.AppendLine($" {{");
sb.AppendLine($" var original = {typeName}.{propName};");
sb.AppendLine($" var json = System.Text.Json.JsonSerializer.Serialize(original);");
@@ -76,8 +69,7 @@ public class TestsGenerator : IIncrementalGenerator
sb.AppendLine($" Assert.Equal((double)original, (double)deserialized, Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_NewtonsoftJson_SerializeDeserialize()");
sb.AppendLine($" [Fact] public void {typeName}_NewtonsoftJson_SerializeDeserialize()");
sb.AppendLine($" {{");
sb.AppendLine($" var original = {typeName}.{propName};");
sb.AppendLine($" var json = Newtonsoft.Json.JsonConvert.SerializeObject(original);");
@@ -198,8 +190,7 @@ public class TestsGenerator : IIncrementalGenerator
expectedExpr = $"(double)left {op.OperatorSymbol} (double)right";
}
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {testName}()");
sb.AppendLine($" [Fact] public void {testName}()");
sb.AppendLine($" {{");
sb.AppendLine($" var left = {leftTypeName}.{leftProp};");
sb.AppendLine($" var right = {rightTypeName}.{rightProp};");
@@ -236,6 +227,8 @@ public class TestsGenerator : IIncrementalGenerator
sb.AppendLine(" public class CollectionTests");
sb.AppendLine(" {");
sb.AppendLine(" private const double Tolerance = 1e-12;");
sb.AppendLine(" private const double scalar = 9d;");
sb.AppendLine(" private static double[] dArray = new double[] { 5d, 3d };");
sb.AppendLine();
foreach (var type in types)
@@ -247,15 +240,13 @@ public class TestsGenerator : IIncrementalGenerator
string propName = baseProp.Name;
// Создаём массив из двух тестовых значений
sb.AppendLine($" private {typeName}[] {typeName}_GetTestArray() => {typeName}.{propName}.Mul(new double[] {{ 5d, 3d }});");
sb.AppendLine($" private {typeName}[] {typeName}_GetTestArray() => {typeName}.{propName} * dArray;");
sb.AppendLine();
// ========== Multiply ==========
// scalar * array
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Multiply_ScalarByArray_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Multiply_ScalarByArray_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var arr = {typeName}_GetTestArray();");
sb.AppendLine($" var result = scalar.Mul(arr);");
sb.AppendLine($" Assert.Equal(2, result.Length);");
@@ -264,10 +255,8 @@ public class TestsGenerator : IIncrementalGenerator
sb.AppendLine($" }}");
sb.AppendLine();
// array * scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Multiply_ArrayByScalar_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Multiply_ArrayByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var arr = {typeName}_GetTestArray();");
sb.AppendLine($" var result = arr.Mul(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Length);");
@@ -276,273 +265,109 @@ public class TestsGenerator : IIncrementalGenerator
sb.AppendLine($" }}");
sb.AppendLine();
// scalar * List
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Multiply_ScalarByList_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Multiply_ScalarByList_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var list = {typeName}_GetTestArray().ToList();");
sb.AppendLine($" var result = scalar.Mul(list);");
sb.AppendLine($" Assert.Equal(2, result.Count);");
sb.AppendLine($" var count = result.Count;");
sb.AppendLine($" Assert.Equal(2, count);");
sb.AppendLine($" Assert.Equal(scalar * 5d, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal(scalar * 3d, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// List * scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Multiply_ListByScalar_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Multiply_ListByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var list = {typeName}_GetTestArray().ToList();");
sb.AppendLine($" var result = list.Mul(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Count);");
sb.AppendLine($" var count = result.Count;");
sb.AppendLine($" Assert.Equal(2, count);");
sb.AppendLine($" Assert.Equal(scalar * 5d, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal(scalar * 3d, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// scalar * IEnumerable
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Multiply_ScalarByEnumerable_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Multiply_ScalarByEnumerable_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var enumerable = {typeName}_GetTestArray().AsEnumerable();");
sb.AppendLine($" var result = scalar.Mul(enumerable);");
sb.AppendLine($" Assert.Equal(2, result.Count());");
sb.AppendLine($" Assert.Equal((double)scalar * (double)scalar, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar * (double)scalar, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" Assert.Equal(scalar * 5d, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal(scalar * 3d, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// IEnumerable * scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Multiply_EnumerableByScalar_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Multiply_EnumerableByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var enumerable = {typeName}_GetTestArray().AsEnumerable();");
sb.AppendLine($" var result = enumerable.Mul(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Count());");
sb.AppendLine($" Assert.Equal((double)scalar * (double)scalar, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar * (double)scalar, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" Assert.Equal(scalar * 5d, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal(scalar * 3d, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// ========== Divide ==========
// scalar / array
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Divide_ScalarByArray_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Divide_ScalarByArray_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var arr = {typeName}_GetTestArray();");
sb.AppendLine($" var result = scalar.Div(arr);");
sb.AppendLine($" Assert.Equal(2, result.Length);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" Assert.Equal(scalar / 5d, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal(scalar / 3d, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// array / scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Divide_ArrayByScalar_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Divide_ArrayByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var arr = {typeName}_GetTestArray();");
sb.AppendLine($" var result = arr.Div(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Length);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" Assert.Equal(5d / scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal(3d / scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// scalar / List
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Divide_ScalarByList_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Divide_ScalarByList_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var list = {typeName}_GetTestArray().ToList();");
sb.AppendLine($" var result = scalar.Div(list);");
sb.AppendLine($" Assert.Equal(2, result.Count);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" var count = result.Count;");
sb.AppendLine($" Assert.Equal(2, count);");
sb.AppendLine($" Assert.Equal(scalar / 5d, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal(scalar / 3d, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// List / scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Divide_ListByScalar_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Divide_ListByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var list = {typeName}_GetTestArray().ToList();");
sb.AppendLine($" var result = list.Div(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Count);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" var count = result.Count;");
sb.AppendLine($" Assert.Equal(2, count);");
sb.AppendLine($" Assert.Equal(5d / scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal(3d / scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// scalar / IEnumerable
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Divide_ScalarByEnumerable_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Divide_ScalarByEnumerable_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var enumerable = {typeName}_GetTestArray().AsEnumerable();");
sb.AppendLine($" var result = scalar.Div(enumerable);");
sb.AppendLine($" Assert.Equal(2, result.Count());");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" Assert.Equal(scalar / 5d, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal(scalar / 3d, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// IEnumerable / scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Divide_EnumerableByScalar_Works()");
sb.AppendLine($" [Fact] public void {typeName}_Divide_EnumerableByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var enumerable = {typeName}_GetTestArray().AsEnumerable();");
sb.AppendLine($" var result = enumerable.Div(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Count());");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar / (double)scalar, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// ========== Plus ==========
// scalar + array
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Plus_ScalarByArray_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var arr = {typeName}_GetTestArray();");
sb.AppendLine($" var result = scalar.Plus(arr);");
sb.AppendLine($" Assert.Equal(2, result.Length);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// array + scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Plus_ArrayByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var arr = {typeName}_GetTestArray();");
sb.AppendLine($" var result = arr.Plus(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Length);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// scalar + List
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Plus_ScalarByList_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var list = {typeName}_GetTestArray().ToList();");
sb.AppendLine($" var result = scalar.Plus(list);");
sb.AppendLine($" Assert.Equal(2, result.Count);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// List + scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Plus_ListByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var list = {typeName}_GetTestArray().ToList();");
sb.AppendLine($" var result = list.Plus(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Count);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// scalar + IEnumerable
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Plus_ScalarByEnumerable_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var enumerable = {typeName}_GetTestArray().AsEnumerable();");
sb.AppendLine($" var result = scalar.Plus(enumerable);");
sb.AppendLine($" Assert.Equal(2, result.Count());");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// IEnumerable + scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Plus_EnumerableByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var enumerable = {typeName}_GetTestArray().AsEnumerable();");
sb.AppendLine($" var result = enumerable.Plus(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Count());");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar + (double)scalar, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// ========== Minus ==========
// scalar - array
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Minus_ScalarByArray_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var arr = {typeName}_GetTestArray();");
sb.AppendLine($" var result = scalar.Minus(arr);");
sb.AppendLine($" Assert.Equal(2, result.Length);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// array - scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Minus_ArrayByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var arr = {typeName}_GetTestArray();");
sb.AppendLine($" var result = arr.Minus(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Length);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// scalar - List
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Minus_ScalarByList_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var list = {typeName}_GetTestArray().ToList();");
sb.AppendLine($" var result = scalar.Minus(list);");
sb.AppendLine($" Assert.Equal(2, result.Count);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// List - scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Minus_ListByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var list = {typeName}_GetTestArray().ToList();");
sb.AppendLine($" var result = list.Minus(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Count);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result[0], Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result[1], Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// scalar - IEnumerable
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Minus_ScalarByEnumerable_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var enumerable = {typeName}_GetTestArray().AsEnumerable();");
sb.AppendLine($" var result = scalar.Minus(enumerable);");
sb.AppendLine($" Assert.Equal(2, result.Count());");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
// IEnumerable - scalar
sb.AppendLine($" [Fact]");
sb.AppendLine($" public void {typeName}_Minus_EnumerableByScalar_Works()");
sb.AppendLine($" {{");
sb.AppendLine($" var scalar = 9d;");
sb.AppendLine($" var enumerable = {typeName}_GetTestArray().AsEnumerable();");
sb.AppendLine($" var result = enumerable.Minus(scalar);");
sb.AppendLine($" Assert.Equal(2, result.Count());");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal((double)scalar - (double)scalar, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" Assert.Equal(5d / scalar, (double)result.ElementAt(0), Tolerance);");
sb.AppendLine($" Assert.Equal(3d / scalar, (double)result.ElementAt(1), Tolerance);");
sb.AppendLine($" }}");
sb.AppendLine();
}