@Test
public void isAssignableFrom_should_work_for_parameterized_class_and_a_direct_sub_class() {

	// AbstractList and ArrayList
	softly.assertThat(isAssignableFrom(
			new TypeReference<AbstractList<String>>() {}.getType(),
			new TypeReference<ArrayList<String>>() {}.getType()
	)).isTrue();
	softly.assertThat(isAssignableFrom(
			new TypeReference<AbstractList<String>>() {}.getType(),
			new TypeReference<ArrayList<Number>>() {}.getType()
	)).isFalse();
	// UnTypedImpl and MoreUnTypedImpl
	softly.assertThat(isAssignableFrom(
			new TypeReference<UnTypedImpl<String>>() {}.getType(),
			new TypeReference<MoreUnTypedImpl<String>>() {}.getType()
	)).isTrue();
	softly.assertThat(isAssignableFrom(
			new TypeReference<UnTypedImpl<String>>() {}.getType(),
			new TypeReference<MoreUnTypedImpl<Integer>>() {}.getType()
	)).isFalse();
	// AbstractMap and HashMap
	softly.assertThat(isAssignableFrom(
			new TypeReference<AbstractMap<String, Number>>() {}.getType(),
			new TypeReference<HashMap<String, Number>>() {}.getType()
	)).isTrue();
	softly.assertThat(isAssignableFrom(
			new TypeReference<AbstractMap<String, Number>>() {}.getType(),
			new TypeReference<HashMap<Double, Number>>() {}.getType()
	)).isFalse();
	softly.assertThat(isAssignableFrom(
			new TypeReference<AbstractMap<String, Number>>() {}.getType(),
			new TypeReference<HashMap<String, Integer>>() {}.getType()
	)).isFalse();
}