blob: 2a064eaf9be91eb3d023ca7ada2e6f1ebc85eba4 [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:math' as math;
class Circle {
final double radius;
Circle(this.radius);
}
test1(dynamic x) =>
switch (x) {
Circle(radius: var r) when r > 0 => r * r * math.pi,
_ => null
};
dynamic Function(dynamic)? captured;
test2(dynamic x) =>
switch (x) {
[int a, int b] when (captured = (x) { return a + b; }) is dynamic => captured!(a = b),
[String a, String b] when (captured = (x) { return a + b; }) is dynamic => captured!(a = b),
_ => null
};
test3(dynamic x) {
switch (x) {
case [int a, int b] when (captured = (x) { return a + b; }) is dynamic:
return captured!(a = b);
case [String a, String b] when (captured = (x) { return a + b; }) is dynamic:
return captured!(a = b);
default:
return null;
}
}
main() {
expectEquals(math.pi, test1(new Circle(1)));
expectEquals(null, test1(null));
expectEquals(4, test2([1, 2]));
expectEquals("twotwo", test2(["one", "two"]));
expectEquals(null, test2(null));
expectEquals(4, test3([1, 2]));
expectEquals("twotwo", test3(["one", "two"]));
expectEquals(null, test3(null));
print('success');
}
expectEquals(x, y) {
if (x != y) {
throw "Expected ${x} to be equal to ${y}.";
}
}