feat: rm unused files
This commit is contained in:
1
swift-rs/.gitattributes
vendored
1
swift-rs/.gitattributes
vendored
@@ -1 +0,0 @@
|
||||
example/* linguist-vendored
|
||||
38
swift-rs/.github/workflows/main.yaml
vendored
38
swift-rs/.github/workflows/main.yaml
vendored
@@ -1,38 +0,0 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
RUST_BACKTRACE: 1
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: macos-latest
|
||||
strategy:
|
||||
matrix:
|
||||
rust: [stable, beta]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
name: Checkout
|
||||
- name: Install specific rust version
|
||||
run: |
|
||||
rustup install ${{ matrix.rust }} --profile minimal
|
||||
rustup component add --toolchain ${{ matrix.rust }} rustfmt clippy
|
||||
- name: Setup cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
- name: Test example
|
||||
working-directory: example
|
||||
run: cargo +${{ matrix.rust }} run
|
||||
- name: Run Tests
|
||||
env:
|
||||
TEST_SWIFT_RS: "true"
|
||||
run: cargo +${{ matrix.rust }} test --features build
|
||||
- name: Check Code Formatting
|
||||
run: cargo +${{ matrix.rust }} fmt --all -- --check
|
||||
- name: Lints
|
||||
run: cargo +${{ matrix.rust }} clippy -- -D warnings
|
||||
7
swift-rs/.gitignore
vendored
7
swift-rs/.gitignore
vendored
@@ -1,7 +0,0 @@
|
||||
.build/
|
||||
target/
|
||||
.swiftpm/
|
||||
.idea/
|
||||
.DS_Store
|
||||
icon.txt
|
||||
**/Cargo.lock
|
||||
@@ -1,31 +0,0 @@
|
||||
// swift-tools-version:5.3
|
||||
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
||||
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "test-swift",
|
||||
platforms: [
|
||||
.macOS(.v11),
|
||||
],
|
||||
products: [
|
||||
// Products define the executables and libraries a package produces, and make them visible to other packages.
|
||||
.library(
|
||||
name: "test-swift",
|
||||
type: .static,
|
||||
targets: ["test-swift"]),
|
||||
],
|
||||
dependencies: [
|
||||
// Dependencies declare other packages that this package depends on.
|
||||
.package(name: "SwiftRs", path: "../../")
|
||||
],
|
||||
targets: [
|
||||
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
|
||||
// Targets can depend on other targets in this package, and on products in packages this package depends on.
|
||||
.target(
|
||||
name: "test-swift",
|
||||
dependencies: [.product(name: "SwiftRs", package: "SwiftRs")],
|
||||
path: ".",
|
||||
exclude: ["test_example.rs", "test_bindings.rs"])
|
||||
]
|
||||
)
|
||||
@@ -1,70 +0,0 @@
|
||||
import Foundation
|
||||
import SwiftRs
|
||||
|
||||
// SRArray
|
||||
//
|
||||
// Notice that IntArray and ArrayStruct are almost identical!
|
||||
// The only actual difference between these types is how they're used in Rust,
|
||||
// but if you added more fields to ArrayStruct then that wouldn't be the case anymore.
|
||||
|
||||
class IntArray: NSObject {
|
||||
var data: SRArray<Int>
|
||||
|
||||
init(data: [Int]) {
|
||||
self.data = SRArray(data)
|
||||
}
|
||||
}
|
||||
|
||||
@_cdecl("get_int_array")
|
||||
func getIntArray() -> IntArray {
|
||||
return IntArray(data: [1, 2, 3])
|
||||
}
|
||||
|
||||
class ArrayStruct: NSObject {
|
||||
var array: SRArray<Int>
|
||||
|
||||
init(array: [Int]) {
|
||||
self.array = SRArray(array)
|
||||
}
|
||||
}
|
||||
|
||||
@_cdecl("get_array_struct")
|
||||
func getArrayStruct() -> ArrayStruct {
|
||||
return ArrayStruct(array: [4, 5, 6])
|
||||
}
|
||||
|
||||
// SRObject
|
||||
|
||||
class CustomObject: NSObject {
|
||||
var a: Int
|
||||
var b: Bool
|
||||
|
||||
init(a: Int, b: Bool) {
|
||||
self.a = a
|
||||
self.b = b
|
||||
}
|
||||
}
|
||||
|
||||
@_cdecl("get_custom_object")
|
||||
func getCustomObject() -> CustomObject {
|
||||
return CustomObject(a: 3, b: true)
|
||||
}
|
||||
|
||||
// SRString
|
||||
|
||||
@_cdecl("get_greeting")
|
||||
func getGreeting(name: SRString) -> SRString {
|
||||
return SRString("Hello \(name.toString())!")
|
||||
}
|
||||
|
||||
@_cdecl("echo")
|
||||
func echo(string: SRString) -> SRString {
|
||||
return string
|
||||
}
|
||||
|
||||
// SRData
|
||||
|
||||
@_cdecl("get_data")
|
||||
func getData() -> SRData {
|
||||
return SRData([1, 2, 3])
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
import SwiftRs
|
||||
import Foundation
|
||||
|
||||
class Complex: NSObject {
|
||||
var a: SRString
|
||||
var b: Int
|
||||
var c: Bool
|
||||
|
||||
public init(a: SRString, b: Int, c: Bool) {
|
||||
self.a = a
|
||||
self.b = b
|
||||
self.c = c
|
||||
}
|
||||
}
|
||||
|
||||
@_cdecl("complex_data")
|
||||
func complexData() -> SRObjectArray {
|
||||
return SRObjectArray([
|
||||
Complex(a: SRString("Brendan"), b: 0, c: true),
|
||||
Complex(a: SRString("Amod"), b: 1, c: false),
|
||||
Complex(a: SRString("Lucas"), b: 2, c: true),
|
||||
Complex(a: SRString("Oscar"), b: 3, c: false),
|
||||
])
|
||||
}
|
||||
|
||||
@_cdecl("echo_data")
|
||||
func echoData(data: SRData) -> SRData {
|
||||
return SRData(data.toArray())
|
||||
}
|
||||
@@ -1,150 +0,0 @@
|
||||
//! Test for swift-rs bindings
|
||||
//!
|
||||
//! Needs to be run with the env var `TEST_SWIFT_RS=true`, to allow for
|
||||
//! the test swift code to be linked.
|
||||
|
||||
use serial_test::serial;
|
||||
use std::{env, process::Command};
|
||||
use swift_rs::*;
|
||||
|
||||
macro_rules! test_with_leaks {
|
||||
( $op:expr ) => {{
|
||||
let leaks_env_var = "TEST_RUNNING_UNDER_LEAKS";
|
||||
if env::var(leaks_env_var).unwrap_or_else(|_| "false".into()) == "true" {
|
||||
let _ = $op();
|
||||
} else {
|
||||
// we run $op directly in the current process first, as leaks will not give
|
||||
// us the exit code of $op, but only if memory leaks happened or not
|
||||
$op();
|
||||
|
||||
// and now we run the above codepath under leaks monitoring
|
||||
let exe = env::current_exe().unwrap();
|
||||
|
||||
// codesign the binary first, so that leaks can be run
|
||||
let debug_plist = exe.parent().unwrap().join("debug.plist");
|
||||
let plist_path = &debug_plist.to_string_lossy();
|
||||
std::fs::write(&debug_plist, DEBUG_PLIST_XML.as_bytes()).unwrap();
|
||||
let status = Command::new("codesign")
|
||||
.args([
|
||||
"-s",
|
||||
"-",
|
||||
"-v",
|
||||
"-f",
|
||||
"--entitlements",
|
||||
plist_path,
|
||||
&exe.to_string_lossy(),
|
||||
])
|
||||
.status()
|
||||
.expect("cmd failure");
|
||||
assert!(status.success(), "failed to codesign");
|
||||
|
||||
// run leaks command to detect memory leaks
|
||||
let status = Command::new("leaks")
|
||||
.args(["-atExit", "--", &exe.to_string_lossy(), "--nocapture"])
|
||||
.env(leaks_env_var, "true")
|
||||
.status()
|
||||
.expect("cmd failure");
|
||||
assert!(status.success(), "leaks detected in memory pressure test");
|
||||
}
|
||||
}};
|
||||
}
|
||||
|
||||
swift!(fn echo(string: &SRString) -> SRString);
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn test_reflection() {
|
||||
test_with_leaks!(|| {
|
||||
// create memory pressure
|
||||
let name: SRString = "Brendan".into();
|
||||
for _ in 0..10_000 {
|
||||
let reflected = unsafe { echo(&name) };
|
||||
assert_eq!(name.as_str(), reflected.as_str());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
swift!(fn get_greeting(name: &SRString) -> SRString);
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn test_string() {
|
||||
test_with_leaks!(|| {
|
||||
let name: SRString = "Brendan".into();
|
||||
let greeting = unsafe { get_greeting(&name) };
|
||||
assert_eq!(greeting.as_str(), "Hello Brendan!");
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn test_memory_pressure() {
|
||||
test_with_leaks!(|| {
|
||||
// create memory pressure
|
||||
let name: SRString = "Brendan".into();
|
||||
for _ in 0..10_000 {
|
||||
let greeting = unsafe { get_greeting(&name) };
|
||||
assert_eq!(greeting.as_str(), "Hello Brendan!");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn test_autoreleasepool() {
|
||||
test_with_leaks!(|| {
|
||||
// create memory pressure
|
||||
let name: SRString = "Brendan".into();
|
||||
for _ in 0..10_000 {
|
||||
autoreleasepool!({
|
||||
let greeting = unsafe { get_greeting(&name) };
|
||||
assert_eq!(greeting.as_str(), "Hello Brendan!");
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
struct Complex {
|
||||
a: SRString,
|
||||
b: Int,
|
||||
c: Bool,
|
||||
}
|
||||
|
||||
swift!(fn complex_data() -> SRObjectArray<Complex>);
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn test_complex() {
|
||||
test_with_leaks!(|| {
|
||||
let mut v = vec![];
|
||||
|
||||
for _ in 0..10_000 {
|
||||
let data = unsafe { complex_data() };
|
||||
assert_eq!(data[0].a.as_str(), "Brendan");
|
||||
v.push(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
swift!(fn echo_data(data: &SRData) -> SRData);
|
||||
|
||||
#[test]
|
||||
#[serial]
|
||||
fn test_data() {
|
||||
test_with_leaks!(|| {
|
||||
let str: &str = "hello";
|
||||
let bytes = str.as_bytes();
|
||||
for _ in 0..10_000 {
|
||||
let data = unsafe { echo_data(&bytes.into()) };
|
||||
assert_eq!(data.as_slice(), bytes);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const DEBUG_PLIST_XML: &str = r#"<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict><key>com.apple.security.get-task-allow</key><true/></dict>
|
||||
</plist>
|
||||
"#;
|
||||
Reference in New Issue
Block a user