blob: 2d17fca0f719f23ca94684486de9a5c136cff386 [file] [log] [blame]
// Copyright (c) 2024, 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 Enum { a, b, c, d, e }
nonExhaustiveEnum1(Enum e) => /*
checkingOrder={Enum,Enum.a,Enum.b,Enum.c,Enum.d,Enum.e},
error=non-exhaustive:Enum.b;Enum.c;Enum.d;Enum.e,
subtypes={Enum.a,Enum.b,Enum.c,Enum.d,Enum.e},
type=Enum
*/ switch (e) {
Enum.a /*space=Enum.a*/ => 0,
};
nonExhaustiveEnumNested1((Enum, Enum) r) => /*
error=non-exhaustive:(Enum.a, Enum.b),
fields={$1:Enum,$2:Enum},
type=(Enum, Enum)
*/ switch (r) {
(Enum.a, Enum.a) /*space=(Enum.a, Enum.a)*/ => 0,
(Enum.c, Enum.a) /*space=(Enum.c, Enum.a)*/ => 1,
(Enum.e, Enum a) /*space=(Enum.e, Enum)*/ => 2,
};
nonExhaustiveEnumNested2((Enum, Enum) r) => /*
error=non-exhaustive:(Enum.b, _),
fields={$1:Enum,$2:Enum},
type=(Enum, Enum)
*/ switch (r) {
(Enum.a, Enum.a) /*space=(Enum.a, Enum.a)*/ => 0,
(Enum.a, Enum.c) /*space=(Enum.a, Enum.c)*/ => 1,
(Enum.a, Enum e) /*space=(Enum.a, Enum)*/ => 2,
};
nonExhaustiveEnumNested3((Enum, Enum) r) => /*
error=non-exhaustive:(Enum.b, _),
fields={$1:Enum,$2:Enum},
type=(Enum, Enum)
*/ switch (r) {
(Enum.a, Enum()) /*space=(Enum.a, Enum)*/ => 0,
(Enum.c, Enum()) /*space=(Enum.c, Enum)*/ => 1,
(Enum.e, Enum()) /*space=(Enum.e, Enum)*/ => 2,
};
nonExhaustiveEnumNested4((Enum, Enum) r) => /*
error=non-exhaustive:(Enum.a, Enum.b),
fields={$1:Enum,$2:Enum},
type=(Enum, Enum)
*/ switch (r) {
(Enum(), Enum.a) /*space=(Enum, Enum.a)*/ => 0,
(Enum(), Enum.c) /*space=(Enum, Enum.c)*/ => 1,
(Enum(), Enum.e) /*space=(Enum, Enum.e)*/ => 2,
};
sealed class S {}
class A extends S {}
class B extends S {}
class C extends S {}
class D extends S {}
class E extends S {}
nonExhaustiveSealed1(S s) => /*
checkingOrder={S,A,B,C,D,E},
error=non-exhaustive:B();C();D();E(),
subtypes={A,B,C,D,E},
type=S
*/ switch (s) {
A() /*space=A*/ => 0,
};
nonExhaustiveSealed2(S s) => /*
checkingOrder={S,A,B,C,D,E},
error=non-exhaustive:B();D(),
subtypes={A,B,C,D,E},
type=S
*/ switch (s) {
A() /*space=A*/ => 0,
C() /*space=C*/ => 1,
E() /*space=E*/ => 2,
};
nonExhaustiveSealedNested1((S, S) r) => /*
error=non-exhaustive:(A(), B()),
fields={$1:S,$2:S},
type=(S, S)
*/ switch (r) {
(A(), A()) /*space=(A, A)*/ => 0,
(C(), A()) /*space=(C, A)*/ => 1,
(E(), A()) /*space=(E, A)*/ => 2,
};
nonExhaustiveSealedNested2((S, S) r) => /*
error=non-exhaustive:(A(), B()),
fields={$1:S,$2:S},
type=(S, S)
*/ switch (r) {
(A(), A()) /*space=(A, A)*/ => 0,
(A(), C()) /*space=(A, C)*/ => 1,
(A(), E()) /*space=(A, E)*/ => 2,
};
nonExhaustiveSealedNested3((S, S) r) => /*
error=non-exhaustive:(B(), _),
fields={$1:S,$2:S},
type=(S, S)
*/ switch (r) {
(A(), S()) /*space=(A, S)*/ => 0,
(C(), S()) /*space=(C, S)*/ => 1,
(E(), S()) /*space=(E, S)*/ => 2,
};
nonExhaustiveSealedNested4((S, S) r) => /*
error=non-exhaustive:(A(), B()),
fields={$1:S,$2:S},
type=(S, S)
*/ switch (r) {
(S(), A()) /*space=(S, A)*/ => 0,
(S(), C()) /*space=(S, C)*/ => 1,
(S(), E()) /*space=(S, E)*/ => 2,
};