diff --git a/src/Swift.Bindings/src/Emitter/BindingsGenerator.StringCSharpEmitter.cs b/src/Swift.Bindings/src/Emitter/BindingsGenerator.StringCSharpEmitter.cs index f4a2d80ae400..4b71e577aab5 100644 --- a/src/Swift.Bindings/src/Emitter/BindingsGenerator.StringCSharpEmitter.cs +++ b/src/Swift.Bindings/src/Emitter/BindingsGenerator.StringCSharpEmitter.cs @@ -46,7 +46,7 @@ public void EmitModule(ModuleDecl moduleDecl) writer.WriteLine($"{{"); writer.Indent++; - writer.WriteLine($"public class {moduleDecl.Name} {{"); + writer.WriteLine($"public unsafe class {moduleDecl.Name} {{"); writer.Indent++; foreach (MethodDecl methodDecl in moduleDecl.Methods) diff --git a/src/Swift.Bindings/src/Parser/BindingsGenerator.SwiftABIParser.cs b/src/Swift.Bindings/src/Parser/BindingsGenerator.SwiftABIParser.cs index e37e193c3181..877ad8cc40ed 100644 --- a/src/Swift.Bindings/src/Parser/BindingsGenerator.SwiftABIParser.cs +++ b/src/Swift.Bindings/src/Parser/BindingsGenerator.SwiftABIParser.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using Newtonsoft.Json; +using Swift.Runtime; namespace BindingsGeneration { @@ -45,11 +46,13 @@ public sealed class SwiftABIParser : ISwiftParser { private readonly string _filePath; private readonly int _verbose; + private readonly TypeDatabase _typeDatabase; - public SwiftABIParser(string filePath, int verbose = 0) + public SwiftABIParser(string filePath, TypeDatabase typeDatabase, int verbose = 0) { _filePath = filePath; _verbose = verbose; + _typeDatabase = typeDatabase; } /// @@ -115,8 +118,8 @@ public MethodDecl CreateMethodDecl(Node node) new TypeDecl { Name = paramNames[i], - FullyQualifiedName = child.PrintedName == "()" ? "Void" : child.PrintedName, - IsValueType = true, + FullyQualifiedName = child.Name, + IsValueType = _typeDatabase.IsValueType(child.Name), TypeKind = TypeKind.Named }).ToList() ?? new List() }; diff --git a/src/Swift.Bindings/src/Program.cs b/src/Swift.Bindings/src/Program.cs index 1fc18aede8a1..d5706e149ca7 100644 --- a/src/Swift.Bindings/src/Program.cs +++ b/src/Swift.Bindings/src/Program.cs @@ -77,18 +77,18 @@ public static void Main(string[] args) /// Output directory for generated bindings. /// Verbosity level for logging information. public static void GenerateBindings(string swiftAbiPath, string outputDirectory, int verbose = 0) - { + { + TypeDatabase typeDatabase = new TypeDatabase(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TypeDatabase.xml")); if (verbose > 0) Console.WriteLine("Starting bindings generation..."); - ISwiftParser swiftParser = new SwiftABIParser(swiftAbiPath, verbose); + ISwiftParser swiftParser = new SwiftABIParser(swiftAbiPath, typeDatabase, verbose); var decl = swiftParser.GetModuleDecl(); if (verbose > 1) Console.WriteLine("Parsed Swift ABI file successfully."); - TypeDatabase typeDatabase = new TypeDatabase(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TypeDatabase.xml")); ICSharpEmitter csharpEmitter = new StringCSharpEmitter(outputDirectory, typeDatabase, verbose); csharpEmitter.EmitModule(decl); diff --git a/src/Swift.Bindings/tests/CMakeLists.txt b/src/Swift.Bindings/tests/CMakeLists.txt index 67df1e18a089..2236f84ff9ca 100644 --- a/src/Swift.Bindings/tests/CMakeLists.txt +++ b/src/Swift.Bindings/tests/CMakeLists.txt @@ -1,8 +1,9 @@ cmake_minimum_required(VERSION 3.24) -project(PInvokeTests) +project(SwiftTests) -set(SOURCE PInvokeTests) +# Find all Swift source files in the directory +file(GLOB SOURCES "*.swift") if (NOT SWIFT_COMPILER_TARGET) set(SWIFT_PLATFORM "macosx") @@ -16,12 +17,14 @@ if (NOT SWIFT_COMPILER_TARGET) set(SWIFT_COMPILER_TARGET "${CMAKE_OSX_ARCHITECTURES}-apple-${SWIFT_PLATFORM}${SWIFT_DEPLOYMENT_TARGET}") endif() -add_custom_target(${SOURCE} ALL - COMMAND xcrun swiftc -target ${SWIFT_COMPILER_TARGET} -emit-module -emit-library -enable-library-evolution -emit-module-interface ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}.swift -o ${CMAKE_CURRENT_BINARY_DIR}/lib${SOURCE}.dylib - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}.swift - COMMENT "Generating ${SOURCE} library" -) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${SOURCE}.dylib - DESTINATION bin -) +foreach(SOURCE_FILE ${SOURCES}) + get_filename_component(SOURCE_BASE_NAME ${SOURCE_FILE} NAME_WE) + add_custom_target(${SOURCE_BASE_NAME} ALL + COMMAND xcrun swiftc -target ${SWIFT_COMPILER_TARGET} -emit-module -emit-library -enable-library-evolution -emit-module-interface ${SOURCE_FILE} -o ${CMAKE_CURRENT_BINARY_DIR}/lib${SOURCE_BASE_NAME}.dylib + DEPENDS ${SOURCE_FILE} + COMMENT "Generating ${SOURCE_BASE_NAME} library" + ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${SOURCE_BASE_NAME}.dylib + DESTINATION bin + ) +endforeach() diff --git a/src/Swift.Bindings/tests/PInvokeTests.cs b/src/Swift.Bindings/tests/PInvokeTests.cs index b5aef2e0ad97..e28c73ddab05 100644 --- a/src/Swift.Bindings/tests/PInvokeTests.cs +++ b/src/Swift.Bindings/tests/PInvokeTests.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Xunit; -using BindingsGeneration; namespace BindingsGeneration.Tests { @@ -35,7 +34,7 @@ public static int getResult() } """; - int result = (int)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + int result = (int)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(42, result); Console.WriteLine("OK"); } @@ -67,7 +66,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-7706330218351441791, result); Console.WriteLine("OK"); } @@ -99,7 +98,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-3202601456867082324, result); Console.WriteLine("OK"); } @@ -131,7 +130,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(911474180935535301, result); Console.WriteLine("OK"); } @@ -163,7 +162,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-6350065034291914241, result); Console.WriteLine("OK"); } @@ -195,7 +194,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-9091922861563963282, result); Console.WriteLine("OK"); } @@ -227,7 +226,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-3357359150345247842, result); Console.WriteLine("OK"); } @@ -259,7 +258,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-581969692498632062, result); Console.WriteLine("OK"); } @@ -291,7 +290,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(4054341816496194551, result); Console.WriteLine("OK"); } @@ -323,7 +322,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-2147505143518021575, result); Console.WriteLine("OK"); } @@ -355,7 +354,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(3533238385513656508, result); Console.WriteLine("OK"); } @@ -387,7 +386,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(8515181823957334780, result); Console.WriteLine("OK"); } @@ -419,7 +418,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-5125817077505710853, result); Console.WriteLine("OK"); } @@ -451,7 +450,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(4774074602111830179, result); Console.WriteLine("OK"); } @@ -483,7 +482,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(8686515529117439727, result); Console.WriteLine("OK"); } @@ -515,7 +514,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(1430703777921650146, result); Console.WriteLine("OK"); } @@ -547,7 +546,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(7324810059718518437, result); Console.WriteLine("OK"); } @@ -579,7 +578,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-2322427926688559587, result); Console.WriteLine("OK"); } @@ -611,7 +610,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-5704419938581148490, result); Console.WriteLine("OK"); } @@ -643,7 +642,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-7333181440701096551, result); Console.WriteLine("OK"); } @@ -675,7 +674,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-7514368921355633465, result); Console.WriteLine("OK"); } @@ -707,7 +706,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(4347999520285809529, result); Console.WriteLine("OK"); } @@ -739,7 +738,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(9056719667499044372, result); Console.WriteLine("OK"); } @@ -771,7 +770,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(2450837469650376012, result); Console.WriteLine("OK"); } @@ -803,7 +802,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-6077835106866375633, result); Console.WriteLine("OK"); } @@ -835,7 +834,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-7246961535839287248, result); Console.WriteLine("OK"); } @@ -867,7 +866,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(4681650148273269479, result); Console.WriteLine("OK"); } @@ -899,7 +898,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-7896710633380101536, result); Console.WriteLine("OK"); } @@ -931,7 +930,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-2413801917489038945, result); Console.WriteLine("OK"); } @@ -963,7 +962,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-5115695744450024635, result); Console.WriteLine("OK"); } @@ -995,7 +994,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(7218188220935660367, result); Console.WriteLine("OK"); } @@ -1027,7 +1026,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(3303407505715961682, result); Console.WriteLine("OK"); } @@ -1059,7 +1058,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(6926745355509484660, result); Console.WriteLine("OK"); } @@ -1091,7 +1090,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8134759728697468421, result); Console.WriteLine("OK"); } @@ -1123,7 +1122,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8926062754575499112, result); Console.WriteLine("OK"); } @@ -1155,7 +1154,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(3916199453627741495, result); Console.WriteLine("OK"); } @@ -1187,7 +1186,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(4225631615746848021, result); Console.WriteLine("OK"); } @@ -1219,7 +1218,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(9029057458451328084, result); Console.WriteLine("OK"); } @@ -1251,7 +1250,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(9091326884382848930, result); Console.WriteLine("OK"); } @@ -1283,7 +1282,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(2966780901945169708, result); Console.WriteLine("OK"); } @@ -1315,7 +1314,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-7464446680392812994, result); Console.WriteLine("OK"); } @@ -1347,7 +1346,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-3563617050423332895, result); Console.WriteLine("OK"); } @@ -1379,7 +1378,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-2569382956498289470, result); Console.WriteLine("OK"); } @@ -1411,7 +1410,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-1108582741386924293, result); Console.WriteLine("OK"); } @@ -1443,7 +1442,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-5808479907339934850, result); Console.WriteLine("OK"); } @@ -1475,7 +1474,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-234686925954875908, result); Console.WriteLine("OK"); } @@ -1507,7 +1506,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-9083497234002976264, result); Console.WriteLine("OK"); } @@ -1539,7 +1538,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-7467754277704703568, result); Console.WriteLine("OK"); } @@ -1571,7 +1570,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(7149358155385248658, result); Console.WriteLine("OK"); } @@ -1603,7 +1602,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8590814201057560160, result); Console.WriteLine("OK"); } @@ -1635,7 +1634,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(739011484971652047, result); Console.WriteLine("OK"); } @@ -1667,7 +1666,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(3055246540243887734, result); Console.WriteLine("OK"); } @@ -1699,7 +1698,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(7917142179400080853, result); Console.WriteLine("OK"); } @@ -1731,7 +1730,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8118257769004209257, result); Console.WriteLine("OK"); } @@ -1763,7 +1762,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(9075957082830800153, result); Console.WriteLine("OK"); } @@ -1795,7 +1794,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(715458900514912094, result); Console.WriteLine("OK"); } @@ -1827,7 +1826,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-7812796314477300904, result); Console.WriteLine("OK"); } @@ -1859,7 +1858,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-3660123537755587162, result); Console.WriteLine("OK"); } @@ -1891,7 +1890,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8830493546874923270, result); Console.WriteLine("OK"); } @@ -1923,7 +1922,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(6514055640091085387, result); Console.WriteLine("OK"); } @@ -1955,7 +1954,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(5046324847209516867, result); Console.WriteLine("OK"); } @@ -1987,7 +1986,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8176066941526010601, result); Console.WriteLine("OK"); } @@ -2019,7 +2018,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8047185703659702100, result); Console.WriteLine("OK"); } @@ -2051,7 +2050,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(6758416630263865563, result); Console.WriteLine("OK"); } @@ -2083,7 +2082,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-24765264996518815, result); Console.WriteLine("OK"); } @@ -2115,7 +2114,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(4496411701938139124, result); Console.WriteLine("OK"); } @@ -2147,7 +2146,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(7620356050748244213, result); Console.WriteLine("OK"); } @@ -2179,7 +2178,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-6837183037573462724, result); Console.WriteLine("OK"); } @@ -2211,7 +2210,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(3965211134150981679, result); Console.WriteLine("OK"); } @@ -2243,7 +2242,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(8645187640386338150, result); Console.WriteLine("OK"); } @@ -2275,7 +2274,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-2766546132850174765, result); Console.WriteLine("OK"); } @@ -2307,7 +2306,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-6730251310408327023, result); Console.WriteLine("OK"); } @@ -2339,7 +2338,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-4761426221194945322, result); Console.WriteLine("OK"); } @@ -2371,7 +2370,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(8722701469163367659, result); Console.WriteLine("OK"); } @@ -2403,7 +2402,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(9091436234605144348, result); Console.WriteLine("OK"); } @@ -2435,7 +2434,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-4564195959279673945, result); Console.WriteLine("OK"); } @@ -2467,7 +2466,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-3369734987080453648, result); Console.WriteLine("OK"); } @@ -2499,7 +2498,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8920640767423704440, result); Console.WriteLine("OK"); } @@ -2531,7 +2530,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(6960169366615671879, result); Console.WriteLine("OK"); } @@ -2563,7 +2562,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(4812301631028745377, result); Console.WriteLine("OK"); } @@ -2595,7 +2594,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(693619259694162127, result); Console.WriteLine("OK"); } @@ -2627,7 +2626,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-4631030647197364647, result); Console.WriteLine("OK"); } @@ -2659,7 +2658,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8908581242517107527, result); Console.WriteLine("OK"); } @@ -2691,7 +2690,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-1543576629977717704, result); Console.WriteLine("OK"); } @@ -2723,7 +2722,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-4161389211393419243, result); Console.WriteLine("OK"); } @@ -2755,7 +2754,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(8984640578940854556, result); Console.WriteLine("OK"); } @@ -2787,7 +2786,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-5603269280984392717, result); Console.WriteLine("OK"); } @@ -2819,7 +2818,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-756030944410084256, result); Console.WriteLine("OK"); } @@ -2851,7 +2850,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(3151224756940080953, result); Console.WriteLine("OK"); } @@ -2883,7 +2882,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(3274371447309987255, result); Console.WriteLine("OK"); } @@ -2915,7 +2914,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-737269134554333880, result); Console.WriteLine("OK"); } @@ -2947,7 +2946,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(3441802633846719073, result); Console.WriteLine("OK"); } @@ -2979,7 +2978,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(711186144202003795, result); Console.WriteLine("OK"); } @@ -3011,7 +3010,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(9206890599465525240, result); Console.WriteLine("OK"); } @@ -3043,7 +3042,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(7367909694938381646, result); Console.WriteLine("OK"); } @@ -3075,7 +3074,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(7957085466204676840, result); Console.WriteLine("OK"); } @@ -3107,7 +3106,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-8941275780625427292, result); Console.WriteLine("OK"); } @@ -3139,7 +3138,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(2083246537822351760, result); Console.WriteLine("OK"); } @@ -3171,7 +3170,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(8647824177212049859, result); Console.WriteLine("OK"); } @@ -3203,7 +3202,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(7040925530630314472, result); Console.WriteLine("OK"); } @@ -3235,7 +3234,7 @@ public static long getResult() } """; - long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult"); + long result = (long)TestsHelper.CompileAndExecute("PInvokeTestsBindings.cs", sourceCode, "Test.MainClass", "getResult", new object[] { }); Assert.Equal(-7883825139759684683, result); Console.WriteLine("OK"); } diff --git a/src/Swift.Bindings/tests/Swift.Bindings.Tests.csproj b/src/Swift.Bindings/tests/Swift.Bindings.Tests.csproj index 4aec57a80d4d..e56cdfc0613c 100644 --- a/src/Swift.Bindings/tests/Swift.Bindings.Tests.csproj +++ b/src/Swift.Bindings/tests/Swift.Bindings.Tests.csproj @@ -11,6 +11,9 @@ + + PreserveNewest + diff --git a/src/Swift.Bindings/tests/TestsHelper.cs b/src/Swift.Bindings/tests/TestsHelper.cs index cbb41c4e9193..3a4ec609510e 100644 --- a/src/Swift.Bindings/tests/TestsHelper.cs +++ b/src/Swift.Bindings/tests/TestsHelper.cs @@ -11,24 +11,26 @@ namespace BindingsGeneration.Tests public static class TestsHelper { private static int uniqueId = 0; - public static object CompileAndExecute(string filePath, string sourceCode, string typeName, string methodName) + public static object CompileAndExecute(string filePath, string sourceCode, string typeName, string methodName, object[] args) { string fileSourceCode = File.ReadAllText(filePath); var sourceCodes = new[] { fileSourceCode, sourceCode }; - return CompileAndExecute(sourceCodes, typeName, methodName); + return CompileAndExecute(sourceCodes, typeName, methodName, args); } - private static object CompileAndExecute(string[] sourceCodes, string typeName, string methodName) + private static object CompileAndExecute(string[] sourceCodes, string typeName, string methodName, object[] args) { - var options = new CSharpCompilationOptions(OutputKind.ConsoleApplication); + var options = new CSharpCompilationOptions(OutputKind.ConsoleApplication, allowUnsafe: true); var syntaxTrees = sourceCodes.Select(code => CSharpSyntaxTree.ParseText(code)).ToArray(); var systemRuntimeAssemblyPath = Assembly.Load("System.Runtime").Location; + var systemSecurityCryptographyAssemblyPath = Assembly.Load("System.Security.Cryptography").Location; var references = new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location), MetadataReference.CreateFromFile(typeof(Console).Assembly.Location), MetadataReference.CreateFromFile(systemRuntimeAssemblyPath), + MetadataReference.CreateFromFile(systemSecurityCryptographyAssemblyPath), }; @@ -54,9 +56,9 @@ private static object CompileAndExecute(string[] sourceCodes, string typeName, s } Assembly compiledAssembly = Assembly.LoadFile(assemblyPath); - Type targetType = compiledAssembly.GetType("Test.MainClass"); + Type targetType = compiledAssembly.GetType(typeName); MethodInfo customMethod = targetType.GetMethod(methodName); - return customMethod.Invoke(null, new object[] { }); + return customMethod.Invoke(null, args); } } } diff --git a/src/Swift.Bindings/tests/UnsafeRawPointerTests.cs b/src/Swift.Bindings/tests/UnsafeRawPointerTests.cs new file mode 100644 index 000000000000..78b77b84159b --- /dev/null +++ b/src/Swift.Bindings/tests/UnsafeRawPointerTests.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using Xunit; + +namespace BindingsGeneration.Tests +{ + public class UnsafeRawPointerTests + { + [Fact] + public static void TestUnsafeRawPointerCryptoKit() + { + BindingsGenerator.GenerateBindings("UnsafeRawPointerTests.abi.json", ""); + + string filePath = "UnsafeRawPointerTests.cs.template"; + string sourceCode = File.ReadAllText(filePath); + + int result = (int)TestsHelper.CompileAndExecute("UnsafeRawPointerTestsBindings.cs", sourceCode, "Test.MainClass", "Main", new object [] { new string[0] }); + Assert.Equal(1, result); + } + } +} diff --git a/src/Swift.Bindings/tests/UnsafeRawPointerTests.cs.template b/src/Swift.Bindings/tests/UnsafeRawPointerTests.cs.template new file mode 100644 index 000000000000..9ce6415d2f19 --- /dev/null +++ b/src/Swift.Bindings/tests/UnsafeRawPointerTests.cs.template @@ -0,0 +1,127 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; +using UnsafeRawPointerTestsBindings; +using System.Diagnostics; +using System.Security.Cryptography; + +namespace Test +{ + public class MainClass + { + public static int Main(string[] args) + { + byte[] key = RandomNumberGenerator.GetBytes(32); // Generate a 256-bit key + byte[] nonce = RandomNumberGenerator.GetBytes(12); // Generate a 96-bit nonce + byte[] plaintext = System.Text.Encoding.UTF8.GetBytes("Hello, World!"); + byte[] aad = System.Text.Encoding.UTF8.GetBytes("Additional Authenticated Data"); + + byte[] ciphertext = new byte[plaintext.Length]; + byte[] tag = new byte[16]; // ChaCha20Poly1305 tag size + Console.WriteLine($"Plaintext: {BitConverter.ToString(plaintext)}"); + + ChaCha20Poly1305Encrypt( + key, + nonce, + plaintext, + ciphertext, + tag, + aad); + + Console.WriteLine($"Ciphertext: {BitConverter.ToString(ciphertext)}"); + Console.WriteLine($"Tag: {BitConverter.ToString(tag)}"); + + Array.Clear(plaintext, 0, plaintext.Length); + + ChaCha20Poly1305Decrypt( + key, + nonce, + ciphertext, + tag, + plaintext, + aad + ); + + string decryptedMessage = System.Text.Encoding.UTF8.GetString(plaintext); + Console.WriteLine($"Decrypted: {decryptedMessage}"); + return "Hello, World!" == decryptedMessage ? 1 : 0; + } + + internal static unsafe void ChaCha20Poly1305Encrypt( + ReadOnlySpan key, + ReadOnlySpan nonce, + ReadOnlySpan plaintext, + Span ciphertext, + Span tag, + ReadOnlySpan aad) + { + fixed (void* keyPtr = key) + fixed (void* noncePtr = nonce) + fixed (void* plaintextPtr = plaintext) + fixed (void* ciphertextPtr = ciphertext) + fixed (void* tagPtr = tag) + fixed (void* aadPtr = aad) + { + const int Success = 1; + + int result = UnsafeRawPointerTests.AppleCryptoNative_ChaCha20Poly1305Encrypt( + keyPtr, key.Length, + noncePtr, nonce.Length, + plaintextPtr, plaintext.Length, + ciphertextPtr, ciphertext.Length, + tagPtr, tag.Length, + aadPtr, aad.Length); + + if (result != Success) + { + Debug.Assert(result == 0); + Console.WriteLine("Encryption failed"); + } + } + } + + internal static unsafe void ChaCha20Poly1305Decrypt( + ReadOnlySpan key, + ReadOnlySpan nonce, + ReadOnlySpan ciphertext, + ReadOnlySpan tag, + Span plaintext, + ReadOnlySpan aad) + { + fixed (byte* keyPtr = key) + fixed (byte* noncePtr = nonce) + fixed (byte* ciphertextPtr = ciphertext) + fixed (byte* tagPtr = tag) + fixed (byte* plaintextPtr = plaintext) + fixed (byte* aadPtr = aad) + { + const int Success = 1; + const int AuthTagMismatch = -1; + + int result = UnsafeRawPointerTests.AppleCryptoNative_ChaCha20Poly1305Decrypt( + keyPtr, key.Length, + noncePtr, nonce.Length, + ciphertextPtr, ciphertext.Length, + tagPtr, tag.Length, + plaintextPtr, plaintext.Length, + aadPtr, aad.Length); + + if (result != Success) + { + CryptographicOperations.ZeroMemory(plaintext); + + if (result == AuthTagMismatch) + { + throw new AuthenticationTagMismatchException(); + } + else + { + Debug.Assert(result == 0); + throw new CryptographicException(); + } + } + } + } + } +} diff --git a/src/Swift.Bindings/tests/UnsafeRawPointerTests.swift b/src/Swift.Bindings/tests/UnsafeRawPointerTests.swift new file mode 100644 index 000000000000..7a063f0f915e --- /dev/null +++ b/src/Swift.Bindings/tests/UnsafeRawPointerTests.swift @@ -0,0 +1,85 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import CryptoKit +import Foundation + +public func AppleCryptoNative_ChaCha20Poly1305Encrypt( + keyPtr: UnsafeMutableRawPointer, + keyLength: Int32, + noncePtr: UnsafeMutableRawPointer, + nonceLength: Int32, + plaintextPtr: UnsafeMutableRawPointer, + plaintextLength: Int32, + ciphertextPtr: UnsafeMutablePointer, + ciphertextPtrLength: Int32, + tagPtr: UnsafeMutablePointer, + tagPtrLength: Int32, + aadPtr: UnsafeMutableRawPointer, + aadLength: Int32 + ) -> Int32 { + let nonceData = Data(bytesNoCopy: noncePtr, count: Int(nonceLength), deallocator: Data.Deallocator.none) + let key = Data(bytesNoCopy: keyPtr, count: Int(keyLength), deallocator: Data.Deallocator.none) + let plaintext = Data(bytesNoCopy: plaintextPtr, count: Int(plaintextLength), deallocator: Data.Deallocator.none) + let aad = Data(bytesNoCopy: aadPtr, count: Int(aadLength), deallocator: Data.Deallocator.none) + let symmetricKey = SymmetricKey(data: key) + + guard let nonce = try? ChaChaPoly.Nonce(data: nonceData) else { + return 0 + } + + guard let result = try? ChaChaPoly.seal(plaintext, using: symmetricKey, nonce: nonce, authenticating: aad) else { + return 0 + } + + assert(ciphertextPtrLength >= result.ciphertext.count) + assert(tagPtrLength >= result.tag.count) + + result.ciphertext.copyBytes(to: ciphertextPtr, count: result.ciphertext.count) + result.tag.copyBytes(to: tagPtr, count: result.tag.count) + return 1 + } + +public func AppleCryptoNative_ChaCha20Poly1305Decrypt( + keyPtr: UnsafeMutableRawPointer, + keyLength: Int32, + noncePtr: UnsafeMutableRawPointer, + nonceLength: Int32, + ciphertextPtr: UnsafeMutableRawPointer, + ciphertextLength: Int32, + tagPtr: UnsafeMutableRawPointer, + tagLength: Int32, + plaintextPtr: UnsafeMutablePointer, + plaintextPtrLength: Int32, + aadPtr: UnsafeMutableRawPointer, + aadLength: Int32 +) -> Int32 { + let nonceData = Data(bytesNoCopy: noncePtr, count: Int(nonceLength), deallocator: Data.Deallocator.none) + let key = Data(bytesNoCopy: keyPtr, count: Int(keyLength), deallocator: Data.Deallocator.none) + let ciphertext = Data(bytesNoCopy: ciphertextPtr, count: Int(ciphertextLength), deallocator: Data.Deallocator.none) + let aad = Data(bytesNoCopy: aadPtr, count: Int(aadLength), deallocator: Data.Deallocator.none) + let tag = Data(bytesNoCopy: tagPtr, count: Int(tagLength), deallocator: Data.Deallocator.none) + let symmetricKey = SymmetricKey(data: key) + + guard let nonce = try? ChaChaPoly.Nonce(data: nonceData) else { + return 0 + } + + guard let sealedBox = try? ChaChaPoly.SealedBox(nonce: nonce, ciphertext: ciphertext, tag: tag) else { + return 0 + } + + do { + let result = try ChaChaPoly.open(sealedBox, using: symmetricKey, authenticating: aad) + + assert(plaintextPtrLength >= result.count) + result.copyBytes(to: plaintextPtr, count: result.count) + return 1 + } + catch CryptoKitError.authenticationFailure { + return -1 + } + catch { + return 0 + } +} diff --git a/src/Swift.Runtime/src/TypeDatabase.cs b/src/Swift.Runtime/src/TypeDatabase.cs index db34c466c1f6..38845266488f 100644 --- a/src/Swift.Runtime/src/TypeDatabase.cs +++ b/src/Swift.Runtime/src/TypeDatabase.cs @@ -109,5 +109,15 @@ public string GetCSharpName(string swiftName) } throw new Exception($"No mapping for {swiftName} found in the type database."); } + + /// + /// Checks if a Swift type name corresponds to a known C# value type. + /// + /// The Swift type name. + /// true if the Swift type name maps to a C# value type; otherwise false. + public bool IsValueType(string swiftName) + { + return _swiftToCSharpMapping.TryGetValue(swiftName, out string? csharpName); + } } } diff --git a/src/Swift.Runtime/src/TypeDatabase.xml b/src/Swift.Runtime/src/TypeDatabase.xml index 73eefdb7d779..2edf1febfa78 100644 --- a/src/Swift.Runtime/src/TypeDatabase.xml +++ b/src/Swift.Runtime/src/TypeDatabase.xml @@ -2,49 +2,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + + + + + + +