| // RUN: %target-build-swift -O %s -module-name=test -Xllvm -sil-disable-pass=FunctionSignatureOpts -o %t.out |
| // RUN: %target-build-swift -O %s -module-name=test -Xllvm -sil-disable-pass=FunctionSignatureOpts -emit-sil | %FileCheck %s |
| // RUN: %target-run %t.out |
| // REQUIRES: swift_stdlib_no_asserts,optimized_stdlib |
| // REQUIRES: stress_test |
| // UNSUPPORTED: nonatomic_rc |
| |
| import StdlibUnittest |
| |
| // CHECK-LABEL: // SmallEnum.init(rawValue:) |
| // CHECK-NEXT: sil {{.*}} @{{.*}}SmallEnum{{.*}}rawValue{{.*}} : |
| // CHECK-DAG: global_value @{{.*}}SmallEnum{{.*}}rawValue{{.*}} |
| // CHECK-DAG: // function_ref _findStringSwitchCase(cases:string:) |
| // CHECK: return |
| |
| enum SmallEnum : String { |
| case c1 = "Swift" |
| case c2 = "is" |
| case c3 = "a" |
| case c4 = "general-purpose" |
| case c5 = "programming language" |
| } |
| |
| // CHECK-LABEL: // LargeEnum.init(rawValue:) |
| // CHECK-NEXT: sil {{.*}} @{{.*}}LargeEnum{{.*}}rawValue{{.*}} : |
| // CHECK-DAG: global_value @{{.*}}LargeEnum{{.*}}rawValue{{.*}} |
| // CHECK-DAG: // function_ref _findStringSwitchCaseWithCache(cases:string:cache:) |
| // CHECK: return |
| |
| enum LargeEnum : String { |
| case c1 = "Swift" |
| case c2 = "is" |
| case c3 = "a" |
| case c4 = "general-purpose" |
| case c5 = "programming language" |
| case c7 = "built" |
| case c8 = "using" |
| case c10 = "modern" |
| case c11 = "approach" |
| case c12 = "to" |
| case c13 = "safety," |
| case c14 = "performance," |
| case c15 = "and" |
| case c16 = "software" |
| case c17 = "design" |
| case c18 = "patterns." |
| case c19 = "" |
| case c20 = "The" |
| case c21 = "goal" |
| case c22 = "of" |
| case c23 = "the" |
| case c25 = "project" |
| case c28 = "create" |
| case c30 = "best" |
| case c31 = "available" |
| case c33 = "for" |
| case c34 = "uses" |
| case c35 = "ranging" |
| case c36 = "from" |
| case c37 = "systems" |
| case c40 = "mobile" |
| case c42 = "desktop" |
| case c43 = "apps," |
| case c44 = "scaling" |
| case c45 = "up" |
| case c47 = "cloud" |
| case c48 = "services." |
| } |
| |
| let SmallInputs : [(String, SmallEnum)] = [ |
| ("Swift", SmallEnum.c1), |
| ("is", SmallEnum.c2), |
| ("a", SmallEnum.c3), |
| ("general-purpose", SmallEnum.c4), |
| ("programming language", SmallEnum.c5), |
| ] |
| |
| let LargeInputs : [(String, LargeEnum)] = [ |
| ("Swift", LargeEnum.c1), |
| ("is", LargeEnum.c2), |
| ("a", LargeEnum.c3), |
| ("general-purpose", LargeEnum.c4), |
| ("programming language", LargeEnum.c5), |
| ("built", LargeEnum.c7), |
| ("using", LargeEnum.c8), |
| ("modern", LargeEnum.c10), |
| ("approach", LargeEnum.c11), |
| ("to", LargeEnum.c12), |
| ("safety,", LargeEnum.c13), |
| ("performance,", LargeEnum.c14), |
| ("and", LargeEnum.c15), |
| ("software", LargeEnum.c16), |
| ("design", LargeEnum.c17), |
| ("patterns.", LargeEnum.c18), |
| ("", LargeEnum.c19), |
| ("The", LargeEnum.c20), |
| ("goal", LargeEnum.c21), |
| ("of", LargeEnum.c22), |
| ("the", LargeEnum.c23), |
| ("project", LargeEnum.c25), |
| ("create", LargeEnum.c28), |
| ("best", LargeEnum.c30), |
| ("available", LargeEnum.c31), |
| ("for", LargeEnum.c33), |
| ("uses", LargeEnum.c34), |
| ("ranging", LargeEnum.c35), |
| ("from", LargeEnum.c36), |
| ("systems", LargeEnum.c37), |
| ("mobile", LargeEnum.c40), |
| ("desktop", LargeEnum.c42), |
| ("apps,", LargeEnum.c43), |
| ("scaling", LargeEnum.c44), |
| ("up", LargeEnum.c45), |
| ("cloud", LargeEnum.c47), |
| ("services.", LargeEnum.c48) |
| ] |
| |
| var StringSwitchTestSuite = TestSuite("StringSwitch") |
| |
| StringSwitchTestSuite.test("small_enum_init") { |
| runRaceTest(trials: 10, timeoutInSeconds: 0) { |
| for i in SmallInputs { |
| expectEqual(SmallEnum(rawValue: i.0), i.1) |
| } |
| } |
| } |
| |
| StringSwitchTestSuite.test("large_enum_init") { |
| runRaceTest(trials: 10, timeoutInSeconds: 0) { |
| for i in LargeInputs { |
| expectEqual(LargeEnum(rawValue: i.0), i.1) |
| } |
| } |
| } |
| |
| runAllTests() |
| |