// Copyright (c) 2020, 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.

// Tests elimination of type casts.

class A<T> {}

class B<T> extends A<T> {
  testT1(x) => x as T;
  testT2(x) => x as T;
  testT3(x) => x as T;
  testNullableT1(x) => x as T?;
  testNullableT2(x) => x as T?;
}

testInt1(x) => x as int;
testInt2(x) => x as int;
testNullableInt1(x) => x as int?;
testNullableInt2(x) => x as int?;
testDynamic(x) => x as dynamic;
testObject(x) => x as Object;
testNullableObject(x) => x as Object?;
testAOfNum1(x) => x as A<num>;
testAOfNum2(x) => x as A<num>;
testAOfNum3(x) => x as A<num>;
testAOfNullableNum(x) => x as A<num?>;
testNullableAOfNum(x) => x as A<num>?;
testNullableAOfNullableNum(x) => x as A<num?>?;

void main() {
  testInt1(42);
  testInt2(null);
  testNullableInt1(42);
  testNullableInt2(null);
  testDynamic('hi');
  testObject(null);
  testNullableObject(null);
  testAOfNum1(new B<int>());
  testAOfNum2(new B<int?>());
  testAOfNum3(null);
  testAOfNullableNum(new B<int?>());
  testNullableAOfNum(null);
  testNullableAOfNullableNum(new B<int?>());
  new B<int>().testT1(42);
  new B<int>().testT2(null);
  new B<int?>().testT3(null);
  new B<int>().testNullableT1(42);
  new B<int>().testNullableT2(null);
}
