blob: b087dade0c2a92a5df7dbf8fb23f0256ca92431e [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.
import 'dart:async';
sealed class A {}
class B extends A {}
class C extends A {}
exhaustiveBoolByValue(FutureOr<bool> f) {
/*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Future<bool>*/
case Future<bool>():
print('Future');
break;
}
var a = /*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
true /*space=true*/ => 0,
false /*space=false*/ => 1,
Future<bool>() /*space=Future<bool>*/ => 2
};
}
exhaustiveBoolByType(FutureOr<bool> f) {
/*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
/*space=bool*/
case bool():
print('bool');
break;
/*space=Future<bool>*/
case Future<bool>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
/*space=bool*/
case bool():
print('bool');
break;
/*space=Future<bool>*/
case Future():
print('Future');
break;
}
var a = /*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
bool() /*space=bool*/ => 0,
Future<bool>() /*space=Future<bool>*/ => 1
};
}
nonExhaustiveBool(FutureOr<bool> f) {
/*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
error=non-exhaustive:Future<bool>(),
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
}
/*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
error=non-exhaustive:false,
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
/*space=true*/
case true:
print('true');
break;
/*space=Future<bool>*/
case Future<bool>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
error=non-exhaustive:true,
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
/*space=false*/
case false:
print('false');
break;
/*space=Future<bool>*/
case Future<bool>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
error=non-exhaustive:Future<bool>(),
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Future<A>*/
case Future<A>():
print('Future<A>');
break;
}
var a = /*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
error=non-exhaustive:Future<bool>(),
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
true /*space=true*/ => 0,
false /*space=false*/ => 1,
};
var b = /*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
error=non-exhaustive:false,
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
true /*space=true*/ => 0,
Future<bool>() /*space=Future<bool>*/ => 2
};
var c = /*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
error=non-exhaustive:true,
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
false /*space=false*/ => 1,
Future<bool>() /*space=Future<bool>*/ => 2
};
var d = /*
checkingOrder={FutureOr<bool>,bool,Future<bool>,true,false},
error=non-exhaustive:Future<bool>(),
expandedSubtypes={true,false,Future<bool>},
subtypes={bool,Future<bool>},
type=FutureOr<bool>
*/
switch (f) {
true /*space=true*/ => 0,
false /*space=false*/ => 1,
Future<A>() /*space=Future<A>*/ => 2,
};
}
exhaustiveSealedBySubtype(FutureOr<A> f) {
/*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
/*space=B*/
case B():
print('B');
break;
/*space=C*/
case C():
print('C');
break;
/*space=Future<A>*/
case Future<A>():
print('Future');
break;
}
var a = /*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
B() /*space=B*/ => 0,
C() /*space=C*/ => 1,
Future<A>() /*space=Future<A>*/ => 2
};
}
exhaustiveSealedByType(FutureOr<A> f) {
/*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
/*space=A*/
case A():
print('A');
break;
/*space=Future<A>*/
case Future<A>():
print('Future');
break;
}
var a = /*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
A() /*space=A*/ => 0,
Future<A>() /*space=Future<A>*/ => 1
};
}
nonExhaustiveSealed(FutureOr<A> f) {
/*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
error=non-exhaustive:Future<A>(),
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
/*space=B*/
case B():
print('B');
break;
/*space=C*/
case C():
print('C');
break;
}
/*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
error=non-exhaustive:C(),
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
/*space=B*/
case B():
print('true');
break;
/*space=Future<A>*/
case Future<A>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
error=non-exhaustive:B(),
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
/*space=C*/
case C():
print('C');
break;
/*space=Future<A>*/
case Future<A>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
error=non-exhaustive:Future<A>(),
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
/*space=B*/ case B():
print('B');
break;
/*space=C*/ case C():
print('C');
break;
/*space=Future<B>*/ case Future<B>():
print('Future<B>');
break;
/*
error=unreachable,
space=Future<B>
*/
case Future<B>():
print('Future<C>');
break;
}
var a = /*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
error=non-exhaustive:Future<A>(),
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
B() /*space=B*/ => 0,
C() /*space=C*/ => 1,
};
var b = /*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
error=non-exhaustive:C(),
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
B() /*space=B*/ => 0,
Future<A>() /*space=Future<A>*/ => 2
};
var c = /*
checkingOrder={FutureOr<A>,A,Future<A>,B,C},
error=non-exhaustive:B(),
expandedSubtypes={B,C,Future<A>},
subtypes={A,Future<A>},
type=FutureOr<A>
*/
switch (f) {
C() /*space=C*/ => 1,
Future<A>() /*space=Future<A>*/ => 2
};
}
exhaustiveRegular(FutureOr<int> f) {
var a = /*
checkingOrder={FutureOr<int>,int,Future<int>},
subtypes={int,Future<int>},
type=FutureOr<int>
*/
switch (f) {
int() /*space=int*/ => 0,
Future<int>() /*space=Future<int>*/ => 1
};
}
nonExhaustiveRegular(FutureOr<int> f) {
var a = /*
checkingOrder={FutureOr<int>,int,Future<int>},
error=non-exhaustive:Future<int>(),
subtypes={int,Future<int>},
type=FutureOr<int>
*/
switch (f) {
int() /*space=int*/ => 0,
Future<String>() /*space=Future<String>*/ => 1
};
var b = /*
checkingOrder={FutureOr<int>,int,Future<int>},
error=non-exhaustive:int(),
subtypes={int,Future<int>},
type=FutureOr<int>
*/
switch (f) {
String() /*space=String*/ => 0,
Future<int>() /*space=Future<int>*/ => 1
};
}
exhaustiveNullable(
FutureOr<bool>? f1, FutureOr<bool?> f2, FutureOr<bool?>? f3) {
/*
checkingOrder={FutureOr<bool>?,FutureOr<bool>,Null,bool,Future<bool>,true,false},
expandedSubtypes={true,false,Future<bool>,Null},
subtypes={FutureOr<bool>,Null},
type=FutureOr<bool>?
*/
switch (f1) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Null*/
case null:
print('null');
break;
/*space=Future<bool>*/
case Future<bool>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<bool?>,bool?,Future<bool?>,bool,Null,true,false},
expandedSubtypes={true,false,Null,Future<bool?>},
subtypes={bool?,Future<bool?>},
type=FutureOr<bool?>
*/
switch (f2) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Null*/
case null:
print('null');
break;
/*space=Future<bool?>*/
case Future<bool?>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<bool?>,FutureOr<bool?>,Null,bool?,Future<bool?>,bool,Null,true,false},
expandedSubtypes={true,false,Null,Future<bool?>},
subtypes={FutureOr<bool?>,Null},
type=FutureOr<bool?>
*/
switch (f3) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Null*/
case null:
print('null');
break;
/*space=Future<bool?>*/
case Future<bool?>():
print('Future');
break;
}
}
nonExhaustiveNullable(
FutureOr<bool>? f1, FutureOr<bool?> f2, FutureOr<bool?>? f3) {
/*
checkingOrder={FutureOr<bool>?,FutureOr<bool>,Null,bool,Future<bool>,true,false},
error=non-exhaustive:null,
expandedSubtypes={true,false,Future<bool>,Null},
subtypes={FutureOr<bool>,Null},
type=FutureOr<bool>?
*/
switch (f1) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Future<bool>*/
case Future<bool>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<bool?>,bool?,Future<bool?>,bool,Null,true,false},
error=non-exhaustive:null,
expandedSubtypes={true,false,Null,Future<bool?>},
subtypes={bool?,Future<bool?>},
type=FutureOr<bool?>
*/
switch (f2) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Future<bool?>*/
case Future<bool?>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<bool?>,bool?,Future<bool?>,bool,Null,true,false},
error=non-exhaustive:Future<bool?>(),
expandedSubtypes={true,false,Null,Future<bool?>},
subtypes={bool?,Future<bool?>},
type=FutureOr<bool?>
*/
switch (f2) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Null*/
case null:
print('null');
break;
/*space=Future<bool>*/
case Future<bool>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<bool?>,FutureOr<bool?>,Null,bool?,Future<bool?>,bool,Null,true,false},
error=non-exhaustive:null;null,
expandedSubtypes={true,false,Null,Future<bool?>},
subtypes={FutureOr<bool?>,Null},
type=FutureOr<bool?>
*/
switch (f3) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Future<bool?>*/
case Future<bool?>():
print('Future');
break;
}
/*
checkingOrder={FutureOr<bool?>,FutureOr<bool?>,Null,bool?,Future<bool?>,bool,Null,true,false},
error=non-exhaustive:Future<bool?>(),
expandedSubtypes={true,false,Null,Future<bool?>},
subtypes={FutureOr<bool?>,Null},
type=FutureOr<bool?>
*/
switch (f3) {
/*space=true*/
case true:
print('true');
break;
/*space=false*/
case false:
print('false');
break;
/*space=Null*/
case null:
print('null');
break;
/*space=Future<bool>*/
case Future<bool>():
print('Future');
break;
}
}