aboutsummaryrefslogtreecommitdiff
path: root/test cases/swift
diff options
context:
space:
mode:
Diffstat (limited to 'test cases/swift')
-rw-r--r--test cases/swift/11 mixed cpp/main.swift6
-rw-r--r--test cases/swift/11 mixed cpp/meson.build12
-rw-r--r--test cases/swift/11 mixed cpp/mylib.cpp22
-rw-r--r--test cases/swift/11 mixed cpp/mylib.h13
-rw-r--r--test cases/swift/12 c std passthrough/header.h10
-rw-r--r--test cases/swift/12 c std passthrough/main.swift3
-rw-r--r--test cases/swift/12 c std passthrough/meson.build3
-rw-r--r--test cases/swift/13 mixed objcpp/main.swift2
-rw-r--r--test cases/swift/13 mixed objcpp/meson.build12
-rw-r--r--test cases/swift/13 mixed objcpp/mylib.h17
-rw-r--r--test cases/swift/13 mixed objcpp/mylib.mm29
-rw-r--r--test cases/swift/14 single-file library/main.swift3
-rw-r--r--test cases/swift/14 single-file library/meson.build4
-rw-r--r--test cases/swift/14 single-file library/singlefile.swift1
-rw-r--r--test cases/swift/15 main in single-file library/main.swift3
-rw-r--r--test cases/swift/15 main in single-file library/meson.build4
-rw-r--r--test cases/swift/15 main in single-file library/module.modulemap3
-rw-r--r--test cases/swift/15 main in single-file library/program.c5
-rw-r--r--test cases/swift/15 main in single-file library/program.h1
-rw-r--r--test cases/swift/16 main in multi-file library/main.swift4
-rw-r--r--test cases/swift/16 main in multi-file library/meson.build4
-rw-r--r--test cases/swift/16 main in multi-file library/module.modulemap3
-rw-r--r--test cases/swift/16 main in multi-file library/more.swift3
-rw-r--r--test cases/swift/16 main in multi-file library/program.c5
-rw-r--r--test cases/swift/16 main in multi-file library/program.h1
-rw-r--r--test cases/swift/8 extra args/lib.swift3
-rw-r--r--test cases/swift/8 extra args/main.swift1
-rw-r--r--test cases/swift/8 extra args/meson.build4
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 &param) {
+ 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 &param);
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