diff options
Diffstat (limited to 'test cases/swift')
28 files changed, 178 insertions, 3 deletions
diff --git a/test cases/swift/11 mixed cpp/main.swift b/test cases/swift/11 mixed cpp/main.swift new file mode 100644 index 0000000..c055dcd --- /dev/null +++ b/test cases/swift/11 mixed cpp/main.swift @@ -0,0 +1,6 @@ +testCallFromSwift() +testCallWithParam("Calling C++ function from Swift with param is working") + +var test = Test() +var testtwo = Test(1) +test.testCallFromClass() diff --git a/test cases/swift/11 mixed cpp/meson.build b/test cases/swift/11 mixed cpp/meson.build new file mode 100644 index 0000000..6027341 --- /dev/null +++ b/test cases/swift/11 mixed cpp/meson.build @@ -0,0 +1,12 @@ +project('mixed cpp', 'cpp', 'swift') + +swiftc = meson.get_compiler('swift') + +# Testing C++ and Swift interoperability requires Swift 5.9 +if not swiftc.version().version_compare('>= 5.9') + error('MESON_SKIP_TEST Test requires Swift 5.9') +endif + +lib = static_library('mylib', 'mylib.cpp') +exe = executable('prog', 'main.swift', 'mylib.h', link_with: lib, swift_interoperability_mode: 'cpp') +test('cpp interface', exe) diff --git a/test cases/swift/11 mixed cpp/mylib.cpp b/test cases/swift/11 mixed cpp/mylib.cpp new file mode 100644 index 0000000..0c61681 --- /dev/null +++ b/test cases/swift/11 mixed cpp/mylib.cpp @@ -0,0 +1,22 @@ +#include "mylib.h" +#include <iostream> + +Test::Test() { + std::cout << "Test initialized" << std::endl; +} + +Test::Test(int param) { + std::cout << "Test initialized with param " << param << std::endl; +} + +void Test::testCallFromClass() { + std::cout << "Calling C++ class function from Swift is working" << std::endl; +} + +void testCallFromSwift() { + std::cout << "Calling this C++ function from Swift is working" << std::endl; +} + +void testCallWithParam(const std::string ¶m) { + std::cout << param << std::endl; +} diff --git a/test cases/swift/11 mixed cpp/mylib.h b/test cases/swift/11 mixed cpp/mylib.h new file mode 100644 index 0000000..c465be4 --- /dev/null +++ b/test cases/swift/11 mixed cpp/mylib.h @@ -0,0 +1,13 @@ +#pragma once +#include <string> + +class Test { +public: + Test(); + Test(int param); + + void testCallFromClass(); +}; + +void testCallFromSwift(); +void testCallWithParam(const std::string ¶m); diff --git a/test cases/swift/12 c std passthrough/header.h b/test cases/swift/12 c std passthrough/header.h new file mode 100644 index 0000000..287cdf4 --- /dev/null +++ b/test cases/swift/12 c std passthrough/header.h @@ -0,0 +1,10 @@ +#pragma once + +// let's just assume the default isn't c18. +#if __STDC_VERSION__ == 201710L +typedef struct Datatype { + int x; +} Datatype; +#else +#error C standard version not set! +#endif diff --git a/test cases/swift/12 c std passthrough/main.swift b/test cases/swift/12 c std passthrough/main.swift new file mode 100644 index 0000000..f6358db --- /dev/null +++ b/test cases/swift/12 c std passthrough/main.swift @@ -0,0 +1,3 @@ +let d = Datatype(x: 1) + +precondition(d.x == 1) diff --git a/test cases/swift/12 c std passthrough/meson.build b/test cases/swift/12 c std passthrough/meson.build new file mode 100644 index 0000000..202768f --- /dev/null +++ b/test cases/swift/12 c std passthrough/meson.build @@ -0,0 +1,3 @@ +project('c std passthrough', 'swift', 'c', default_options: {'c_std': 'c18'}) + +executable('program', 'main.swift', 'header.h') diff --git a/test cases/swift/13 mixed objcpp/main.swift b/test cases/swift/13 mixed objcpp/main.swift new file mode 100644 index 0000000..cd6dd2b --- /dev/null +++ b/test cases/swift/13 mixed objcpp/main.swift @@ -0,0 +1,2 @@ +var test: ObjCPPTest = ObjCPPTest() +test.testCallToObjCPP() diff --git a/test cases/swift/13 mixed objcpp/meson.build b/test cases/swift/13 mixed objcpp/meson.build new file mode 100644 index 0000000..a76162a --- /dev/null +++ b/test cases/swift/13 mixed objcpp/meson.build @@ -0,0 +1,12 @@ +project('mixed objcpp', 'objcpp', 'swift') + +swiftc = meson.get_compiler('swift') + +# Testing Objective-C++ and Swift interoperability requires Swift 5.9 +if not swiftc.version().version_compare('>= 5.9') + error('MESON_SKIP_TEST Test requires Swift 5.9') +endif + +lib = static_library('mylib', 'mylib.mm') +exe = executable('prog', 'main.swift', 'mylib.h', link_with: lib, swift_interoperability_mode: 'cpp') +test('objcpp interface', exe) diff --git a/test cases/swift/13 mixed objcpp/mylib.h b/test cases/swift/13 mixed objcpp/mylib.h new file mode 100644 index 0000000..1e7b23d --- /dev/null +++ b/test cases/swift/13 mixed objcpp/mylib.h @@ -0,0 +1,17 @@ +#pragma once +#import <Foundation/Foundation.h> + +class Test { +public: + Test(); + + void testCallFromClass(); +}; + +@interface ObjCPPTest: NSObject { + @private Test *test; +} +- (id)init; +- (void)dealloc; +- (void)testCallToObjCPP; +@end diff --git a/test cases/swift/13 mixed objcpp/mylib.mm b/test cases/swift/13 mixed objcpp/mylib.mm new file mode 100644 index 0000000..f7e9ab3 --- /dev/null +++ b/test cases/swift/13 mixed objcpp/mylib.mm @@ -0,0 +1,29 @@ +#include "mylib.h" +#include <iostream> + +Test::Test() { + std::cout << "Test initialized" << std::endl; +} + +void Test::testCallFromClass() { + std::cout << "Calling Objective-C++ class function from Swift is working" << std::endl; +} + +@implementation ObjCPPTest +- (id)init { + self = [super init]; + if (self) { + test = new Test(); + } + return self; +} + +- (void)dealloc { + delete test; + [super dealloc]; +} + +- (void)testCallToObjCPP { + test->testCallFromClass(); +} +@end diff --git a/test cases/swift/14 single-file library/main.swift b/test cases/swift/14 single-file library/main.swift new file mode 100644 index 0000000..ccc8fb9 --- /dev/null +++ b/test cases/swift/14 single-file library/main.swift @@ -0,0 +1,3 @@ +import SingleFile + +callMe() diff --git a/test cases/swift/14 single-file library/meson.build b/test cases/swift/14 single-file library/meson.build new file mode 100644 index 0000000..8eda1d5 --- /dev/null +++ b/test cases/swift/14 single-file library/meson.build @@ -0,0 +1,4 @@ +project('single-file library', 'swift') + +lib = static_library('SingleFile', 'singlefile.swift') +executable('program', 'main.swift', link_with: [lib]) diff --git a/test cases/swift/14 single-file library/singlefile.swift b/test cases/swift/14 single-file library/singlefile.swift new file mode 100644 index 0000000..617952f --- /dev/null +++ b/test cases/swift/14 single-file library/singlefile.swift @@ -0,0 +1 @@ +public func callMe() {} diff --git a/test cases/swift/15 main in single-file library/main.swift b/test cases/swift/15 main in single-file library/main.swift new file mode 100644 index 0000000..0d95abb --- /dev/null +++ b/test cases/swift/15 main in single-file library/main.swift @@ -0,0 +1,3 @@ +import CProgram + +precondition(callMe() == 4) diff --git a/test cases/swift/15 main in single-file library/meson.build b/test cases/swift/15 main in single-file library/meson.build new file mode 100644 index 0000000..2e1202e --- /dev/null +++ b/test cases/swift/15 main in single-file library/meson.build @@ -0,0 +1,4 @@ +project('main in single-file library', 'swift', 'c') + +lib = static_library('Library', 'main.swift', include_directories: ['.']) +executable('program', 'program.c', link_with: [lib]) diff --git a/test cases/swift/15 main in single-file library/module.modulemap b/test cases/swift/15 main in single-file library/module.modulemap new file mode 100644 index 0000000..3c1817a --- /dev/null +++ b/test cases/swift/15 main in single-file library/module.modulemap @@ -0,0 +1,3 @@ +module CProgram [extern_c] { + header "program.h" +} diff --git a/test cases/swift/15 main in single-file library/program.c b/test cases/swift/15 main in single-file library/program.c new file mode 100644 index 0000000..8959dae --- /dev/null +++ b/test cases/swift/15 main in single-file library/program.c @@ -0,0 +1,5 @@ +#include "program.h" + +int callMe() { + return 4; +} diff --git a/test cases/swift/15 main in single-file library/program.h b/test cases/swift/15 main in single-file library/program.h new file mode 100644 index 0000000..5058be3 --- /dev/null +++ b/test cases/swift/15 main in single-file library/program.h @@ -0,0 +1 @@ +int callMe(void); diff --git a/test cases/swift/16 main in multi-file library/main.swift b/test cases/swift/16 main in multi-file library/main.swift new file mode 100644 index 0000000..3682e8d --- /dev/null +++ b/test cases/swift/16 main in multi-file library/main.swift @@ -0,0 +1,4 @@ +import CProgram + +precondition(callMe() == 4) +precondition(callMe2() == 6) diff --git a/test cases/swift/16 main in multi-file library/meson.build b/test cases/swift/16 main in multi-file library/meson.build new file mode 100644 index 0000000..4d287f3 --- /dev/null +++ b/test cases/swift/16 main in multi-file library/meson.build @@ -0,0 +1,4 @@ +project('main in multi-file library', 'swift', 'c') + +lib = static_library('Library', 'main.swift', 'more.swift', include_directories: ['.']) +executable('program', 'program.c', link_with: [lib]) diff --git a/test cases/swift/16 main in multi-file library/module.modulemap b/test cases/swift/16 main in multi-file library/module.modulemap new file mode 100644 index 0000000..3c1817a --- /dev/null +++ b/test cases/swift/16 main in multi-file library/module.modulemap @@ -0,0 +1,3 @@ +module CProgram [extern_c] { + header "program.h" +} diff --git a/test cases/swift/16 main in multi-file library/more.swift b/test cases/swift/16 main in multi-file library/more.swift new file mode 100644 index 0000000..716500f --- /dev/null +++ b/test cases/swift/16 main in multi-file library/more.swift @@ -0,0 +1,3 @@ +func callMe2() -> Int { + 6 +} diff --git a/test cases/swift/16 main in multi-file library/program.c b/test cases/swift/16 main in multi-file library/program.c new file mode 100644 index 0000000..8959dae --- /dev/null +++ b/test cases/swift/16 main in multi-file library/program.c @@ -0,0 +1,5 @@ +#include "program.h" + +int callMe() { + return 4; +} diff --git a/test cases/swift/16 main in multi-file library/program.h b/test cases/swift/16 main in multi-file library/program.h new file mode 100644 index 0000000..5058be3 --- /dev/null +++ b/test cases/swift/16 main in multi-file library/program.h @@ -0,0 +1 @@ +int callMe(void); diff --git a/test cases/swift/8 extra args/lib.swift b/test cases/swift/8 extra args/lib.swift new file mode 100644 index 0000000..f8167ad --- /dev/null +++ b/test cases/swift/8 extra args/lib.swift @@ -0,0 +1,3 @@ +public func callMe() { + print("test") +} diff --git a/test cases/swift/8 extra args/main.swift b/test cases/swift/8 extra args/main.swift deleted file mode 100644 index 1ff8e07..0000000 --- a/test cases/swift/8 extra args/main.swift +++ /dev/null @@ -1 +0,0 @@ -print("test") diff --git a/test cases/swift/8 extra args/meson.build b/test cases/swift/8 extra args/meson.build index ead2ff5..d243e36 100644 --- a/test cases/swift/8 extra args/meson.build +++ b/test cases/swift/8 extra args/meson.build @@ -2,8 +2,8 @@ project('extra args', 'swift') trace_fname = 'trace.json' -lib = static_library('main', - 'main.swift', +lib = static_library('lib', + 'lib.swift', swift_args: [ '-emit-loaded-module-trace', '-emit-loaded-module-trace-path', '../' + trace_fname |