mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
116 lines
3.6 KiB
C++
116 lines
3.6 KiB
C++
// RUN: %empty-directory(%t)
|
|
|
|
// RUN: %target-swift-frontend %S/swift-functions-errors.swift -typecheck -module-name Functions -Xcc -fno-exceptions -enable-experimental-cxx-interop -emit-clang-header-path %t/functions.h
|
|
|
|
// RUN: %target-interop-build-clangxx -fno-exceptions -c %s -I %t -fno-exceptions -o %t/swift-expected-execution.o
|
|
// RUN: %target-interop-build-swift %S/swift-functions-errors.swift -o %t/swift-expected-execution -Xlinker %t/swift-expected-execution.o -module-name Functions -Xfrontend -entry-point-function-name -Xfrontend swiftMain
|
|
|
|
// RUN: %target-codesign %t/swift-expected-execution
|
|
// RUN: %target-run %t/swift-expected-execution | %FileCheck %s
|
|
|
|
// REQUIRES: executable_test
|
|
// UNSUPPORTED: OS=windows-msvc
|
|
|
|
#include <cstdio>
|
|
#include "functions.h"
|
|
|
|
int main() {
|
|
|
|
// Test Empty Constructor
|
|
auto testIntEmpty = Swift::Expected<int>();
|
|
|
|
// Test Error Constructor
|
|
Swift::Error e;
|
|
auto testIntError = Swift::Expected<int>(e);
|
|
|
|
// Test Value Constructor
|
|
auto testIntValue = Swift::Expected<int>(42);
|
|
|
|
// Test Copy Constructor
|
|
auto testCopy = testIntEmpty;
|
|
|
|
// TODO: Test Move Constructor
|
|
|
|
// Test Destructor
|
|
auto testDestEmpty = Swift::Expected<int>();
|
|
auto testDestInt = Swift::Expected<int>(42);
|
|
auto testDestError = Swift::Expected<int>(e);
|
|
testDestEmpty.~Expected();
|
|
testDestInt.~Expected();
|
|
testDestError.~Expected();
|
|
|
|
// TODO: Test Assignment (Move)
|
|
|
|
// Test Access to T's members (const)
|
|
const auto exp = testIntValue;
|
|
if (*exp.operator->() == 42)
|
|
printf("Test Access to T's members (const)\n");
|
|
|
|
// Test Access to T's members
|
|
if (*testIntValue.operator->() == 42)
|
|
printf("Test Access to T's members\n");
|
|
|
|
// Test Reference to T's members (const)
|
|
const auto refExp = testIntValue;
|
|
if (*refExp == 42)
|
|
printf("Test Reference to T's members (const)\n");
|
|
|
|
// Test Reference to T's members
|
|
if (*testIntValue == 42)
|
|
printf("Test Reference to T's members\n");
|
|
|
|
// Test bool operator
|
|
if (testIntValue) {
|
|
printf("Test operator bool\n");
|
|
}
|
|
|
|
// Test get T's Value (const)
|
|
const auto valueExp = testIntValue;
|
|
if (valueExp.value() == 42)
|
|
printf("Test get T's Value (const)\n");
|
|
|
|
// Test get T's Value
|
|
if (testIntValue.value() == 42)
|
|
printf("Test get T's Value\n");
|
|
|
|
// Test get Swift::Error (const)
|
|
const auto constExpectedResult = Functions::throwFunctionWithPossibleReturn(0);
|
|
if (!constExpectedResult.has_value()) {
|
|
auto constError = constExpectedResult.error(); // using const function
|
|
auto optionalError = constError.as<Functions::NaiveErrors>();
|
|
auto errorValue = optionalError.get();
|
|
errorValue.getMessage();
|
|
}
|
|
|
|
// Test get Swift::Error
|
|
auto expectedResult = Functions::throwFunctionWithPossibleReturn(0);
|
|
if (!expectedResult.has_value()) {
|
|
auto error = expectedResult.error();
|
|
auto optionalError = error.as<Functions::NaiveErrors>();
|
|
auto errorValue = optionalError.get();
|
|
errorValue.getMessage();
|
|
}
|
|
|
|
// Test has Value
|
|
if (testIntValue.has_value())
|
|
printf("testIntValue has a value\n");
|
|
if (!testIntError.has_value())
|
|
printf("testIntError doesn't have a value\n");
|
|
|
|
return 0;
|
|
}
|
|
|
|
// CHECK: Test Access to T's members (const)
|
|
// CHECK-NEXT: Test Access to T's members
|
|
// CHECK-NEXT: Test Reference to T's members (const)
|
|
// CHECK-NEXT: Test Reference to T's members
|
|
// CHECK-NEXT: Test operator bool
|
|
// CHECK-NEXT: Test get T's Value (const)
|
|
// CHECK-NEXT: Test get T's Value
|
|
// CHECK-NEXT: passThrowFunctionWithPossibleReturn
|
|
// CHECK-NEXT: returnError
|
|
// CHECK-NEXT: passThrowFunctionWithPossibleReturn
|
|
// CHECK-NEXT: returnError
|
|
// CHECK-NEXT: testIntValue has a value
|
|
// CHECK-NEXT: testIntError doesn't have a value
|