Skip to content

Commit 5c25343

Browse files
committed
NFC: Add basic -print-ast tests for derived hashable/equatable conformances.
1 parent 8079d9c commit 5c25343

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// RUN: %target-swift-frontend -print-ast %s | %FileCheck %s
2+
3+
// CHECK-LABEL: internal enum Simple : Hashable
4+
enum Simple: Hashable {
5+
// CHECK: case a
6+
case a
7+
// CHECK: case b
8+
case b
9+
10+
// CHECK: @_implements(Equatable, ==(_:_:)) internal static func __derived_enum_equals(_ a: Simple, _ b: Simple) -> Bool {
11+
// CHECK-NEXT: private var index_a: Int
12+
// CHECK-NEXT: switch a {
13+
// CHECK-NEXT: case .a:
14+
// CHECK-NEXT: index_a = 0
15+
// CHECK-NEXT: case .b:
16+
// CHECK-NEXT: index_a = 1
17+
// CHECK-NEXT: }
18+
// CHECK-NEXT: private var index_b: Int
19+
// CHECK-NEXT: switch b {
20+
// CHECK-NEXT: case .a:
21+
// CHECK-NEXT: index_b = 0
22+
// CHECK-NEXT: case .b:
23+
// CHECK-NEXT: index_b = 1
24+
// CHECK-NEXT: }
25+
// CHECK-NEXT: return index_a == index_b
26+
// CHECK-NEXT: }
27+
28+
// CHECK: internal func hash(into hasher: inout Hasher) {
29+
// CHECK-NEXT: private var discriminator: Int
30+
// CHECK-NEXT: switch self {
31+
// CHECK-NEXT: case .a:
32+
// CHECK-NEXT: discriminator = 0
33+
// CHECK-NEXT: case .b:
34+
// CHECK-NEXT: discriminator = 1
35+
// CHECK-NEXT: }
36+
// CHECK-NEXT: hasher.combine(discriminator)
37+
// CHECK-NEXT: }
38+
39+
// CHECK: internal var hashValue: Int {
40+
// CHECK-NEXT: get {
41+
// CHECK-NEXT: return _hashValue(for: self)
42+
// CHECK-NEXT: }
43+
// CHECK-NEXT: }
44+
}
45+
46+
// CHECK-LABEL: internal enum HasAssociatedValues : Hashable
47+
enum HasAssociatedValues: Hashable {
48+
// CHECK: case a(Int)
49+
case a(Int)
50+
// CHECK: case b(String)
51+
case b(String)
52+
// CHECK: case c
53+
case c
54+
55+
// CHECK: internal func hash(into hasher: inout Hasher) {
56+
// CHECK-NEXT: switch self {
57+
// CHECK-NEXT: case .a(let a0):
58+
// CHECK-NEXT: hasher.combine(0)
59+
// CHECK-NEXT: hasher.combine(a0)
60+
// CHECK-NEXT: case .b(let a0):
61+
// CHECK-NEXT: hasher.combine(1)
62+
// CHECK-NEXT: hasher.combine(a0)
63+
// CHECK-NEXT: case .c:
64+
// CHECK-NEXT: hasher.combine(2)
65+
// CHECK-NEXT: }
66+
// CHECK-NEXT: }
67+
68+
// CHECK: @_implements(Equatable, ==(_:_:)) internal static func __derived_enum_equals(_ a: HasAssociatedValues, _ b: HasAssociatedValues) -> Bool {
69+
// CHECK-NEXT: switch (a, b) {
70+
// CHECK-NEXT: case (.a(let l0), .a(let r0)):
71+
// CHECK-NEXT: guard l0 r0 else {
72+
// CHECK-NEXT: return false
73+
// CHECK-NEXT: }
74+
// CHECK-NEXT: return true
75+
// CHECK-NEXT: case (.b(let l0), .b(let r0)):
76+
// CHECK-NEXT: guard l0 r0 else {
77+
// CHECK-NEXT: return false
78+
// CHECK-NEXT: }
79+
// CHECK-NEXT: return true
80+
// CHECK-NEXT: case (.c, .c):
81+
// CHECK-NEXT: return true
82+
// CHECK-NEXT: default:
83+
// CHECK-NEXT: return false
84+
// CHECK-NEXT: }
85+
// CHECK-NEXT: }
86+
87+
// CHECK: internal var hashValue: Int {
88+
// CHECK-NEXT: get {
89+
// CHECK-NEXT: return _hashValue(for: self)
90+
// CHECK-NEXT: }
91+
// CHECK-NEXT: }
92+
}

0 commit comments

Comments
 (0)