File tree 2 files changed +28
-18
lines changed
2 files changed +28
-18
lines changed Original file line number Diff line number Diff line change 1
1
use super :: * ;
2
2
3
+ // Test that user-provided impls of `Discriminantkind` are prohibited
4
+ #[ test]
5
+ fn no_discriminant_kind_impls ( ) {
6
+ lowering_error ! {
7
+ program {
8
+ #[ lang( discriminant_kind) ]
9
+ trait DiscriminantKind {
10
+ type Discriminant ;
11
+ }
12
+
13
+ impl DiscriminantKind for u32 {
14
+ type Discriminant = u32 ;
15
+ }
16
+ } error_msg {
17
+ "trait impl for `DiscriminantKind` does not meet well-formedness requirements"
18
+ }
19
+ }
20
+ }
21
+
22
+ // Test that all types are implementing DiscriminantKind
3
23
#[ test]
4
24
fn discriminant_kind_impl ( ) {
5
25
test ! {
@@ -75,12 +95,14 @@ fn discriminant_kind_assoc() {
75
95
}
76
96
}
77
97
98
+ // Discriminant for types with no discriminant should be u8
78
99
goal {
79
100
Normalize ( <u32 as DiscriminantKind >:: Discriminant -> u8 )
80
101
} yields {
81
102
"Unique"
82
103
}
83
104
105
+ // Same as above
84
106
goal {
85
107
forall<' a> {
86
108
Normalize ( <dyn Principal + ' a as DiscriminantKind >:: Discriminant -> u8 )
@@ -89,12 +111,15 @@ fn discriminant_kind_assoc() {
89
111
"Unique"
90
112
}
91
113
114
+ // Discriminant for enums with unspecified discriminant should be isize
92
115
goal {
93
116
Normalize ( <A as DiscriminantKind >:: Discriminant -> isize )
94
117
} yields {
95
118
"Unique"
96
119
}
97
120
121
+ // Discriminant should be the same as specified in `repr`
122
+ // -----
98
123
goal {
99
124
Normalize ( <B as DiscriminantKind >:: Discriminant -> isize )
100
125
} yields {
@@ -118,13 +143,16 @@ fn discriminant_kind_assoc() {
118
143
} yields {
119
144
"Unique"
120
145
}
146
+ //--------
121
147
148
+ // Generators have u32 as the discriminant
122
149
goal {
123
150
Normalize ( <empty_gen as DiscriminantKind >:: Discriminant -> u32 )
124
151
} yields {
125
152
"Unique"
126
153
}
127
154
155
+ // Placeholders don't have a determined discriminant
128
156
goal {
129
157
forall<T > {
130
158
exists<U > {
Original file line number Diff line number Diff line change @@ -1438,21 +1438,3 @@ fn coerce_unsized_struct() {
1438
1438
}
1439
1439
}
1440
1440
}
1441
-
1442
- #[ test]
1443
- fn no_discriminant_kind_impls ( ) {
1444
- lowering_error ! {
1445
- program {
1446
- #[ lang( discriminant_kind) ]
1447
- trait DiscriminantKind {
1448
- type Discriminant ;
1449
- }
1450
-
1451
- impl DiscriminantKind for u32 {
1452
- type Discriminant = u32 ;
1453
- }
1454
- } error_msg {
1455
- "trait impl for `DiscriminantKind` does not meet well-formedness requirements"
1456
- }
1457
- }
1458
- }
You can’t perform that action at this time.
0 commit comments