File: array-execution.cpp

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (77 lines) | stat: -rw-r--r-- 2,060 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// RUN: %empty-directory(%t)
// RUN: split-file %s %t

// RUN: %target-swift-frontend -typecheck %t/use-array.swift -typecheck -module-name UseArray -enable-experimental-cxx-interop -emit-clang-header-path %t/UseArray.h

// RUN: %target-interop-build-clangxx -fno-exceptions -std=gnu++20 -c %t/array-execution.cpp -I %t -o %t/swift-stdlib-execution.o
// RUN: %target-build-swift %t/use-array.swift -o %t/swift-stdlib-execution -Xlinker %t/swift-stdlib-execution.o -module-name UseArray -Xfrontend -entry-point-function-name -Xfrontend swiftMain
// RUN: %target-codesign %t/swift-stdlib-execution
// RUN: %target-run %t/swift-stdlib-execution | %FileCheck %s

// REQUIRES: executable_test

//--- use-array.swift
@_expose(Cxx)
public func createArray(_ val: CInt) -> [CInt] {
    return [val, val]
}

@_expose(Cxx)
public func passthroughArray(_ val: [CInt]) -> Array<CInt> {
    return val
}

@_expose(Cxx)
public func printArray(_ val: Array<CInt>) {
    print(val)
}

public func printStrings(_ strings: [String]) {
  for s in strings {
    print("GOT STRING '\(s)'")
  }
  print("DONE PRINTING.")
}

//--- array-execution.cpp

#include <cassert>
#include "UseArray.h"

int main() {
  using namespace swift;
  {
    Array<int> val = UseArray::createArray(2);
    UseArray::printArray(UseArray::passthroughArray(val));
    int count = 2;
    for (int x: val) {
      assert(x == 2);
      --count;
    }
    assert(count == 0);
  }
// CHECK: [2, 2]
  {
    auto val = Array<int>::init();
    val.append(-11);
    UseArray::printArray(val);
    assert(val.getCount() == 1);
    assert(val.getCapacity() >= 1);
    auto zeroInt = val[0];
    assert(zeroInt == -11);
    auto firstInt = val.removeAt(0);
    assert(firstInt == -11);
    assert(val.getCount() == 0);
    UseArray::printArray(val);
  }
// CHECK-NEXT: [-11]
// CHECK-NEXT: []
  {
    auto array = swift::Array<swift::String>::init();
    array.append("123456789ABCDEFG");
    UseArray::printStrings(array);
  }
// CHECK-NEXT: GOT STRING '123456789ABCDEFG'
// CHECK-NEXT: DONE PRINTING
  return 0;
}