final Type b = new TypeLiteral<B>() {
}.getType();
final Type c = new TypeLiteral<C>() {
}.getType();
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Collection.class, Number.class), a));
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Iterable.class, Number.class), a));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(List.class, Number.class), a));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Iterable.class, Object.class), a));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Iterable.class, Integer.class), a));
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Iterable.class, Runnable.class), b));
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Collection.class, Runnable.class), b));
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(List.class, Runnable.class), b));
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Comparable.class, CharSequence.class), b));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(ArrayList.class, Runnable.class), b));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(List.class, Object.class), b));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(List.class, FutureTask.class), b));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Comparable.class, String.class), b));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Comparable.class, Object.class), b));
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Iterable.class, Runnable.class), c));
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Collection.class, Runnable.class), c));
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(List.class, Runnable.class), c));
assertTrue(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Comparable.class, CharSequence.class), c));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(ArrayList.class, Runnable.class), c));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(List.class, Object.class), c));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(List.class, FutureTask.class), c));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Comparable.class, String.class), c));
assertFalse(CovariantTypes.isAssignableFrom(new ParameterizedTypeImpl(Comparable.class, Object.class), c));
}