def test_find_subtypes_of_complex_hierarchy():
    tname = "type1[type2, type3[type4[type5, type6] ] ]"
    subtypes = find_all_subtypes(tname)
    assert_in("type1", subtypes)
    assert_in("type2", subtypes)
    assert_in("type3", subtypes)
    assert_in("type4", subtypes)
    assert_in("type5", subtypes)
    assert_in("type6", subtypes)
    assert_equal(len(subtypes), 6)
def test_find_subtypes_of_complex_hierarchy():
    tname = "type1[type2, type3[type4[type5, type6] ] ]"
    subtypes = find_all_subtypes(tname)
    assert_in("type1", subtypes)
    assert_in("type2", subtypes)
    assert_in("type3", subtypes)
    assert_in("type4", subtypes)
    assert_in("type5", subtypes)
    assert_in("type6", subtypes)
    assert_equal(len(subtypes), 6)
def test_find_subtypes_of_vector_with_pointer():
    subtypes = find_all_subtypes("vector[double *]")
    assert_in("vector", subtypes)
    assert_in("double *", subtypes)
    assert_equal(len(subtypes), 2)
def test_find_subtypes_of_vector():
    subtypes = find_all_subtypes("vector[double]")
    assert_in("vector", subtypes)
    assert_in("double", subtypes)
    assert_equal(len(subtypes), 2)
def test_find_subtypes_of_primitive():
    subtypes = find_all_subtypes("double")
    assert_true(len(subtypes) == 0)
def test_find_subtypes_of_vector_with_pointer():
    subtypes = find_all_subtypes("vector[double *]")
    assert_in("vector", subtypes)
    assert_in("double *", subtypes)
    assert_equal(len(subtypes), 2)
def test_find_subtypes_of_vector():
    subtypes = find_all_subtypes("vector[double]")
    assert_in("vector", subtypes)
    assert_in("double", subtypes)
    assert_equal(len(subtypes), 2)
def test_find_subtypes_of_primitive():
    subtypes = find_all_subtypes("double")
    assert_true(len(subtypes) == 0)