File: generic-struct-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 (108 lines) | stat: -rw-r--r-- 4,145 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// RUN: %empty-directory(%t)

// RUN: %target-swift-frontend %S/generic-struct-in-cxx.swift -typecheck -module-name Generics -clang-header-expose-decls=all-public -emit-clang-header-path %t/generics.h

// RUN: %target-interop-build-clangxx -std=gnu++20 -c %s -I %t -o %t/swift-generics-execution.o
// RUN: %target-interop-build-swift %S/generic-struct-in-cxx.swift -o %t/swift-generics-execution -Xlinker %t/swift-generics-execution.o -module-name Generics -Xfrontend -entry-point-function-name -Xfrontend swiftMain

// RUN: %target-codesign %t/swift-generics-execution
// RUN: %target-run %t/swift-generics-execution | %FileCheck %s

// REQUIRES: executable_test

#include "generics.h"
#include <cassert>
#include <cstdio>

int main() {
  using namespace Generics;

  {
    auto x = makeGenericPair<int, int>(11, 42);
    takeGenericPair(x);
    // CHECK: GenericPair<Int32, Int32>(x: 11, y: 42)
    auto xprime = passThroughGenericPair(x, -995);
    takeGenericPair(x);
    takeGenericPair(xprime);
    // CHECK-NEXT: GenericPair<Int32, Int32>(x: 11, y: 42)
    // CHECK-NEXT: GenericPair<Int32, Int32>(x: 11, y: -995)
    inoutGenericPair(x, 0xFF);
    takeGenericPair(x);
    // CHECK-NEXT: GenericPair<Int32, Int32>(x: 255, y: 42)
    x.method();
    // CHECK-NEXT: GenericPair<T, T2>::testme::255,42;
    x.mutatingMethod(xprime);
    x.method();
    // CHECK-NEXT: GenericPair<T, T2>::testme::-995,11;
    takeGenericPair(x);
    takeGenericPair(xprime);
    // CHECK-NEXT: GenericPair<Int32, Int32>(x: -995, y: 11)
    // CHECK-NEXT: GenericPair<Int32, Int32>(x: 11, y: -995)
    assert(x.getY() == 11);
    x.setY(561);
    takeGenericPair(x);
    // CHECK-NEXT: GenericPair<Int32, Int32>(x: -995, y: 561)
    assert(x.getComputedProp() == 42);
    assert(x.getComputedVar() == -995);
    x.setComputedVar(-123456);
    assert(x.getComputedVar() == -123456);
    assert(x.getY() == 561);
    takeGenericPair(x);
    // CHECK-NEXT: GenericPair<T, T2>::computeVar::get
    // CHECK-NEXT: GenericPair<T, T2>::computeVar::set
    // CHECK-NEXT: GenericPair<T, T2>::computeVar::get
    // CHECK-NEXT: GenericPair<Int32, Int32>(x: -123456, y: 561)
    assert(x.genericMethod<float>(2.25f, 4221) == 2.25f);
    // CHECK-NEXT: GenericPair<T, T2>::genericMethod<T>::2.25,4221;
  }

  {
    auto x = makeConcretePair(10000, 0xfee7);
    takeGenericPair(x);
    // CHECK-NEXT: GenericPair<UInt16, UInt16>(x: 10000, y: 65255)
    takeConcretePair(x);
    // CHECK-NEXT: CONCRETE pair of UInt16: 10000 65255 ;
    auto xprime = passThroughConcretePair(x, 918);
    takeConcretePair(x);
    takeConcretePair(xprime);
    takeGenericPair(xprime);
    // CHECK-NEXT: CONCRETE pair of UInt16: 10000 65255 ;
    // CHECK-NEXT: CONCRETE pair of UInt16: 10000 918 ;
    // CHECK-NEXT: GenericPair<UInt16, UInt16>(x: 10000, y: 918)
    inoutConcretePair(77, x);
    takeConcretePair(x);
    // CHECK-NEXT: CONCRETE pair of UInt16: 77 65255 ;
    x.method();
    // CHECK-NEXT: GenericPair<T, T2>::testme::77,65255;
    x.mutatingMethod(xprime);
    x.method();
    // CHECK-NEXT: GenericPair<T, T2>::testme::918,10000;
    takeConcretePair(xprime);
    // CHECK-NEXT: CONCRETE pair of UInt16: 10000 918 ;
  }

  {
    auto x = GenericPair<int, int>::init(11, 234242, 44);
    takeGenericPair(x);
    x.method();
    assert(x.getY() == 44);
    // CHECK-NEXT: GenericPair<T, T2>::init::11,44,234242;
    // CHECK-NEXT: GenericPair<Int32, Int32>(x: 11, y: 44)
    // CHECK-NEXT: GenericPair<T, T2>::testme::11,44;
    auto y = GenericPair<uint16_t, uint16_t>::init(0, -987, 3425);
    takeConcretePair(y);
    y.method();
    assert(y.getY() == 3425);
    // CHECK-NEXT: GenericPair<T, T2>::init::0,3425,-987;
    // CHECK-NEXT: CONCRETE pair of UInt16: 0 3425 ;
    // CHECK-NEXT: GenericPair<T, T2>::testme::0,3425;
    auto val = PairOfUInt64::init(0xafafa, 0x32443);
    auto valprime = x.genericMethod(val, 4221);
    assert(valprime.getX() == val.getX());
    assert(valprime.getY() == val.getY());
    // CHECK-NEXT: GenericPair<T, T2>::genericMethod<T>::PairOfUInt64(x: 719610, y: 205891),4221;
  }
  puts("EOF\n");
  // CHECK-NEXT: EOF
  return 0;
}