blob: c563314970248a449ad26712da41783080d15e97 [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>');
}
}