diff --git a/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.Test2.verified.txt b/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.Test2.verified.txt new file mode 100644 index 0000000000..418aebd8f6 --- /dev/null +++ b/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.Test2.verified.txt @@ -0,0 +1,22 @@ + + +/* -------------------------- NEW OUTPUT -------------------------- */ + +namespace LIBRARY_NAMESPACE +{ +public struct vec2 +{ + public float x; + public float y; +} +public struct vec3 +{ + public vec2 Base; + public float z; +} +public struct vec4 +{ + public vec3 Base; + public float w; +} +} diff --git a/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.Test4.verified.txt b/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.Test4.verified.txt new file mode 100644 index 0000000000..a2f605c911 --- /dev/null +++ b/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.Test4.verified.txt @@ -0,0 +1,15 @@ + + +/* -------------------------- NEW OUTPUT -------------------------- */ + +namespace LIBRARY_NAMESPACE +{ +public struct x +{ + public y* p; +} +public struct y +{ + public x* q; +} +} diff --git a/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.cs b/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.cs index 7bb82fbc33..cbd62345cc 100644 --- a/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.cs +++ b/tests/Silk.NET.SilkTouch.IntegrationTests/StructIntegrationTests.cs @@ -22,4 +22,96 @@ typedef struct { } Test;"); return Verifier.Verify(result); } + + [Fact] + public Task Test2() + { + var result = TestHelper.GetCSharpOutputFromCpp(@" +struct vec2 { float x, y; }; +struct vec3 : vec2 { float z; }; +struct vec4 : vec3 { float w; };"); + return Verifier.Verify(result); + } + + [Fact(Skip = "Union Support")] + public Task Test3() + { + // from https://en.cppreference.com/w/c/language/struct + var result = TestHelper.GetCSharpOutputFromCpp(@" +struct v { + union { // anonymous union + struct { int i, j; }; // anonymous structure + struct { long k, l; } w; + }; + int m; +} v1;"); + return Verifier.Verify(result); + } + + [Fact] + public Task Test4() + { + // from https://en.cppreference.com/w/c/language/struct + var result = TestHelper.GetCSharpOutputFromCpp(@" +struct y; +struct x { struct y *p; /* ... */ }; +struct y { struct x *q; /* ... */ };"); + return Verifier.Verify(result); + } + + [Fact(Skip = "Union Support")] + public Task Test5() + { + // from https://en.cppreference.com/w/cpp/language/union + var result = TestHelper.GetCSharpOutputFromCpp(@" +#include +#include +union S +{ + std::int32_t n; // occupies 4 bytes + std::uint16_t s[2]; // occupies 4 bytes + std::uint8_t c; // occupies 1 byte +}; "); + return Verifier.Verify(result); + } + + [Fact(Skip = "Union Support")] + public Task Test6() + { + // from https://en.cppreference.com/w/cpp/language/union + var result = TestHelper.GetCSharpOutputFromCpp(@" +#include +#include +#include + +union S +{ + std::string str; + std::vector vec; + ~S() {} // needs to know which member is active, only possible in union-like class +}; // the whole union occupies max(sizeof(string), sizeof(vector))"); + return Verifier.Verify(result); + } + + [Fact(Skip = "Union Support, Enum Support")] + public Task Test7() + { + // from https://en.cppreference.com/w/cpp/language/union + var result = TestHelper.GetCSharpOutputFromCpp(@" +#include + +// S has one non-static data member (tag), three enumerator members (CHAR, INT, DOUBLE), +// and three variant members (c, i, d) +struct S +{ + enum{CHAR, INT, DOUBLE} tag; + union + { + char c; + int i; + double d; + }; +};"); + return Verifier.Verify(result); + } }