interoptopus_csharp 0.16.0-alpha.8

The C# backend for Interoptopus.
using System.Linq;
using My.Company;
using Xunit;
using Interop = My.Company.Interop;

public class TestArrayNested
{
    [Fact]
    public void nested_array_1()
    {
        var result = Interop.nested_array_1();
        Assert.Equal(EnumRenamed.X, result.field_enum);
        Assert.Equal(new Vec3f32
        {
            x = 1.0f,
            y = 2.0f,
            z = 3.0f
        }, result.field_vec);
        Assert.Equal(true, result.field_bool.Is);
        Assert.Equal(42, result.field_int);
        Assert.Equal(Enumerable.Range(1, 5).Select(i => (ushort)i).ToArray(), result.field_array);
        Assert.Equal(Enumerable.Range(1, 16).Select(i => (byte)i).ToArray(), result.field_struct.data);
    }

    [Fact]
    public void nested_array_2()
    {
        var result = CreateNestedArray();
        Interop.nested_array_2(ref result);
        Assert.Equal(EnumRenamed.X, result.field_enum);
        Assert.Equal(new Vec3f32
        {
            x = 1.0f,
            y = 2.0f,
            z = 3.0f
        }, result.field_vec);
        Assert.Equal(true, result.field_bool.Is);
        Assert.Equal(42, result.field_int);
        Assert.Equal(Enumerable.Range(1, 5).Select(i => (ushort)i).ToArray(), result.field_array);
        Assert.Equal(Enumerable.Range(1, 16).Select(i => (byte)i).ToArray(), result.field_struct.data);
    }

    [Fact]
    public void nested_array_3()
    {
        var result = Interop.nested_array_3(CreateNestedArray());
        Assert.Equal(2, result);
    }

    [Fact]
    public void nested_array_3_throws()
    {
        Assert.Throws<System.InvalidOperationException>(() =>
        {
            Interop.nested_array_3(new NestedArray
            {
                field_array = [1, 2, 3],
                field_struct = new Array
                {
                    data = Enumerable.Range(1, 16).Select(i => (byte)i).ToArray()
                }
            });
        });
    }

    private static NestedArray CreateNestedArray()
    {

        return new NestedArray
        {
            field_array = [1, 2, 3, 4, 5],
            field_array_2 = [1, 2, 3, 4, 5],
            field_struct = new Array
            {
                data = Enumerable.Range(1, 16).Select(i => (byte)i).ToArray()
            }
        };
    }
}