blob: d621ac5c723b264212ac24826d74eaedee8348fb [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
enum GenericEnum<X> {
a<int>(),
b<String>(),
c<bool>(),
}
void exhaustiveGenericSwitch(GenericEnum<dynamic> e) {
/*
checkingOrder={GenericEnum<dynamic>,GenericEnum.a,GenericEnum.b,GenericEnum.c},
subtypes={GenericEnum.a,GenericEnum.b,GenericEnum.c},
type=GenericEnum<dynamic>
*/
switch (e) {
/*space=GenericEnum.a*/
case GenericEnum.a:
print('a');
break;
/*space=GenericEnum.b*/
case GenericEnum.b:
print('b');
break;
/*space=GenericEnum.c*/
case GenericEnum.c:
print('c');
break;
}
}
void exhaustiveGenericSwitchTyped(GenericEnum<int> e) {
/*
checkingOrder={GenericEnum<int>,GenericEnum.a},
subtypes={GenericEnum.a},
type=GenericEnum<int>
*/
switch (e) {
/*space=GenericEnum.a*/
case GenericEnum.a:
print('a');
break;
}
}
void exhaustiveGenericSwitchTypeVariable<T1>(GenericEnum<T1> e) {
/*
checkingOrder={GenericEnum<T1>,GenericEnum.a,GenericEnum.b,GenericEnum.c},
subtypes={GenericEnum.a,GenericEnum.b,GenericEnum.c},
type=GenericEnum<T1>
*/
switch (e) {
/*space=GenericEnum.a*/
case GenericEnum.a:
print('a');
break;
/*space=GenericEnum.b*/
case GenericEnum.b:
print('b');
break;
/*space=GenericEnum.c*/
case GenericEnum.c:
print('c');
break;
}
}
void exhaustiveGenericSwitchBounded<T2 extends num>(GenericEnum<T2> e) {
/*
checkingOrder={GenericEnum<T2>,GenericEnum.a},
subtypes={GenericEnum.a},
type=GenericEnum<T2>
*/
switch (e) {
/*space=GenericEnum.a*/
case GenericEnum.a:
print('a');
break;
}
}
void nonExhaustiveGenericSwitchTypeVariable<T3>(GenericEnum<T3> e) {
/*
checkingOrder={GenericEnum<T3>,GenericEnum.a,GenericEnum.b,GenericEnum.c},
error=non-exhaustive:GenericEnum.c,
subtypes={GenericEnum.a,GenericEnum.b,GenericEnum.c},
type=GenericEnum<T3>
*/
switch (e) {
/*space=GenericEnum.a*/
case GenericEnum.a:
print('a');
break;
/*space=GenericEnum.b*/
case GenericEnum.b:
print('b');
break;
}
}
void exhaustiveGenericSwitchTypeVariableByType<T4>(GenericEnum<T4> e) {
/*
checkingOrder={GenericEnum<T4>,GenericEnum.a,GenericEnum.b,GenericEnum.c},
subtypes={GenericEnum.a,GenericEnum.b,GenericEnum.c},
type=GenericEnum<T4>
*/
switch (e) {
/*space=GenericEnum.a*/
case GenericEnum.a:
print('a');
break;
/*space=GenericEnum.b*/
case GenericEnum.b:
print('b');
break;
/*space=GenericEnum<T4>*/
case GenericEnum<T4> e:
print('_');
}
}
void nonExhaustiveGenericSwitchTypeVariableByType<T5, S5>(GenericEnum<T5> e) {
/*
checkingOrder={GenericEnum<T5>,GenericEnum.a,GenericEnum.b,GenericEnum.c},
error=non-exhaustive:GenericEnum.c,
subtypes={GenericEnum.a,GenericEnum.b,GenericEnum.c},
type=GenericEnum<T5>
*/
switch (e) {
/*space=GenericEnum.a*/
case GenericEnum.a:
print('a');
break;
/*space=GenericEnum.b*/
case GenericEnum.b:
print('b');
break;
/*space=GenericEnum<S5>*/
case GenericEnum<S5> e:
print('<S>');
}
}