Files
swift-mirror/test/Interpreter/noimplicitcopy.swift
2024-01-25 18:18:02 -08:00

63 lines
1.3 KiB
Swift

// RUN: %target-run-simple-swift( -Xfrontend -enable-experimental-move-only ) | %FileCheck %s
// A small soundness check.
// REQUIRES: executable_test
import StdlibUnittest
var Tests = TestSuite("TrivialMoveOnly")
defer { runAllTests() }
func print2(_ x: Int) {
print("printInt: \(x + 1)")
}
// CHECK: printInt: 11
// CHECK: printInt: 5
Tests.test("printInt") {
@_noImplicitCopy let x: Int = 5
// Infix operators where we pass values as guaranteed parameters.
print2(x + x)
print("printInt: \(x)")
}
// CHECK: printInt: 11
// CHECK: printInt: 6
// CHECK: printIntArg: 5
func printIntArg(@_noImplicitCopy _ x: Int) {
print2(x + x)
print2(x)
print("printIntArg: \(x)")
}
Tests.test("printIntArg") {
printIntArg(5)
}
// CHECK: printInt: 11
// CHECK: printInt: 6
// CHECK: printIntOwnedArg: 5
func printIntOwnedArg(@_noImplicitCopy _ x: __owned Int) {
print2(x + x)
print2(x)
print("printIntOwnedArg: \(x)")
}
Tests.test("printIntOwnedArg") {
printIntOwnedArg(5)
}
class Klass {
var i = 8
func increment() { i += 1 }
}
// CHECK: printKlass: main.Klass
// CHECK: printKlass: 10
Tests.test("printKlass") {
@_noImplicitCopy let x = Klass()
x.increment()
x.increment()
print("printKlass: \(x)")
print("printKlass: \(x.i)")
}